Merge remote-tracking branch 'upstream/main' into fix_jruby_proto3_optional
# Conflicts:
# ruby/tests/stress.rb
diff --git a/.bazelrc b/.bazelrc
index eba2a89..4eea8fb 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -7,7 +7,6 @@
build:san-common --config=dbg --strip=never --copt=-O0 --copt=-fno-omit-frame-pointer
build:asan --config=san-common --copt=-fsanitize=address --linkopt=-fsanitize=address
-build:asan --copt=-DADDRESS_SANITIZER=1
# ASAN hits ODR violations with shared linkage due to rules_proto.
build:asan --dynamic_mode=off
@@ -15,14 +14,11 @@
build:msan --copt=-fsanitize-memory-track-origins
build:msan --copt=-fsanitize-memory-use-after-dtor
build:msan --action_env=MSAN_OPTIONS=poison_in_dtor=1
-build:msan --copt=-DMEMORY_SANITIZER=1
build:tsan --config=san-common --copt=-fsanitize=thread --linkopt=-fsanitize=thread
-build:tsan --copt=-DTHREAD_SANITIZER=1
build:ubsan --config=san-common --copt=-fsanitize=undefined --linkopt=-fsanitize=undefined
build:ubsan --action_env=UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1
-build:ubsan --copt=-DUNDEFINED_SANITIZER=1
# Workaround for the fact that Bazel links with $CC, not $CXX
# https://github.com/bazelbuild/bazel/issues/11122#issuecomment-613746748
build:ubsan --copt=-fno-sanitize=function --copt=-fno-sanitize=vptr
diff --git a/.github/workflows/clear_caches.yml b/.github/workflows/clear_caches.yml
index 30f379b..5aadfac 100644
--- a/.github/workflows/clear_caches.yml
+++ b/.github/workflows/clear_caches.yml
@@ -3,7 +3,7 @@
on:
schedule:
# Run every 4 months at 10 AM UTC (2 AM PDT)
- - cron: 0 10 1 */4 *
+ - cron: 0 10 5 */4 *
# manual
workflow_dispatch:
@@ -31,5 +31,5 @@
- name: Create an empty cache with a single file
run: |
rm -rf .repository-cache
- mkdir -p .repository-cache'
+ mkdir -p .repository-cache
touch .repository-cache/reset_file
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index bf2788f..22b3195 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -32,7 +32,7 @@
persist-credentials: false
- name: "Run analysis"
- uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2
+ uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
with:
results_file: results.sarif
results_format: sarif
diff --git a/.github/workflows/test_cpp.yml b/.github/workflows/test_cpp.yml
index 0aef03d..a2011b1 100644
--- a/.github/workflows/test_cpp.yml
+++ b/.github/workflows/test_cpp.yml
@@ -30,6 +30,9 @@
- targets: //pkg/... //src/... @com_google_protobuf_examples//... //third_party/utf8_range/...
# Override cases with custom images
+ - config: { name: "Bazel7" }
+ image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:7.0.0-a04396cc76704d4b7c722789e9c08df18f47df53"
+ targets: "//src/... //third_party/utf8_range/..."
- config: { name: "TCMalloc" }
image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/tcmalloc@sha256:bd39119d74b8a3fad4ae335d4cf5294e70384676331b7e19949459fc7a8d8328"
targets: "//src/... //third_party/utf8_range/..."
@@ -313,21 +316,32 @@
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
include:
- - name: MacOS
+ - name: MacOS Bazel
os: macos-12
cache_key: macos-12
bazel: test //src/... //third_party/utf8_range/...
- - name: MacOS Apple Silicon (build only)
+ # TODO Enable these once mac setup is working for Bazel 7
+ #- name: MacOS Bazel 7
+ # os: macos-12
+ # cache_key: macos-12-bazel7
+ # bazel: test //src/... //third_party/utf8_range/...
+ # bazel_version: '7.0.0'
+ - name: MacOS Apple Silicon (build only) Bazel
os: macos-12
cache_key: macos-12-arm
# Current github runners are all Intel based, so just build/compile
# for Apple Silicon to detect issues there.
bazel: build --cpu=darwin_arm64 //src/... //third_party/utf8_range/...
- - name: Windows
+ - name: Windows Bazel
os: windows-2022
cache_key: windows-2022
bazel: test //src/... @com_google_protobuf_examples//... --test_tag_filters=-conformance --build_tag_filters=-conformance
- name: ${{ matrix.name }} Bazel
+ - name: Windows Bazel 7
+ os: windows-2022
+ cache_key: windows-2022-bazel7
+ bazel: test //src/... @com_google_protobuf_examples//... --test_tag_filters=-conformance --build_tag_filters=-conformance
+ bazel_version: '7.0.0'
+ name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout pending changes
@@ -340,16 +354,18 @@
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
bazel: ${{ matrix.bazel }}
bazel-cache: cpp_${{ matrix.cache_key }}
+ version: ${{ matrix.bazel_version || '6.3.0' }}
non-linux-cmake:
strategy:
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
include:
- - name: MacOS CMake
- os: macos-12
- flags: -DCMAKE_CXX_STANDARD=14
- cache-prefix: macos-cmake
+ # TODO: investigate and fix
+ # - name: MacOS CMake
+ # os: macos-12
+ # flags: -DCMAKE_CXX_STANDARD=14
+ # cache-prefix: macos-cmake
- name: Windows CMake
os: windows-2022
flags: >-
diff --git a/.github/workflows/test_ruby.yml b/.github/workflows/test_ruby.yml
index 4f3707b..6c456cb 100644
--- a/.github/workflows/test_ruby.yml
+++ b/.github/workflows/test_ruby.yml
@@ -24,9 +24,10 @@
#- { name: Ruby 2.7, ruby: ruby-2.7.0, ffi: FFI }
- { name: Ruby 3.0, ruby: ruby-3.0.2 }
- { name: Ruby 3.1, ruby: ruby-3.1.0 }
- - { name: Ruby 3.2, ruby: ruby-3.2.0, ffi: NATIVE }
+ - { name: Ruby 3.2, ruby: ruby-3.2.0 }
+ - { name: Ruby 3.3, ruby: ruby-3.3.0, ffi: NATIVE }
# TODO Re-enable these once flakes are fixed
- #- { name: Ruby 3.2, ruby: ruby-3.2.0, ffi: FFI }
+ #- { name: Ruby 3.3, ruby: ruby-3.3.0, ffi: FFI }
- { name: JRuby 9.4, ruby: jruby-9.4.3.0, ffi: NATIVE }
- { name: JRuby 9.4, ruby: jruby-9.4.3.0, ffi: FFI }
@@ -40,7 +41,7 @@
- name: Run tests
uses: protocolbuffers/protobuf-ci/bazel-docker@v2
with:
- image: ${{ matrix.image || format('us-docker.pkg.dev/protobuf-build/containers/test/linux/ruby:{0}-6.3.0-66964dc8b07b6d1fc73a5cc14e59e84c1c534cea', matrix.ruby) }}
+ image: ${{ matrix.image || format('us-docker.pkg.dev/protobuf-build/containers/test/linux/ruby:{0}-6.3.0-904cad5249547845454998ca3837a34c71fabf96', matrix.ruby) }}
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
bazel-cache: ruby_linux/${{ matrix.ruby }}_${{ matrix.bazel }}
bazel: test //ruby/... //ruby/tests:ruby_version --test_env=KOKORO_RUBY_VERSION --test_env=BAZEL=true ${{ matrix.ffi == 'FFI' && '--//ruby:ffi=enabled --test_env=PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION=FFI' || '' }}
@@ -67,9 +68,10 @@
with:
image: i386/ruby:2.7.3-buster
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
+ # Pin to Ruby 2.7 compatible bundler version.
command: >-
/bin/bash -cex '
- gem install bundler;
+ gem install bundler -v 2.4.22;
cd /workspace/ruby;
bundle;
PROTOC=/workspace/${{ steps.cross-compile.outputs.protoc }} rake;
@@ -98,9 +100,10 @@
with:
image: arm64v8/ruby:2.7.3-buster
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
+ # Pin to Ruby 2.7 compatible bundler version.
command: >-
/bin/bash -cex '
- gem install bundler;
+ gem install bundler -v 2.4.22;
cd /workspace/ruby;
bundle;
PROTOC=/workspace/${{ steps.cross-compile.outputs.protoc }} rake;
@@ -120,9 +123,10 @@
#- { version: "2.7", ffi: FFI }
- { version: "3.0" }
- { version: "3.1" }
- - { version: "3.2", ffi: NATIVE }
+ - { version: "3.2" }
+ - { version: "3.3", ffi: NATIVE }
# TODO Re-enable these once flakes are fixed
- #- { version: "3.2", ffi: FFI }
+ #- { version: "3.3", ffi: FFI }
name: MacOS Ruby ${{ matrix.version }}${{ matrix.ffi == 'FFI' && ' FFI' || '' }}
runs-on: macos-12
@@ -133,7 +137,7 @@
ref: ${{ inputs.safe-checkout }}
- name: Pin Ruby version
- uses: ruby/setup-ruby@ee26e27437bde475b19a6bf8cb73c9fa658876a2 # v1.134.0
+ uses: ruby/setup-ruby@961f85197f92e4842e3cb92a4f97bd8e010cdbaf # v1.165.0
with:
ruby-version: ${{ matrix.version }}
@@ -158,8 +162,9 @@
- { name: Ruby 2.7, ruby: ruby-2.7.0, ffi: FFI }
- { name: Ruby 3.0, ruby: ruby-3.0.2}
- { name: Ruby 3.1, ruby: ruby-3.1.0}
- - { name: Ruby 3.2, ruby: ruby-3.2.0, ffi: NATIVE }
- - { name: Ruby 3.2, ruby: ruby-3.2.0, ffi: FFI }
+ - { name: Ruby 3.2, ruby: ruby-3.2.0}
+ - { name: Ruby 3.3, ruby: ruby-3.3.0, ffi: NATIVE }
+ - { name: Ruby 3.3, ruby: ruby-3.3.0, ffi: FFI }
- { name: JRuby 9.4, ruby: jruby-9.4.3.0, ffi: NATIVE }
- { name: JRuby 9.4, ruby: jruby-9.4.3.0, ffi: FFI }
name: Install ${{ matrix.name }}${{ matrix.ffi == 'FFI' && ' FFI' || '' }}
@@ -172,7 +177,7 @@
- name: Run tests
uses: protocolbuffers/protobuf-ci/bazel-docker@v2
with:
- image: us-docker.pkg.dev/protobuf-build/containers/test/linux/ruby:${{ matrix.ruby }}-6.3.0-66964dc8b07b6d1fc73a5cc14e59e84c1c534cea
+ image: us-docker.pkg.dev/protobuf-build/containers/test/linux/ruby:${{ matrix.ruby }}-6.3.0-904cad5249547845454998ca3837a34c71fabf96
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
bazel-cache: ruby_install/${{ matrix.ruby }}_${{ matrix.bazel }}
bash: >
diff --git a/.github/workflows/test_upb.yml b/.github/workflows/test_upb.yml
index 813a520..a6d7f19 100644
--- a/.github/workflows/test_upb.yml
+++ b/.github/workflows/test_upb.yml
@@ -17,9 +17,11 @@
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
config:
+ - { name: "Bazel 7", bazel_version: "7.0.0" }
- { name: "Fastbuild" }
- { name: "Optimized", flags: "-c opt" }
- { name: "FastTable", flags: "--//upb:fasttable_enabled=true" }
+ - { name: "FastTable ASAN", flags: "--//upb:fasttable_enabled=true --config=asan", exclude-targets: "-//benchmarks:benchmark -//python/..." }
- { name: "ASAN", flags: "--config=asan -c dbg", exclude-targets: "-//benchmarks:benchmark -//python/..." }
- { name: "UBSAN", flags: "--config=ubsan -c dbg", exclude-targets: "-//benchmarks:benchmark -//python/... -//lua/..." }
- { name: "32-bit", flags: "--copt=-m32 --linkopt=-m32", exclude-targets: "-//benchmarks:benchmark -//python/..." }
@@ -36,7 +38,7 @@
- name: Run tests
uses: protocolbuffers/protobuf-ci/bazel-docker@v2
with:
- image: us-docker.pkg.dev/protobuf-build/containers/test/linux/sanitize@sha256:04cd765285bc52cbbf51d66c8c66d8603579cf0f19cc42df26b09d2c270541fb
+ image: us-docker.pkg.dev/protobuf-build/containers/test/linux/sanitize:${{ matrix.config.bazel_version || '6.3.0' }}-d07b7d649401d147e71e7182d2832cc8344f1f35
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
bazel-cache: upb-bazel
bazel: test --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 //bazel/... //benchmarks/... //lua/... //protos/... //protos_generator/... //python/... //upb/... //upb_generator/... ${{ matrix.config.flags }}
@@ -80,6 +82,7 @@
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
bazel-cache: "upb-bazel-windows"
bazel: test --cxxopt=/std:c++17 --host_cxxopt=/std:c++17 //upb/... //upb_generator/... //python/... //protos/... //protos_generator/...
+ version: 6.3.0
exclude-targets: -//python:conformance_test -//upb/reflection:def_builder_test
macos:
@@ -106,6 +109,7 @@
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
bazel-cache: "upb-bazel-macos"
bazel: ${{ matrix.config.bazel-command }} --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 ${{ matrix.config.flags }} //bazel/... //benchmarks/... //lua/... //protos/... //protos_generator/... //python/... //upb/... //upb_generator/...
+ version: 6.3.0
no-python:
strategy:
diff --git a/BUILD.bazel b/BUILD.bazel
index 5951297..6a245bc 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -5,7 +5,7 @@
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
load("//build_defs:cpp_opts.bzl", "COPTS", "LINK_OPTS")
-load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library", "internal_ruby_proto_library")
+load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
licenses(["notice"])
@@ -150,17 +150,6 @@
visibility = ["//visibility:public"],
)
-internal_ruby_proto_library(
- name = "well_known_ruby_protos",
- srcs = [":well_known_protos"],
- default_runtime = "",
- includes = ["src"],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
-)
-
################################################################################
# Protocol Buffers Compiler
################################################################################
@@ -524,33 +513,6 @@
],
)
-internal_ruby_proto_library(
- name = "test_messages_proto2_ruby_proto",
- testonly = 1,
- srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
- includes = ["src/google/protobuf"],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
-)
-
-internal_ruby_proto_library(
- name = "test_messages_proto3_ruby_proto",
- testonly = 1,
- srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
- includes = [
- "src/google/protobuf",
- # The above must come first.
- "src",
- ],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
- deps = [":well_known_ruby_protos"],
-)
-
filegroup(
name = "bzl_srcs",
srcs = glob(["**/*.bzl"]),
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f78fccc..4fae55b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -279,6 +279,8 @@
include_directories(
${ZLIB_INCLUDE_DIRECTORIES}
${protobuf_BINARY_DIR}
+ # Support #include-ing other top-level directories, i.e. upb_generator.
+ ${protobuf_SOURCE_DIR}
${protobuf_SOURCE_DIR}/src)
set(protobuf_ABSL_PROVIDER "module" CACHE STRING "Provider of absl library")
diff --git a/WORKSPACE b/WORKSPACE
index cc11229..eb31a6e 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -91,6 +91,15 @@
kt_register_toolchains()
+http_archive(
+ name = "rules_ruby",
+ urls = [
+ "https://github.com/protocolbuffers/rules_ruby/archive/b7f3e9756f3c45527be27bc38840d5a1ba690436.zip"
+ ],
+ strip_prefix = "rules_ruby-b7f3e9756f3c45527be27bc38840d5a1ba690436",
+ sha256 = "347927fd8de6132099fcdc58e8f7eab7bde4eb2fd424546b9cd4f1c6f8f8bad8",
+)
+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
ruby_runtime("system_ruby")
diff --git a/bazel/BUILD b/bazel/BUILD
index a891d61..90d578f 100644
--- a/bazel/BUILD
+++ b/bazel/BUILD
@@ -7,6 +7,7 @@
load("@rules_python//python:defs.bzl", "py_binary")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("@bazel_skylib//lib:selects.bzl", "selects")
# begin:google_only
# package(default_applicable_licenses = ["//upb:license"])
@@ -14,6 +15,16 @@
licenses(["notice"])
+# begin:google_only
+# selects.config_setting_group(
+# name = "android_opt",
+# match_all = [
+# "//tools/cc_target_os:android",
+# "//tools/compilation_mode:opt",
+# ],
+# )
+# end:google_only
+
py_binary(
name = "amalgamate",
srcs = ["amalgamate.py"],
@@ -26,6 +37,9 @@
bzl_library(
name = "py_proto_library_bzl",
srcs = ["py_proto_library.bzl"],
+ deps = [
+ "@rules_python//python:py_info_bzl",
+ ],
)
bzl_library(
@@ -38,8 +52,8 @@
],
deps = [
"@bazel_skylib//lib:paths",
- "@rules_proto//proto:defs",
"@bazel_tools//tools/cpp:toolchain_utils.bzl",
+ "@rules_proto//proto:defs",
],
)
diff --git a/bazel/build_defs.bzl b/bazel/build_defs.bzl
index 64c877e..2da6368 100644
--- a/bazel/build_defs.bzl
+++ b/bazel/build_defs.bzl
@@ -30,12 +30,20 @@
UPB_DEFAULT_CPPOPTS = select({
"//upb:windows": [],
+ # begin:google_only
+ # # Override default -Oz for release builds on Android.
+ # "//bazel:android_opt": _DEFAULT_CPPOPTS + ["-O2"],
+ # end:google_only
"//conditions:default": _DEFAULT_CPPOPTS,
})
UPB_DEFAULT_COPTS = select({
"//upb:windows": [],
"//upb:fasttable_enabled_setting": ["-std=gnu99", "-DUPB_ENABLE_FASTTABLE"],
+ # begin:google_only
+ # # Override default -Oz for release builds on Android.
+ # "//bazel:android_opt": _DEFAULT_COPTS + ["-O2"],
+ # end:google_only
"//conditions:default": _DEFAULT_COPTS,
})
diff --git a/bazel/py_proto_library.bzl b/bazel/py_proto_library.bzl
index 08ff9a8..41c4f6c 100644
--- a/bazel/py_proto_library.bzl
+++ b/bazel/py_proto_library.bzl
@@ -15,6 +15,7 @@
business of vending py_proto_library(), so we keep it private to upb.
"""
+load("@rules_python//python:py_info.bzl", "PyInfo")
load("@bazel_skylib//lib:paths.bzl", "paths")
# begin:github_only
diff --git a/bazel/upb_proto_library_internal/cc_library_func.bzl b/bazel/upb_proto_library_internal/cc_library_func.bzl
index 31ebe90..0c567ce 100644
--- a/bazel/upb_proto_library_internal/cc_library_func.bzl
+++ b/bazel/upb_proto_library_internal/cc_library_func.bzl
@@ -14,6 +14,7 @@
def upb_use_cpp_toolchain():
return ["@bazel_tools//tools/cpp:toolchain_type"]
+
# end:github_only
def cc_library_func(ctx, name, hdrs, srcs, copts, includes, dep_ccinfos):
diff --git a/benchmarks/BUILD b/benchmarks/BUILD
index 108eab4..3b9a9cb 100644
--- a/benchmarks/BUILD
+++ b/benchmarks/BUILD
@@ -6,16 +6,16 @@
# https://developers.google.com/open-source/licenses/bsd
load("@rules_python//python:defs.bzl", "py_binary")
-
-# begin:google_only
-# load("@rules_cc//cc:defs.bzl", "cc_proto_library")
-# end:google_only
-
load(
"//bazel:upb_proto_library.bzl",
"upb_c_proto_library",
"upb_proto_reflection_library",
)
+
+# begin:google_only
+# load("@rules_cc//cc:defs.bzl", "cc_proto_library")
+# end:google_only
+
load(
":build_defs.bzl",
"cc_optimizefor_proto_library",
@@ -76,14 +76,19 @@
":benchmark_descriptor_upb_proto",
":benchmark_descriptor_upb_proto_reflection",
"//:protobuf",
- "@com_google_googletest//:gtest_main",
+ "//src/google/protobuf/json",
"//upb:base",
- "//upb:base_internal",
"//upb:descriptor_upb_proto",
+ "//upb:json",
"//upb:mem",
"//upb:reflection",
+ "//upb:wire",
+ "//upb/base:internal",
"@com_github_google_benchmark//:benchmark_main",
"@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_absl//absl/log:absl_check",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
diff --git a/benchmarks/benchmark.cc b/benchmarks/benchmark.cc
index a2e2cc2..c9658ea 100644
--- a/benchmarks/benchmark.cc
+++ b/benchmarks/benchmark.cc
@@ -1,52 +1,38 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include <benchmark/benchmark.h>
+#include <stdint.h>
#include <string.h>
+#include <string>
#include <vector>
#include "google/ads/googleads/v13/services/google_ads_service.upbdefs.h"
#include "google/protobuf/descriptor.pb.h"
#include "absl/container/flat_hash_set.h"
+#include "absl/log/absl_check.h"
#include "google/protobuf/dynamic_message.h"
+#include "google/protobuf/json/json.h"
#include "benchmarks/descriptor.pb.h"
#include "benchmarks/descriptor.upb.h"
#include "benchmarks/descriptor.upbdefs.h"
#include "benchmarks/descriptor_sv.pb.h"
#include "upb/base/internal/log2.h"
+#include "upb/base/upcast.h"
+#include "upb/json/decode.h"
+#include "upb/json/encode.h"
#include "upb/mem/arena.h"
#include "upb/reflection/def.hpp"
+#include "upb/wire/decode.h"
-upb_StringView descriptor = benchmarks_descriptor_proto_upbdefinit.descriptor;
+upb_StringView descriptor =
+ benchmarks_descriptor_proto_upbdefinit.descriptor;
namespace protobuf = ::google::protobuf;
// A buffer big enough to parse descriptor.proto without going to heap.
@@ -364,9 +350,7 @@
}
BENCHMARK(BM_SerializeDescriptor_Proto2);
-static void BM_SerializeDescriptor_Upb(benchmark::State& state) {
- int64_t total = 0;
- upb_Arena* arena = upb_Arena_New();
+static upb_benchmark_FileDescriptorProto* UpbParseDescriptor(upb_Arena* arena) {
upb_benchmark_FileDescriptorProto* set =
upb_benchmark_FileDescriptorProto_parse(descriptor.data, descriptor.size,
arena);
@@ -374,6 +358,13 @@
printf("Failed to parse.\n");
exit(1);
}
+ return set;
+}
+
+static void BM_SerializeDescriptor_Upb(benchmark::State& state) {
+ int64_t total = 0;
+ upb_Arena* arena = upb_Arena_New();
+ upb_benchmark_FileDescriptorProto* set = UpbParseDescriptor(arena);
for (auto _ : state) {
upb_Arena* enc_arena = upb_Arena_Init(buf, sizeof(buf), nullptr);
size_t size;
@@ -388,3 +379,92 @@
state.SetBytesProcessed(total);
}
BENCHMARK(BM_SerializeDescriptor_Upb);
+
+static absl::string_view UpbJsonEncode(upb_benchmark_FileDescriptorProto* proto,
+ const upb_MessageDef* md,
+ upb_Arena* arena) {
+ size_t size =
+ upb_JsonEncode(UPB_UPCAST(proto), md, nullptr, 0, nullptr, 0, nullptr);
+ char* buf = reinterpret_cast<char*>(upb_Arena_Malloc(arena, size + 1));
+ upb_JsonEncode(UPB_UPCAST(proto), md, nullptr, 0, buf, size, nullptr);
+ return absl::string_view(buf, size);
+}
+
+static void BM_JsonParse_Upb(benchmark::State& state) {
+ upb_Arena* arena = upb_Arena_New();
+ upb_benchmark_FileDescriptorProto* set =
+ upb_benchmark_FileDescriptorProto_parse(descriptor.data, descriptor.size,
+ arena);
+ if (!set) {
+ printf("Failed to parse.\n");
+ exit(1);
+ }
+
+ upb::DefPool defpool;
+ const upb_MessageDef* md =
+ upb_benchmark_FileDescriptorProto_getmsgdef(defpool.ptr());
+ auto json = UpbJsonEncode(set, md, arena);
+
+ for (auto _ : state) {
+ upb_Arena* arena = upb_Arena_New();
+ upb_benchmark_FileDescriptorProto* proto =
+ upb_benchmark_FileDescriptorProto_new(arena);
+ upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(proto), md,
+ defpool.ptr(), 0, arena, nullptr);
+ upb_Arena_Free(arena);
+ }
+ state.SetBytesProcessed(state.iterations() * json.size());
+}
+BENCHMARK(BM_JsonParse_Upb);
+
+static void BM_JsonParse_Proto2(benchmark::State& state) {
+ protobuf::FileDescriptorProto proto;
+ absl::string_view input(descriptor.data, descriptor.size);
+ proto.ParseFromString(input);
+ std::string json;
+ ABSL_CHECK_OK(google::protobuf::json::MessageToJsonString(proto, &json));
+ for (auto _ : state) {
+ protobuf::FileDescriptorProto proto;
+ ABSL_CHECK_OK(google::protobuf::json::JsonStringToMessage(json, &proto));
+ }
+ state.SetBytesProcessed(state.iterations() * json.size());
+}
+BENCHMARK(BM_JsonParse_Proto2);
+
+static void BM_JsonSerialize_Upb(benchmark::State& state) {
+ upb_Arena* arena = upb_Arena_New();
+ upb_benchmark_FileDescriptorProto* set =
+ upb_benchmark_FileDescriptorProto_parse(descriptor.data, descriptor.size,
+ arena);
+ ABSL_CHECK(set != nullptr);
+
+ upb::DefPool defpool;
+ const upb_MessageDef* md =
+ upb_benchmark_FileDescriptorProto_getmsgdef(defpool.ptr());
+ auto json = UpbJsonEncode(set, md, arena);
+ std::string json_str;
+ json_str.resize(json.size());
+
+ for (auto _ : state) {
+ // This isn't a fully fair comparison, as it assumes we already know the
+ // correct size of the buffer. In practice, we usually need to run the
+ // encoder twice, once to discover the size of the buffer.
+ upb_JsonEncode(UPB_UPCAST(set), md, nullptr, 0, json_str.data(),
+ json_str.size(), nullptr);
+ }
+ state.SetBytesProcessed(state.iterations() * json.size());
+}
+BENCHMARK(BM_JsonSerialize_Upb);
+
+static void BM_JsonSerialize_Proto2(benchmark::State& state) {
+ protobuf::FileDescriptorProto proto;
+ absl::string_view input(descriptor.data, descriptor.size);
+ proto.ParseFromString(input);
+ std::string json;
+ for (auto _ : state) {
+ json.clear();
+ ABSL_CHECK_OK(google::protobuf::json::MessageToJsonString(proto, &json));
+ }
+ state.SetBytesProcessed(state.iterations() * json.size());
+}
+BENCHMARK(BM_JsonSerialize_Proto2);
diff --git a/benchmarks/empty.proto b/benchmarks/empty.proto
index 3c32ccc..5374941 100644
--- a/benchmarks/empty.proto
+++ b/benchmarks/empty.proto
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
syntax = "proto3";
diff --git a/ci/common.bazelrc b/ci/common.bazelrc
index 623a928..fd24b0a 100644
--- a/ci/common.bazelrc
+++ b/ci/common.bazelrc
@@ -5,7 +5,6 @@
build:san-common --config=dbg --strip=never --copt=-O0 --copt=-fno-omit-frame-pointer
build:asan --config=san-common --copt=-fsanitize=address --linkopt=-fsanitize=address
-build:asan --copt=-DADDRESS_SANITIZER=1
# ASAN hits ODR violations with shared linkage due to rules_proto.
build:asan --dynamic_mode=off
@@ -13,7 +12,6 @@
build:msan --copt=-fsanitize-memory-track-origins
build:msan --copt=-fsanitize-memory-use-after-dtor
build:msan --action_env=MSAN_OPTIONS=poison_in_dtor=1
-build:msan --copt=-DMEMORY_SANITIZER=1
# Use our instrumented LLVM libc++ in Kokoro.
build:docker-msan --config=msan
@@ -23,11 +21,9 @@
build:tsan --config=san-common --copt=-fsanitize=thread --linkopt=-fsanitize=thread
-build:tsan --copt=-DTHREAD_SANITIZER=1
build:ubsan --config=san-common --copt=-fsanitize=undefined --linkopt=-fsanitize=undefined
build:ubsan --action_env=UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1
-build:ubsan --copt=-DUNDEFINED_SANITIZER=1
# Workaround for the fact that Bazel links with $CC, not $CXX
# https://github.com/bazelbuild/bazel/issues/11122#issuecomment-613746748
build:ubsan --copt=-fno-sanitize=function --copt=-fno-sanitize=vptr
@@ -39,7 +35,6 @@
build --incompatible_check_sharding_support
build --incompatible_default_to_explicit_init_py
build --incompatible_disable_native_android_rules
-build --incompatible_disable_runtimes_filegroups
build --incompatible_disable_target_provider_fields
build --incompatible_disallow_empty_glob
build --incompatible_dont_use_javasourceinfoprovider
@@ -70,3 +65,7 @@
# --incompatible_disable_objc_library_transition
# --incompatible_fail_on_unknown_attributes
# --incompatible_merge_fixed_and_default_shell_env
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/protocolbuffers/protobuf/issues/14313
+common --noenable_bzlmod
\ No newline at end of file
diff --git a/cmake/abseil-cpp.cmake b/cmake/abseil-cpp.cmake
index b50fb89..a4e9d22 100644
--- a/cmake/abseil-cpp.cmake
+++ b/cmake/abseil-cpp.cmake
@@ -72,6 +72,7 @@
absl::flat_hash_set
absl::function_ref
absl::hash
+ absl::if_constexpr
absl::layout
absl::log_initialize
absl::log_severity
diff --git a/cmake/install.cmake b/cmake/install.cmake
index 998c2e3..9679d5b 100644
--- a/cmake/install.cmake
+++ b/cmake/install.cmake
@@ -78,7 +78,10 @@
elseif (_find_nosrc GREATER -1)
set(_from_dir "${protobuf_SOURCE_DIR}")
endif()
- string(REPLACE "${_from_dir}" "" _header ${_header})
+ # On some platforms `_form_dir` ends up being just "protobuf", which can
+ # easily match multiple times in our paths. We force it to only replace
+ # prefixes to avoid this case.
+ string(REGEX REPLACE "^${_from_dir}" "" _header ${_header})
get_filename_component(_extract_from "${_from_dir}/${_header}" ABSOLUTE)
get_filename_component(_extract_name ${_header} NAME)
get_filename_component(_extract_to "${CMAKE_INSTALL_INCLUDEDIR}/${_header}" DIRECTORY)
diff --git a/conformance/BUILD.bazel b/conformance/BUILD.bazel
index d0640dc..1d9ea15 100644
--- a/conformance/BUILD.bazel
+++ b/conformance/BUILD.bazel
@@ -2,7 +2,8 @@
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library", "objc_library")
load("@rules_ruby//ruby:defs.bzl", "ruby_binary")
-load("//:protobuf.bzl", "internal_csharp_proto_library", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library", "internal_ruby_proto_library")
+load("//ruby:defs.bzl", "internal_ruby_proto_library")
+load("//:protobuf.bzl", "internal_csharp_proto_library", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
load("//build_defs:internal_shell.bzl", "inline_sh_binary")
load(
"@rules_pkg//:mappings.bzl",
@@ -22,6 +23,7 @@
"failure_list_php_c.txt",
"failure_list_python.txt",
"failure_list_python_cpp.txt",
+ "failure_list_python_upb.txt",
"failure_list_ruby.txt",
"failure_list_jruby.txt",
"failure_list_jruby_ffi.txt",
@@ -33,6 +35,7 @@
"text_format_failure_list_php_c.txt",
"text_format_failure_list_python.txt",
"text_format_failure_list_python_cpp.txt",
+ "text_format_failure_list_python_upb.txt",
"text_format_failure_list_ruby.txt",
"text_format_failure_list_jruby.txt",
"text_format_failure_list_jruby_ffi.txt",
@@ -141,7 +144,6 @@
includes = ["."],
deps = [
":conformance_cc_proto",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf/util:differencer",
"//src/google/protobuf/util:json_util",
"//src/google/protobuf/util:type_resolver_util",
@@ -261,6 +263,7 @@
deps = [
":conformance_py_proto",
"//:protobuf_python",
+ "//python:_message", # Make upb visible if we need it.
"//python:conformance_test_py_proto",
],
)
@@ -325,6 +328,8 @@
":conformance_objc_proto",
"//:test_messages_proto2_objc_proto",
"//:test_messages_proto3_objc_proto",
+ "//src/google/protobuf/editions:test_messages_proto2_editions_objc_proto",
+ "//src/google/protobuf/editions:test_messages_proto3_editions_objc_proto",
],
)
@@ -344,8 +349,7 @@
visibility = ["//ruby:__subpackages__"],
deps = [
":conformance_ruby_proto",
- "//:test_messages_proto2_ruby_proto",
- "//:test_messages_proto3_ruby_proto",
+ "//ruby:conformance_test_ruby_proto",
],
)
diff --git a/conformance/binary_json_conformance_suite.cc b/conformance/binary_json_conformance_suite.cc
index 628afdc..4270dfe 100644
--- a/conformance/binary_json_conformance_suite.cc
+++ b/conformance/binary_json_conformance_suite.cc
@@ -453,17 +453,15 @@
const std::string& equivalent_text_format) {
MessageType prototype;
- ConformanceRequestSetting setting1(
+ ConformanceRequestSetting binary_to_binary(
level, conformance::PROTOBUF, conformance::PROTOBUF,
conformance::BINARY_TEST, prototype, test_name, input_protobuf);
- suite_.RunValidInputTest(setting1, equivalent_text_format);
+ suite_.RunValidInputTest(binary_to_binary, equivalent_text_format);
- if (run_proto3_tests_) {
- ConformanceRequestSetting setting2(
- level, conformance::PROTOBUF, conformance::JSON,
- conformance::BINARY_TEST, prototype, test_name, input_protobuf);
- suite_.RunValidInputTest(setting2, equivalent_text_format);
- }
+ ConformanceRequestSetting binary_to_json(
+ level, conformance::PROTOBUF, conformance::JSON, conformance::BINARY_TEST,
+ prototype, test_name, input_protobuf);
+ suite_.RunValidInputTest(binary_to_json, equivalent_text_format);
}
template <typename MessageType>
diff --git a/conformance/conformance_objc.m b/conformance/conformance_objc.m
index 5060ce9..8a37b72 100644
--- a/conformance/conformance_objc.m
+++ b/conformance/conformance_objc.m
@@ -10,6 +10,8 @@
#import "Conformance.pbobjc.h"
#import "google/protobuf/TestMessagesProto2.pbobjc.h"
#import "google/protobuf/TestMessagesProto3.pbobjc.h"
+#import "google/protobuf/editions/golden/TestMessagesProto2Editions.pbobjc.h"
+#import "google/protobuf/editions/golden/TestMessagesProto3Editions.pbobjc.h"
static void Die(NSString *format, ...) __dead2;
@@ -49,22 +51,25 @@
break;
case ConformanceRequest_Payload_OneOfCase_ProtobufPayload: {
- Class msgClass = nil;
- if ([request.messageType isEqual:@"protobuf_test_messages.proto3.TestAllTypesProto3"]) {
- msgClass = [Proto3TestAllTypesProto3 class];
- } else if ([request.messageType
- isEqual:@"protobuf_test_messages.proto2.TestAllTypesProto2"]) {
- msgClass = [Proto2TestAllTypesProto2 class];
+ NSDictionary *mappings = @{
+ @"protobuf_test_messages.proto2.TestAllTypesProto2" : [Proto2TestAllTypesProto2 class],
+ @"protobuf_test_messages.proto3.TestAllTypesProto3" : [Proto3TestAllTypesProto3 class],
+ @"protobuf_test_messages.editions.proto2.TestAllTypesProto2" :
+ [EditionsProto2TestAllTypesProto2 class],
+ @"protobuf_test_messages.editions.proto3.TestAllTypesProto3" :
+ [EditionsProto3TestAllTypesProto3 class],
+ };
+ Class msgClass = mappings[request.messageType];
+ if (msgClass) {
+ NSError *error = nil;
+ testMessage = [msgClass parseFromData:request.protobufPayload error:&error];
+ if (!testMessage) {
+ response.parseError = [NSString stringWithFormat:@"Parse error: %@", error];
+ }
} else {
response.runtimeError =
[NSString stringWithFormat:@"Protobuf request had an unknown message_type: %@",
request.messageType];
- break;
- }
- NSError *error = nil;
- testMessage = [msgClass parseFromData:request.protobufPayload error:&error];
- if (!testMessage) {
- response.parseError = [NSString stringWithFormat:@"Parse error: %@", error];
}
break;
}
diff --git a/conformance/conformance_rust.rs b/conformance/conformance_rust.rs
index db7df6a..f593e36 100644
--- a/conformance/conformance_rust.rs
+++ b/conformance/conformance_rust.rs
@@ -5,6 +5,7 @@
// https://developers.google.com/open-source/licenses/bsd
use conformance_proto::conformance::{ConformanceRequest, ConformanceResponse};
+use conformance_rust_overlay_hack_proto::conformance::ConformanceRequestRustOverlayHack;
#[cfg(cpp_kernel)]
use protobuf_cpp as kernel;
@@ -16,6 +17,9 @@
use std::io::{self, ErrorKind, Read, Write};
use test_messages_proto2::protobuf_test_messages::proto2::TestAllTypesProto2;
+use test_messages_proto2_editions_proto::protobuf_test_messages::editions::proto2::TestAllTypesProto2 as EditionsTestAllTypesProto2;
+use test_messages_proto3::protobuf_test_messages::proto3::TestAllTypesProto3;
+use test_messages_proto3_editions_proto::protobuf_test_messages::editions::proto3::TestAllTypesProto3 as EditionsTestAllTypesProto3;
/// Returns Some(i32) if a binary read can succeed from stdin.
/// Returns None if we have reached an EOF.
@@ -36,13 +40,21 @@
/// Returns None if we have hit an EOF that suggests the test suite is complete.
/// Panics in any other case (e.g. an EOF in a place that would imply a
/// programmer error in the conformance test suite).
-fn read_request_from_stdin() -> Option<ConformanceRequest> {
+fn read_request_from_stdin() -> Option<(ConformanceRequest, ConformanceRequestRustOverlayHack)> {
let msg_len = read_little_endian_i32_from_stdin()?;
let mut serialized = vec![0_u8; msg_len as usize];
io::stdin().read_exact(&mut serialized).unwrap();
let mut req = ConformanceRequest::new();
req.deserialize(&serialized).unwrap();
- Some(req)
+
+ // TODO: b/318373255 - Since enum accessors aren't available yet, we parse an
+ // overlay with int32 field instead of an enum so that we can check if the
+ // requested output is binary or not. This will be deleted once enum
+ // accessors are supported.
+ let mut req_overlay_hack = ConformanceRequestRustOverlayHack::new();
+ req_overlay_hack.deserialize(&serialized).unwrap();
+
+ Some((req, req_overlay_hack))
}
fn write_response_to_stdout(resp: &ConformanceResponse) {
@@ -54,21 +66,19 @@
handle.flush().unwrap();
}
-fn do_test(req: &ConformanceRequest) -> ConformanceResponse {
+fn do_test(
+ req: &ConformanceRequest,
+ req_overlay_hack: &ConformanceRequestRustOverlayHack,
+) -> ConformanceResponse {
let mut resp = ConformanceResponse::new();
let message_type = req.message_type();
- let is_proto2 = match message_type.as_bytes() {
- b"protobuf_test_messages.proto2.TestAllTypesProto2" => true,
- b"protobuf_test_messages.proto3.TestAllTypesProto3" => false,
- _ => panic!("unexpected msg type {message_type}"),
- };
- // Enums aren't supported yet (and not in scope for v0.6) so we can't perform
- // this check yet.
-
+ // TODO: b/318373255 - Use the enum once its supported.
// if req.requested_output_format() != WireFormat.PROTOBUF {
- // resp.skipped_mut().set("only wire format output implemented")
- // }
+ if req_overlay_hack.requested_output_format() != 1 {
+ resp.skipped_mut().set("only wire format output implemented");
+ return resp;
+ }
let bytes = match req.protobuf_payload_opt() {
Unset(_) => {
@@ -78,25 +88,50 @@
Set(bytes) => bytes,
};
- if is_proto2 {
- let mut proto = TestAllTypesProto2::new();
- if let Err(_) = proto.deserialize(bytes) {
- resp.parse_error_mut().set("failed to parse bytes");
- return resp;
+ let serialized = match message_type.as_bytes() {
+ b"protobuf_test_messages.proto2.TestAllTypesProto2" => {
+ let mut proto = TestAllTypesProto2::new();
+ if let Err(_) = proto.deserialize(bytes) {
+ resp.parse_error_mut().set("failed to parse bytes");
+ return resp;
+ }
+ proto.serialize()
}
- let serialized = proto.serialize(); // Note: serialize() is infallible in Rust api.
- resp.protobuf_payload_mut().set(serialized.as_ref());
- return resp;
- } else {
- resp.skipped_mut().set("only proto2 supported");
- return resp;
- }
+ b"protobuf_test_messages.proto3.TestAllTypesProto3" => {
+ let mut proto = TestAllTypesProto3::new();
+ if let Err(_) = proto.deserialize(bytes) {
+ resp.parse_error_mut().set("failed to parse bytes");
+ return resp;
+ }
+ proto.serialize()
+ }
+ b"protobuf_test_messages.editions.proto2.TestAllTypesProto2" => {
+ let mut proto = EditionsTestAllTypesProto2::new();
+ if let Err(_) = proto.deserialize(bytes) {
+ resp.parse_error_mut().set("failed to parse bytes");
+ return resp;
+ }
+ proto.serialize()
+ }
+ b"protobuf_test_messages.editions.proto3.TestAllTypesProto3" => {
+ let mut proto = EditionsTestAllTypesProto3::new();
+ if let Err(_) = proto.deserialize(bytes) {
+ resp.parse_error_mut().set("failed to parse bytes");
+ return resp;
+ }
+ proto.serialize()
+ }
+ _ => panic!("unexpected msg type {message_type}"),
+ };
+
+ resp.protobuf_payload_mut().set(serialized);
+ return resp;
}
fn main() {
let mut total_runs = 0;
- while let Some(req) = read_request_from_stdin() {
- let resp = do_test(&req);
+ while let Some((req, req_overlay_hack)) = read_request_from_stdin() {
+ let resp = do_test(&req, &req_overlay_hack);
write_response_to_stdout(&resp);
total_runs += 1;
}
diff --git a/conformance/conformance_rust_overlay_hack.proto b/conformance/conformance_rust_overlay_hack.proto
new file mode 100644
index 0000000..a897a16
--- /dev/null
+++ b/conformance/conformance_rust_overlay_hack.proto
@@ -0,0 +1,10 @@
+syntax = "proto3";
+
+package conformance;
+
+// Temporary hack to allow the Rust conformance test to read the requested
+// output format as an int32. This will be removed once enums accessors are
+// supported. b/318373255
+message ConformanceRequestRustOverlayHack {
+ int32 requested_output_format = 3;
+}
diff --git a/conformance/conformance_test.cc b/conformance/conformance_test.cc
index dbcaf45..ef049c8 100644
--- a/conformance/conformance_test.cc
+++ b/conformance/conformance_test.cc
@@ -24,7 +24,6 @@
#include "absl/strings/string_view.h"
#include "conformance/conformance.pb.h"
#include "conformance/conformance.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/message.h"
#include "google/protobuf/text_format.h"
@@ -143,13 +142,12 @@
std::string
ConformanceTestSuite::ConformanceRequestSetting::GetSyntaxIdentifier() const {
- switch (FileDescriptorLegacy(prototype_message_.GetDescriptor()->file())
- .syntax()) {
- case FileDescriptorLegacy::Syntax::SYNTAX_PROTO3:
+ switch (prototype_message_.GetDescriptor()->file()->edition()) {
+ case Edition::EDITION_PROTO3:
return "Proto3";
- case FileDescriptorLegacy::Syntax::SYNTAX_PROTO2:
+ case Edition::EDITION_PROTO2:
return "Proto2";
- case FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS: {
+ default: {
std::string id = "Editions";
if (prototype_message_.GetDescriptor()->name() == "TestAllTypesProto2") {
absl::StrAppend(&id, "_Proto2");
@@ -159,8 +157,6 @@
}
return id;
}
- default:
- return "Unknown";
}
}
diff --git a/conformance/failure_list_jruby_ffi.txt b/conformance/failure_list_jruby_ffi.txt
index 6a487cb..e69de29 100644
--- a/conformance/failure_list_jruby_ffi.txt
+++ b/conformance/failure_list_jruby_ffi.txt
@@ -1,2 +0,0 @@
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
\ No newline at end of file
diff --git a/conformance/failure_list_php_c.txt b/conformance/failure_list_php_c.txt
index 2844486..63c7e8a 100644
--- a/conformance/failure_list_php_c.txt
+++ b/conformance/failure_list_php_c.txt
@@ -1,4 +1,2 @@
Recommended.Proto2.JsonInput.FieldNameExtension.Validator
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
Required.Proto2.JsonInput.StoresDefaultPrimitive.Validator
diff --git a/conformance/failure_list_python_upb.txt b/conformance/failure_list_python_upb.txt
new file mode 100644
index 0000000..b278006
--- /dev/null
+++ b/conformance/failure_list_python_upb.txt
@@ -0,0 +1,6 @@
+Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
+Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInOptionalField.ProtobufOutput
+Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
+Recommended.Editions_Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
+Recommended.Editions_Proto3.JsonInput.IgnoreUnknownEnumStringValueInOptionalField.ProtobufOutput
+Recommended.Editions_Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
diff --git a/conformance/failure_list_ruby.txt b/conformance/failure_list_ruby.txt
index 2fb4dc8..e69de29 100644
--- a/conformance/failure_list_ruby.txt
+++ b/conformance/failure_list_ruby.txt
@@ -1,2 +0,0 @@
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
diff --git a/conformance/text_format_failure_list_python_upb.txt b/conformance/text_format_failure_list_python_upb.txt
new file mode 100644
index 0000000..377998b
--- /dev/null
+++ b/conformance/text_format_failure_list_python_upb.txt
@@ -0,0 +1,11 @@
+# This is the list of text format conformance tests that are known to fail right
+# now.
+# TODO: These should be fixed.
+Required.Proto3.TextFormatInput.StringLiteralBasicEscapesBytes.ProtobufOutput
+Required.Proto3.TextFormatInput.StringLiteralBasicEscapesBytes.TextFormatOutput
+Required.Proto3.TextFormatInput.StringLiteralBasicEscapesString.ProtobufOutput
+Required.Proto3.TextFormatInput.StringLiteralBasicEscapesString.TextFormatOutput
+Required.Editions_Proto3.TextFormatInput.StringLiteralBasicEscapesBytes.ProtobufOutput
+Required.Editions_Proto3.TextFormatInput.StringLiteralBasicEscapesBytes.TextFormatOutput
+Required.Editions_Proto3.TextFormatInput.StringLiteralBasicEscapesString.ProtobufOutput
+Required.Editions_Proto3.TextFormatInput.StringLiteralBasicEscapesString.TextFormatOutput
diff --git a/csharp/src/Google.Protobuf.Test/JsonParserTest.cs b/csharp/src/Google.Protobuf.Test/JsonParserTest.cs
index 5c4b42c..4d1cbef 100644
--- a/csharp/src/Google.Protobuf.Test/JsonParserTest.cs
+++ b/csharp/src/Google.Protobuf.Test/JsonParserTest.cs
@@ -1,4 +1,4 @@
-#region Copyright notice and license
+#region Copyright notice and license
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
//
@@ -471,11 +471,11 @@
// Assume that anything non-bounds-related is covered in the Int32 case
[Test]
- [TestCase("9223372036854775808")]
- // Theoretical bound would be -9223372036854775809, but when that is parsed to a double
- // we end up with the exact value of long.MinValue due to lack of precision. The value here
- // is the "next double down".
- [TestCase("-9223372036854780000")]
+ // Runtime implementation differences produce different results for values just outside
+ // (long.MinValue, long.MaxValue) which cannot be exactly represented as a double. Use the
+ // next values exactly representable as doubles to ensure consistency.
+ [TestCase("9223372036854777856")]
+ [TestCase("-9223372036854777856")]
public void NumberToInt64_Invalid(string jsonValue)
{
string json = "{ \"singleInt64\": " + jsonValue + "}";
@@ -498,7 +498,10 @@
// Assume that anything non-bounds-related is covered in the Int32 case
[Test]
[TestCase("-1")]
- [TestCase("18446744073709551616")]
+ // Runtime implementation differences produce different results for values just beyond
+ // ulong.MaxValue which cannot be exactly represented as a double. Use the next value
+ // exactly representable as a double to ensure consistency.
+ [TestCase("18446744073709555712")]
public void NumberToUInt64_Invalid(string jsonValue)
{
string json = "{ \"singleUint64\": " + jsonValue + "}";
diff --git a/csharp/src/Google.Protobuf.Test/testprotos.pb b/csharp/src/Google.Protobuf.Test/testprotos.pb
index 9527755..9b7e77f 100644
--- a/csharp/src/Google.Protobuf.Test/testprotos.pb
+++ b/csharp/src/Google.Protobuf.Test/testprotos.pb
Binary files differ
diff --git a/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs b/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs
index 82c9f82..cfa51a0 100644
--- a/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs
+++ b/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs
@@ -33,24 +33,25 @@
"LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8SRQoXc291cmNlX2ZpbGVf",
"ZGVzY3JpcHRvcnMYESADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2Ny",
"aXB0b3JQcm90bxI7ChBjb21waWxlcl92ZXJzaW9uGAMgASgLMiEuZ29vZ2xl",
- "LnByb3RvYnVmLmNvbXBpbGVyLlZlcnNpb24i4AIKFUNvZGVHZW5lcmF0b3JS",
+ "LnByb3RvYnVmLmNvbXBpbGVyLlZlcnNpb24ikgMKFUNvZGVHZW5lcmF0b3JS",
"ZXNwb25zZRINCgVlcnJvchgBIAEoCRIaChJzdXBwb3J0ZWRfZmVhdHVyZXMY",
- "AiABKAQSQgoEZmlsZRgPIAMoCzI0Lmdvb2dsZS5wcm90b2J1Zi5jb21waWxl",
- "ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZRp/CgRGaWxlEgwKBG5hbWUY",
- "ASABKAkSFwoPaW5zZXJ0aW9uX3BvaW50GAIgASgJEg8KB2NvbnRlbnQYDyAB",
- "KAkSPwoTZ2VuZXJhdGVkX2NvZGVfaW5mbxgQIAEoCzIiLmdvb2dsZS5wcm90",
- "b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbyJXCgdGZWF0dXJlEhAKDEZFQVRVUkVf",
- "Tk9ORRAAEhsKF0ZFQVRVUkVfUFJPVE8zX09QVElPTkFMEAESHQoZRkVBVFVS",
- "RV9TVVBQT1JUU19FRElUSU9OUxACQnIKHGNvbS5nb29nbGUucHJvdG9idWYu",
- "Y29tcGlsZXJCDFBsdWdpblByb3Rvc1opZ29vZ2xlLmdvbGFuZy5vcmcvcHJv",
- "dG9idWYvdHlwZXMvcGx1Z2lucGKqAhhHb29nbGUuUHJvdG9idWYuQ29tcGls",
- "ZXI="));
+ "AiABKAQSFwoPbWluaW11bV9lZGl0aW9uGAMgASgFEhcKD21heGltdW1fZWRp",
+ "dGlvbhgEIAEoBRJCCgRmaWxlGA8gAygLMjQuZ29vZ2xlLnByb3RvYnVmLmNv",
+ "bXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlGn8KBEZpbGUSDAoE",
+ "bmFtZRgBIAEoCRIXCg9pbnNlcnRpb25fcG9pbnQYAiABKAkSDwoHY29udGVu",
+ "dBgPIAEoCRI/ChNnZW5lcmF0ZWRfY29kZV9pbmZvGBAgASgLMiIuZ29vZ2xl",
+ "LnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvIlcKB0ZlYXR1cmUSEAoMRkVB",
+ "VFVSRV9OT05FEAASGwoXRkVBVFVSRV9QUk9UTzNfT1BUSU9OQUwQARIdChlG",
+ "RUFUVVJFX1NVUFBPUlRTX0VESVRJT05TEAJCcgocY29tLmdvb2dsZS5wcm90",
+ "b2J1Zi5jb21waWxlckIMUGx1Z2luUHJvdG9zWilnb29nbGUuZ29sYW5nLm9y",
+ "Zy9wcm90b2J1Zi90eXBlcy9wbHVnaW5wYqoCGEdvb2dsZS5Qcm90b2J1Zi5D",
+ "b21waWxlcg=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.Reflection.DescriptorReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.Version), global::Google.Protobuf.Compiler.Version.Parser, new[]{ "Major", "Minor", "Patch", "Suffix" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorRequest), global::Google.Protobuf.Compiler.CodeGeneratorRequest.Parser, new[]{ "FileToGenerate", "Parameter", "ProtoFile", "SourceFileDescriptors", "CompilerVersion" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse), global::Google.Protobuf.Compiler.CodeGeneratorResponse.Parser, new[]{ "Error", "SupportedFeatures", "File" }, null, new[]{ typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.Feature) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File), global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File.Parser, new[]{ "Name", "InsertionPoint", "Content", "GeneratedCodeInfo" }, null, null, null, null)})
+ new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse), global::Google.Protobuf.Compiler.CodeGeneratorResponse.Parser, new[]{ "Error", "SupportedFeatures", "MinimumEdition", "MaximumEdition", "File" }, null, new[]{ typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.Feature) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File), global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File.Parser, new[]{ "Name", "InsertionPoint", "Content", "GeneratedCodeInfo" }, null, null, null, null)})
}));
}
#endregion
@@ -836,6 +837,8 @@
_hasBits0 = other._hasBits0;
error_ = other.error_;
supportedFeatures_ = other.supportedFeatures_;
+ minimumEdition_ = other.minimumEdition_;
+ maximumEdition_ = other.maximumEdition_;
file_ = other.file_.Clone();
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -913,6 +916,72 @@
_hasBits0 &= ~1;
}
+ /// <summary>Field number for the "minimum_edition" field.</summary>
+ public const int MinimumEditionFieldNumber = 3;
+ private readonly static int MinimumEditionDefaultValue = 0;
+
+ private int minimumEdition_;
+ /// <summary>
+ /// The minimum edition this plugin supports. This will be treated as an
+ /// Edition enum, but we want to allow unknown values. It should be specified
+ /// according the edition enum value, *not* the edition number. Only takes
+ /// effect for plugins that have FEATURE_SUPPORTS_EDITIONS set.
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int MinimumEdition {
+ get { if ((_hasBits0 & 2) != 0) { return minimumEdition_; } else { return MinimumEditionDefaultValue; } }
+ set {
+ _hasBits0 |= 2;
+ minimumEdition_ = value;
+ }
+ }
+ /// <summary>Gets whether the "minimum_edition" field is set</summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasMinimumEdition {
+ get { return (_hasBits0 & 2) != 0; }
+ }
+ /// <summary>Clears the value of the "minimum_edition" field</summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearMinimumEdition() {
+ _hasBits0 &= ~2;
+ }
+
+ /// <summary>Field number for the "maximum_edition" field.</summary>
+ public const int MaximumEditionFieldNumber = 4;
+ private readonly static int MaximumEditionDefaultValue = 0;
+
+ private int maximumEdition_;
+ /// <summary>
+ /// The maximum edition this plugin supports. This will be treated as an
+ /// Edition enum, but we want to allow unknown values. It should be specified
+ /// according the edition enum value, *not* the edition number. Only takes
+ /// effect for plugins that have FEATURE_SUPPORTS_EDITIONS set.
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int MaximumEdition {
+ get { if ((_hasBits0 & 4) != 0) { return maximumEdition_; } else { return MaximumEditionDefaultValue; } }
+ set {
+ _hasBits0 |= 4;
+ maximumEdition_ = value;
+ }
+ }
+ /// <summary>Gets whether the "maximum_edition" field is set</summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasMaximumEdition {
+ get { return (_hasBits0 & 4) != 0; }
+ }
+ /// <summary>Clears the value of the "maximum_edition" field</summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearMaximumEdition() {
+ _hasBits0 &= ~4;
+ }
+
/// <summary>Field number for the "file" field.</summary>
public const int FileFieldNumber = 15;
private static readonly pb::FieldCodec<global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File> _repeated_file_codec
@@ -941,6 +1010,8 @@
}
if (Error != other.Error) return false;
if (SupportedFeatures != other.SupportedFeatures) return false;
+ if (MinimumEdition != other.MinimumEdition) return false;
+ if (MaximumEdition != other.MaximumEdition) return false;
if(!file_.Equals(other.file_)) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -951,6 +1022,8 @@
int hash = 1;
if (HasError) hash ^= Error.GetHashCode();
if (HasSupportedFeatures) hash ^= SupportedFeatures.GetHashCode();
+ if (HasMinimumEdition) hash ^= MinimumEdition.GetHashCode();
+ if (HasMaximumEdition) hash ^= MaximumEdition.GetHashCode();
hash ^= file_.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
@@ -978,6 +1051,14 @@
output.WriteRawTag(16);
output.WriteUInt64(SupportedFeatures);
}
+ if (HasMinimumEdition) {
+ output.WriteRawTag(24);
+ output.WriteInt32(MinimumEdition);
+ }
+ if (HasMaximumEdition) {
+ output.WriteRawTag(32);
+ output.WriteInt32(MaximumEdition);
+ }
file_.WriteTo(output, _repeated_file_codec);
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
@@ -997,6 +1078,14 @@
output.WriteRawTag(16);
output.WriteUInt64(SupportedFeatures);
}
+ if (HasMinimumEdition) {
+ output.WriteRawTag(24);
+ output.WriteInt32(MinimumEdition);
+ }
+ if (HasMaximumEdition) {
+ output.WriteRawTag(32);
+ output.WriteInt32(MaximumEdition);
+ }
file_.WriteTo(ref output, _repeated_file_codec);
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
@@ -1014,6 +1103,12 @@
if (HasSupportedFeatures) {
size += 1 + pb::CodedOutputStream.ComputeUInt64Size(SupportedFeatures);
}
+ if (HasMinimumEdition) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(MinimumEdition);
+ }
+ if (HasMaximumEdition) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(MaximumEdition);
+ }
size += file_.CalculateSize(_repeated_file_codec);
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
@@ -1033,6 +1128,12 @@
if (other.HasSupportedFeatures) {
SupportedFeatures = other.SupportedFeatures;
}
+ if (other.HasMinimumEdition) {
+ MinimumEdition = other.MinimumEdition;
+ }
+ if (other.HasMaximumEdition) {
+ MaximumEdition = other.MaximumEdition;
+ }
file_.Add(other.file_);
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -1057,6 +1158,14 @@
SupportedFeatures = input.ReadUInt64();
break;
}
+ case 24: {
+ MinimumEdition = input.ReadInt32();
+ break;
+ }
+ case 32: {
+ MaximumEdition = input.ReadInt32();
+ break;
+ }
case 122: {
file_.AddEntriesFrom(input, _repeated_file_codec);
break;
@@ -1084,6 +1193,14 @@
SupportedFeatures = input.ReadUInt64();
break;
}
+ case 24: {
+ MinimumEdition = input.ReadInt32();
+ break;
+ }
+ case 32: {
+ MaximumEdition = input.ReadInt32();
+ break;
+ }
case 122: {
file_.AddEntriesFrom(ref input, _repeated_file_codec);
break;
diff --git a/csharp/src/Google.Protobuf/Google.Protobuf.csproj b/csharp/src/Google.Protobuf/Google.Protobuf.csproj
index b5731cd..88a9874 100644
--- a/csharp/src/Google.Protobuf/Google.Protobuf.csproj
+++ b/csharp/src/Google.Protobuf/Google.Protobuf.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
<!-- If you update this, update the .csproj in the Docker file as well -->
<PropertyGroup>
@@ -23,6 +23,9 @@
<!-- Include PDB in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<IsTrimmable>true</IsTrimmable>
+ <!-- Disable warnings about AOT and trimming features on older targets, e.g. netstandard2.0.
+ For now, continue to apply these features to these targets because some packages don't have a target that supports them -->
+ <NoWarn>$(NoWarn);NETSDK1195;NETSDK1210</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
diff --git a/csharp/src/Google.Protobuf/JsonFormatter.cs b/csharp/src/Google.Protobuf/JsonFormatter.cs
index 48d3ab4..ff2f09b 100644
--- a/csharp/src/Google.Protobuf/JsonFormatter.cs
+++ b/csharp/src/Google.Protobuf/JsonFormatter.cs
@@ -20,979 +20,897 @@
using Google.Protobuf.Reflection;
using Google.Protobuf.WellKnownTypes;
-namespace Google.Protobuf
-{
+namespace Google.Protobuf {
+ /// <summary>
+ /// Reflection-based converter from messages to JSON.
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Instances of this class are thread-safe, with no mutable state.
+ /// </para>
+ /// <para>
+ /// This is a simple start to get JSON formatting working. As it's reflection-based,
+ /// it's not as quick as baking calls into generated messages - but is a simpler implementation.
+ /// (This code is generally not heavily optimized.)
+ /// </para>
+ /// </remarks>
+ public sealed class JsonFormatter {
+ internal const string AnyTypeUrlField = "@type";
+ internal const string AnyDiagnosticValueField = "@value";
+ internal const string AnyWellKnownTypeValueField = "value";
+ private const string NameValueSeparator = ": ";
+ private const string ValueSeparator = ", ";
+ private const string MultilineValueSeparator = ",";
+ private const char ObjectOpenBracket = '{';
+ private const char ObjectCloseBracket = '}';
+ private const char ListBracketOpen = '[';
+ private const char ListBracketClose = ']';
+
/// <summary>
- /// Reflection-based converter from messages to JSON.
+ /// Returns a formatter using the default settings.
+ /// </summary>
+ public static JsonFormatter Default { get; } = new JsonFormatter(Settings.Default);
+
+ // A JSON formatter which *only* exists
+ private static readonly JsonFormatter diagnosticFormatter = new JsonFormatter(Settings.Default);
+
+ /// <summary>
+ /// The JSON representation of the first 160 characters of Unicode.
+ /// Empty strings are replaced by the static constructor.
+ /// </summary>
+ private static readonly string[] CommonRepresentations = {
+ // C0 (ASCII and derivatives) control characters
+ "\\u0000", "\\u0001", "\\u0002", "\\u0003", // 0x00
+ "\\u0004", "\\u0005", "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\u000b", "\\f", "\\r",
+ "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013", // 0x10
+ "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019", "\\u001a", "\\u001b",
+ "\\u001c", "\\u001d", "\\u001e", "\\u001f",
+ // Escaping of " and \ are required by www.json.org string definition.
+ // Escaping of < and > are required for HTML security.
+ "", "", "\\\"", "", "", "", "", "", // 0x20
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", // 0x30
+ "", "", "", "", "\\u003c", "", "\\u003e", "", "", "", "", "", "", "", "", "", // 0x40
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", // 0x50
+ "", "", "", "", "\\\\", "", "", "", "", "", "", "", "", "", "", "", // 0x60
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", // 0x70
+ "", "", "", "", "", "", "", "\\u007f",
+ // C1 (ISO 8859 and Unicode) extended control characters
+ "\\u0080", "\\u0081", "\\u0082", "\\u0083", // 0x80
+ "\\u0084", "\\u0085", "\\u0086", "\\u0087", "\\u0088", "\\u0089", "\\u008a", "\\u008b",
+ "\\u008c", "\\u008d", "\\u008e", "\\u008f", "\\u0090", "\\u0091", "\\u0092",
+ "\\u0093", // 0x90
+ "\\u0094", "\\u0095", "\\u0096", "\\u0097", "\\u0098", "\\u0099", "\\u009a", "\\u009b",
+ "\\u009c", "\\u009d", "\\u009e", "\\u009f"
+ };
+
+ static JsonFormatter() {
+ for (int i = 0; i < CommonRepresentations.Length; i++) {
+ if (CommonRepresentations[i] == "") {
+ CommonRepresentations[i] = ((char)i).ToString();
+ }
+ }
+ }
+
+ private readonly Settings settings;
+
+ private bool DiagnosticOnly => ReferenceEquals(this, diagnosticFormatter);
+
+ /// <summary>
+ /// Creates a new formatted with the given settings.
+ /// </summary>
+ /// <param name="settings">The settings.</param>
+ public JsonFormatter(Settings settings) {
+ this.settings = ProtoPreconditions.CheckNotNull(settings, nameof(settings));
+ }
+
+ /// <summary>
+ /// Formats the specified message as JSON.
+ /// </summary>
+ /// <param name="message">The message to format.</param>
+ /// <remarks>This method delegates to <c>Format(IMessage, int)</c> with <c>indentationLevel =
+ /// 0</c>.</remarks> <returns>The formatted message.</returns>
+ public string Format(IMessage message) => Format(message, indentationLevel: 0);
+
+ /// <summary>
+ /// Formats the specified message as JSON.
+ /// </summary>
+ /// <param name="message">The message to format.</param>
+ /// <param name="indentationLevel">Indentation level to start at.</param>
+ /// <remarks>To keep consistent indentation when embedding a message inside another JSON string,
+ /// set <paramref name="indentationLevel"/>. E.g: <code> var response = $@"{{
+ /// ""data"": { Format(message, indentationLevel: 1) }
+ /// }}"</code>
+ /// </remarks>
+ /// <returns>The formatted message.</returns>
+ public string Format(IMessage message, int indentationLevel) {
+ var writer = new StringWriter();
+ Format(message, writer, indentationLevel);
+ return writer.ToString();
+ }
+
+ /// <summary>
+ /// Formats the specified message as JSON.
+ /// </summary>
+ /// <param name="message">The message to format.</param>
+ /// <param name="writer">The TextWriter to write the formatted message to.</param>
+ /// <remarks>This method delegates to <c>Format(IMessage, TextWriter, int)</c> with
+ /// <c>indentationLevel = 0</c>.</remarks> <returns>The formatted message.</returns>
+ public void Format(IMessage message, TextWriter writer) => Format(message, writer,
+ indentationLevel: 0);
+
+ /// <summary>
+ /// Formats the specified message as JSON. When <see cref="Settings.Indentation"/> is not null,
+ /// start indenting at the specified <paramref name="indentationLevel"/>.
+ /// </summary>
+ /// <param name="message">The message to format.</param>
+ /// <param name="writer">The TextWriter to write the formatted message to.</param>
+ /// <param name="indentationLevel">Indentation level to start at.</param>
+ /// <remarks>To keep consistent indentation when embedding a message inside another JSON string,
+ /// set <paramref name="indentationLevel"/>.</remarks>
+ public void Format(IMessage message, TextWriter writer, int indentationLevel) {
+ ProtoPreconditions.CheckNotNull(message, nameof(message));
+ ProtoPreconditions.CheckNotNull(writer, nameof(writer));
+
+ if (message.Descriptor.IsWellKnownType) {
+ WriteWellKnownTypeValue(writer, message.Descriptor, message, indentationLevel);
+ } else {
+ WriteMessage(writer, message, indentationLevel);
+ }
+ }
+
+ /// <summary>
+ /// Converts a message to JSON for diagnostic purposes with no extra context.
/// </summary>
/// <remarks>
/// <para>
- /// Instances of this class are thread-safe, with no mutable state.
+ /// This differs from calling <see cref="Format(IMessage)"/> on the default JSON
+ /// formatter in its handling of <see cref="Any"/>. As no type registry is available
+ /// in <see cref="object.ToString"/> calls, the normal way of resolving the type of
+ /// an <c>Any</c> message cannot be applied. Instead, a JSON property named <c>@value</c>
+ /// is included with the base64 data from the <see cref="Any.Value"/> property of the message.
/// </para>
- /// <para>
- /// This is a simple start to get JSON formatting working. As it's reflection-based,
- /// it's not as quick as baking calls into generated messages - but is a simpler implementation.
- /// (This code is generally not heavily optimized.)
- /// </para>
+ /// <para>The value returned by this method is only designed to be used for diagnostic
+ /// purposes. It may not be parsable by <see cref="JsonParser"/>, and may not be parsable
+ /// by other Protocol Buffer implementations.</para>
/// </remarks>
- public sealed class JsonFormatter
- {
- internal const string AnyTypeUrlField = "@type";
- internal const string AnyDiagnosticValueField = "@value";
- internal const string AnyWellKnownTypeValueField = "value";
- private const string NameValueSeparator = ": ";
- private const string ValueSeparator = ", ";
- private const string MultilineValueSeparator = ",";
- private const char ObjectOpenBracket = '{';
- private const char ObjectCloseBracket = '}';
- private const char ListBracketOpen = '[';
- private const char ListBracketClose = ']';
+ /// <param name="message">The message to format for diagnostic purposes.</param>
+ /// <returns>The diagnostic-only JSON representation of the message</returns>
+ public static string ToDiagnosticString(IMessage message) {
+ ProtoPreconditions.CheckNotNull(message, nameof(message));
+ return diagnosticFormatter.Format(message);
+ }
- /// <summary>
- /// Returns a formatter using the default settings.
- /// </summary>
- public static JsonFormatter Default { get; } = new JsonFormatter(Settings.Default);
+ private void WriteMessage(TextWriter writer, IMessage message, int indentationLevel) {
+ if (message == null) {
+ WriteNull(writer);
+ return;
+ }
+ if (DiagnosticOnly) {
+ if (message is ICustomDiagnosticMessage customDiagnosticMessage) {
+ writer.Write(customDiagnosticMessage.ToDiagnosticString());
+ return;
+ }
+ }
- // A JSON formatter which *only* exists
- private static readonly JsonFormatter diagnosticFormatter = new JsonFormatter(Settings.Default);
+ WriteBracketOpen(writer, ObjectOpenBracket);
+ bool writtenFields = WriteMessageFields(writer, message, false, indentationLevel + 1);
+ WriteBracketClose(writer, ObjectCloseBracket, writtenFields, indentationLevel);
+ }
- /// <summary>
- /// The JSON representation of the first 160 characters of Unicode.
- /// Empty strings are replaced by the static constructor.
- /// </summary>
- private static readonly string[] CommonRepresentations = {
- // C0 (ASCII and derivatives) control characters
- "\\u0000", "\\u0001", "\\u0002", "\\u0003", // 0x00
- "\\u0004", "\\u0005", "\\u0006", "\\u0007",
- "\\b", "\\t", "\\n", "\\u000b",
- "\\f", "\\r", "\\u000e", "\\u000f",
- "\\u0010", "\\u0011", "\\u0012", "\\u0013", // 0x10
- "\\u0014", "\\u0015", "\\u0016", "\\u0017",
- "\\u0018", "\\u0019", "\\u001a", "\\u001b",
- "\\u001c", "\\u001d", "\\u001e", "\\u001f",
- // Escaping of " and \ are required by www.json.org string definition.
- // Escaping of < and > are required for HTML security.
- "", "", "\\\"", "", "", "", "", "", // 0x20
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", // 0x30
- "", "", "", "", "\\u003c", "", "\\u003e", "",
- "", "", "", "", "", "", "", "", // 0x40
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", // 0x50
- "", "", "", "", "\\\\", "", "", "",
- "", "", "", "", "", "", "", "", // 0x60
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", // 0x70
- "", "", "", "", "", "", "", "\\u007f",
- // C1 (ISO 8859 and Unicode) extended control characters
- "\\u0080", "\\u0081", "\\u0082", "\\u0083", // 0x80
- "\\u0084", "\\u0085", "\\u0086", "\\u0087",
- "\\u0088", "\\u0089", "\\u008a", "\\u008b",
- "\\u008c", "\\u008d", "\\u008e", "\\u008f",
- "\\u0090", "\\u0091", "\\u0092", "\\u0093", // 0x90
- "\\u0094", "\\u0095", "\\u0096", "\\u0097",
- "\\u0098", "\\u0099", "\\u009a", "\\u009b",
- "\\u009c", "\\u009d", "\\u009e", "\\u009f"
- };
-
- static JsonFormatter()
- {
- for (int i = 0; i < CommonRepresentations.Length; i++)
- {
- if (CommonRepresentations[i] == "")
- {
- CommonRepresentations[i] = ((char) i).ToString();
- }
- }
+ private bool WriteMessageFields(TextWriter writer, IMessage message,
+ bool assumeFirstFieldWritten, int indentationLevel) {
+ var fields = message.Descriptor.Fields;
+ bool first = !assumeFirstFieldWritten;
+ // First non-oneof fields
+ foreach (var field in fields.InFieldNumberOrder()) {
+ var accessor = field.Accessor;
+ var value = accessor.GetValue(message);
+ if (!ShouldFormatFieldValue(message, field, value)) {
+ continue;
}
- private readonly Settings settings;
+ MaybeWriteValueSeparator(writer, first);
+ MaybeWriteValueWhitespace(writer, indentationLevel);
- private bool DiagnosticOnly => ReferenceEquals(this, diagnosticFormatter);
-
- /// <summary>
- /// Creates a new formatted with the given settings.
- /// </summary>
- /// <param name="settings">The settings.</param>
- public JsonFormatter(Settings settings)
- {
- this.settings = ProtoPreconditions.CheckNotNull(settings, nameof(settings));
+ if (settings.PreserveProtoFieldNames) {
+ WriteString(writer, accessor.Descriptor.Name);
+ } else {
+ WriteString(writer, accessor.Descriptor.JsonName);
}
+ writer.Write(NameValueSeparator);
+ WriteValue(writer, value, indentationLevel);
- /// <summary>
- /// Formats the specified message as JSON.
- /// </summary>
- /// <param name="message">The message to format.</param>
- /// <remarks>This method delegates to <c>Format(IMessage, int)</c> with <c>indentationLevel = 0</c>.</remarks>
- /// <returns>The formatted message.</returns>
- public string Format(IMessage message) => Format(message, indentationLevel: 0);
+ first = false;
+ }
+ return !first;
+ }
- /// <summary>
- /// Formats the specified message as JSON.
- /// </summary>
- /// <param name="message">The message to format.</param>
- /// <param name="indentationLevel">Indentation level to start at.</param>
- /// <remarks>To keep consistent indentation when embedding a message inside another JSON string, set <paramref name="indentationLevel"/>. E.g:
- /// <code>
- /// var response = $@"{{
- /// ""data"": { Format(message, indentationLevel: 1) }
- /// }}"</code>
- /// </remarks>
- /// <returns>The formatted message.</returns>
- public string Format(IMessage message, int indentationLevel)
- {
- var writer = new StringWriter();
- Format(message, writer, indentationLevel);
- return writer.ToString();
- }
+ private void MaybeWriteValueSeparator(TextWriter writer, bool first) {
+ if (first) {
+ return;
+ }
- /// <summary>
- /// Formats the specified message as JSON.
- /// </summary>
- /// <param name="message">The message to format.</param>
- /// <param name="writer">The TextWriter to write the formatted message to.</param>
- /// <remarks>This method delegates to <c>Format(IMessage, TextWriter, int)</c> with <c>indentationLevel = 0</c>.</remarks>
- /// <returns>The formatted message.</returns>
- public void Format(IMessage message, TextWriter writer) => Format(message, writer, indentationLevel: 0);
+ writer.Write(settings.Indentation == null ? ValueSeparator : MultilineValueSeparator);
+ }
- /// <summary>
- /// Formats the specified message as JSON. When <see cref="Settings.Indentation"/> is not null, start indenting at the specified <paramref name="indentationLevel"/>.
- /// </summary>
- /// <param name="message">The message to format.</param>
- /// <param name="writer">The TextWriter to write the formatted message to.</param>
- /// <param name="indentationLevel">Indentation level to start at.</param>
- /// <remarks>To keep consistent indentation when embedding a message inside another JSON string, set <paramref name="indentationLevel"/>.</remarks>
- public void Format(IMessage message, TextWriter writer, int indentationLevel)
- {
- ProtoPreconditions.CheckNotNull(message, nameof(message));
- ProtoPreconditions.CheckNotNull(writer, nameof(writer));
-
- if (message.Descriptor.IsWellKnownType)
- {
- WriteWellKnownTypeValue(writer, message.Descriptor, message, indentationLevel);
- }
- else
- {
- WriteMessage(writer, message, indentationLevel);
- }
- }
-
- /// <summary>
- /// Converts a message to JSON for diagnostic purposes with no extra context.
- /// </summary>
- /// <remarks>
- /// <para>
- /// This differs from calling <see cref="Format(IMessage)"/> on the default JSON
- /// formatter in its handling of <see cref="Any"/>. As no type registry is available
- /// in <see cref="object.ToString"/> calls, the normal way of resolving the type of
- /// an <c>Any</c> message cannot be applied. Instead, a JSON property named <c>@value</c>
- /// is included with the base64 data from the <see cref="Any.Value"/> property of the message.
- /// </para>
- /// <para>The value returned by this method is only designed to be used for diagnostic
- /// purposes. It may not be parsable by <see cref="JsonParser"/>, and may not be parsable
- /// by other Protocol Buffer implementations.</para>
- /// </remarks>
- /// <param name="message">The message to format for diagnostic purposes.</param>
- /// <returns>The diagnostic-only JSON representation of the message</returns>
- public static string ToDiagnosticString(IMessage message)
- {
- ProtoPreconditions.CheckNotNull(message, nameof(message));
- return diagnosticFormatter.Format(message);
- }
-
- private void WriteMessage(TextWriter writer, IMessage message, int indentationLevel)
- {
- if (message == null)
- {
- WriteNull(writer);
- return;
- }
- if (DiagnosticOnly)
- {
- if (message is ICustomDiagnosticMessage customDiagnosticMessage)
- {
- writer.Write(customDiagnosticMessage.ToDiagnosticString());
- return;
- }
- }
-
- WriteBracketOpen(writer, ObjectOpenBracket);
- bool writtenFields = WriteMessageFields(writer, message, false, indentationLevel + 1);
- WriteBracketClose(writer, ObjectCloseBracket, writtenFields, indentationLevel);
- }
-
- private bool WriteMessageFields(TextWriter writer, IMessage message, bool assumeFirstFieldWritten, int indentationLevel)
- {
- var fields = message.Descriptor.Fields;
- bool first = !assumeFirstFieldWritten;
- // First non-oneof fields
- foreach (var field in fields.InFieldNumberOrder())
- {
- var accessor = field.Accessor;
- var value = accessor.GetValue(message);
- if (!ShouldFormatFieldValue(message, field, value))
- {
- continue;
- }
-
- MaybeWriteValueSeparator(writer, first);
- MaybeWriteValueWhitespace(writer, indentationLevel);
-
- if (settings.PreserveProtoFieldNames)
- {
- WriteString(writer, accessor.Descriptor.Name);
- }
- else
- {
- WriteString(writer, accessor.Descriptor.JsonName);
- }
- writer.Write(NameValueSeparator);
- WriteValue(writer, value, indentationLevel);
-
- first = false;
- }
- return !first;
- }
-
- private void MaybeWriteValueSeparator(TextWriter writer, bool first)
- {
- if (first)
- {
- return;
- }
-
- writer.Write(settings.Indentation == null ? ValueSeparator : MultilineValueSeparator);
- }
-
- /// <summary>
- /// Determines whether or not a field value should be serialized according to the field,
- /// its value in the message, and the settings of this formatter.
- /// </summary>
- private bool ShouldFormatFieldValue(IMessage message, FieldDescriptor field, object value) =>
- field.HasPresence
+ /// <summary>
+ /// Determines whether or not a field value should be serialized according to the field,
+ /// its value in the message, and the settings of this formatter.
+ /// </summary>
+ private bool ShouldFormatFieldValue(IMessage message, FieldDescriptor field, object value) =>
+ field.HasPresence
// Fields that support presence *just* use that
? field.Accessor.HasValue(message)
// Otherwise, format if either we've been asked to format default values, or if it's
// not a default value anyway.
: settings.FormatDefaultValues || !IsDefaultValue(field, value);
- // Converted from java/core/src/main/java/com/google/protobuf/Descriptors.java
- internal static string ToJsonName(string name)
- {
- StringBuilder result = new StringBuilder(name.Length);
- bool isNextUpperCase = false;
- foreach (char ch in name)
- {
- if (ch == '_')
- {
- isNextUpperCase = true;
- }
- else if (isNextUpperCase)
- {
- result.Append(char.ToUpperInvariant(ch));
- isNextUpperCase = false;
- }
- else
- {
- result.Append(ch);
- }
- }
- return result.ToString();
+ // Converted from java/core/src/main/java/com/google/protobuf/Descriptors.java
+ internal static string ToJsonName(string name) {
+ StringBuilder result = new StringBuilder(name.Length);
+ bool isNextUpperCase = false;
+ foreach (char ch in name) {
+ if (ch == '_') {
+ isNextUpperCase = true;
+ } else if (isNextUpperCase) {
+ result.Append(char.ToUpperInvariant(ch));
+ isNextUpperCase = false;
+ } else {
+ result.Append(ch);
}
-
- internal static string FromJsonName(string name)
- {
- StringBuilder result = new StringBuilder(name.Length);
- foreach (char ch in name)
- {
- if (char.IsUpper(ch))
- {
- result.Append('_');
- result.Append(char.ToLowerInvariant(ch));
- }
- else
- {
- result.Append(ch);
- }
- }
- return result.ToString();
- }
-
- private static void WriteNull(TextWriter writer)
- {
- writer.Write("null");
- }
-
- private static bool IsDefaultValue(FieldDescriptor descriptor, object value)
- {
- if (descriptor.IsMap)
- {
- IDictionary dictionary = (IDictionary) value;
- return dictionary.Count == 0;
- }
- if (descriptor.IsRepeated)
- {
- IList list = (IList) value;
- return list.Count == 0;
- }
- return descriptor.FieldType switch
- {
- FieldType.Bool => (bool) value == false,
- FieldType.Bytes => (ByteString) value == ByteString.Empty,
- FieldType.String => (string) value == "",
- FieldType.Double => (double) value == 0.0,
- FieldType.SInt32 or FieldType.Int32 or FieldType.SFixed32 or FieldType.Enum => (int) value == 0,
- FieldType.Fixed32 or FieldType.UInt32 => (uint) value == 0,
- FieldType.Fixed64 or FieldType.UInt64 => (ulong) value == 0,
- FieldType.SFixed64 or FieldType.Int64 or FieldType.SInt64 => (long) value == 0,
- FieldType.Float => (float) value == 0f,
- FieldType.Message or FieldType.Group => value == null,
- _ => throw new ArgumentException("Invalid field type"),
- };
- }
-
- /// <summary>
- /// Writes a single value to the given writer as JSON. Only types understood by
- /// Protocol Buffers can be written in this way. This method is only exposed for
- /// advanced use cases; most users should be using <see cref="Format(IMessage)"/>
- /// or <see cref="Format(IMessage, TextWriter)"/>.
- /// </summary>
- /// <param name="writer">The writer to write the value to. Must not be null.</param>
- /// <param name="value">The value to write. May be null.</param>
- /// <remarks>Delegates to <c>WriteValue(TextWriter, object, int)</c> with <c>indentationLevel = 0</c>.</remarks>
- public void WriteValue(TextWriter writer, object value) => WriteValue(writer, value, 0);
-
- /// <summary>
- /// Writes a single value to the given writer as JSON. Only types understood by
- /// Protocol Buffers can be written in this way. This method is only exposed for
- /// advanced use cases; most users should be using <see cref="Format(IMessage)"/>
- /// or <see cref="Format(IMessage, TextWriter)"/>.
- /// </summary>
- /// <param name="writer">The writer to write the value to. Must not be null.</param>
- /// <param name="value">The value to write. May be null.</param>
- /// <param name="indentationLevel">The current indentationLevel. Not used when <see cref="Settings.Indentation"/> is null.</param>
- public void WriteValue(TextWriter writer, object value, int indentationLevel)
- {
- if (value == null || value is NullValue)
- {
- WriteNull(writer);
- }
- else if (value is bool b)
- {
- writer.Write(b ? "true" : "false");
- }
- else if (value is ByteString byteString)
- {
- // Nothing in Base64 needs escaping
- writer.Write('"');
- writer.Write(byteString.ToBase64());
- writer.Write('"');
- }
- else if (value is string str)
- {
- WriteString(writer, str);
- }
- else if (value is IDictionary dictionary)
- {
- WriteDictionary(writer, dictionary, indentationLevel);
- }
- else if (value is IList list)
- {
- WriteList(writer, list, indentationLevel);
- }
- else if (value is int || value is uint)
- {
- IFormattable formattable = (IFormattable) value;
- writer.Write(formattable.ToString("d", CultureInfo.InvariantCulture));
- }
- else if (value is long || value is ulong)
- {
- writer.Write('"');
- IFormattable formattable = (IFormattable) value;
- writer.Write(formattable.ToString("d", CultureInfo.InvariantCulture));
- writer.Write('"');
- }
- else if (value is System.Enum)
- {
- if (settings.FormatEnumsAsIntegers)
- {
- WriteValue(writer, (int)value);
- }
- else
- {
- string name = OriginalEnumValueHelper.GetOriginalName(value);
- if (name != null)
- {
- WriteString(writer, name);
- }
- else
- {
- WriteValue(writer, (int)value);
- }
- }
- }
- else if (value is float || value is double)
- {
- string text = ((IFormattable) value).ToString("r", CultureInfo.InvariantCulture);
- if (text == "NaN" || text == "Infinity" || text == "-Infinity")
- {
- writer.Write('"');
- writer.Write(text);
- writer.Write('"');
- }
- else
- {
- writer.Write(text);
- }
- }
- else if (value is IMessage message)
- {
- Format(message, writer, indentationLevel);
- }
- else
- {
- throw new ArgumentException("Unable to format value of type " + value.GetType());
- }
- }
-
- /// <summary>
- /// Central interception point for well-known type formatting. Any well-known types which
- /// don't need special handling can fall back to WriteMessage. We avoid assuming that the
- /// values are using the embedded well-known types, in order to allow for dynamic messages
- /// in the future.
- /// </summary>
- private void WriteWellKnownTypeValue(TextWriter writer, MessageDescriptor descriptor, object value, int indentationLevel)
- {
- // Currently, we can never actually get here, because null values are always handled by the caller. But if we *could*,
- // this would do the right thing.
- if (value == null)
- {
- WriteNull(writer);
- return;
- }
- // For wrapper types, the value will either be the (possibly boxed) "native" value,
- // or the message itself if we're formatting it at the top level (e.g. just calling ToString on the object itself).
- // If it's the message form, we can extract the value first, which *will* be the (possibly boxed) native value,
- // and then proceed, writing it as if we were definitely in a field. (We never need to wrap it in an extra string...
- // WriteValue will do the right thing.)
- if (descriptor.IsWrapperType)
- {
- if (value is IMessage message)
- {
- value = message.Descriptor.Fields[WrappersReflection.WrapperValueFieldNumber].Accessor.GetValue(message);
- }
- WriteValue(writer, value);
- return;
- }
- if (descriptor.FullName == Timestamp.Descriptor.FullName)
- {
- WriteTimestamp(writer, (IMessage)value);
- return;
- }
- if (descriptor.FullName == Duration.Descriptor.FullName)
- {
- WriteDuration(writer, (IMessage)value);
- return;
- }
- if (descriptor.FullName == FieldMask.Descriptor.FullName)
- {
- WriteFieldMask(writer, (IMessage)value);
- return;
- }
- if (descriptor.FullName == Struct.Descriptor.FullName)
- {
- WriteStruct(writer, (IMessage)value, indentationLevel);
- return;
- }
- if (descriptor.FullName == ListValue.Descriptor.FullName)
- {
- var fieldAccessor = descriptor.Fields[ListValue.ValuesFieldNumber].Accessor;
- WriteList(writer, (IList)fieldAccessor.GetValue((IMessage)value), indentationLevel);
- return;
- }
- if (descriptor.FullName == Value.Descriptor.FullName)
- {
- WriteStructFieldValue(writer, (IMessage)value, indentationLevel);
- return;
- }
- if (descriptor.FullName == Any.Descriptor.FullName)
- {
- WriteAny(writer, (IMessage)value, indentationLevel);
- return;
- }
- WriteMessage(writer, (IMessage)value, indentationLevel);
- }
-
- private void WriteTimestamp(TextWriter writer, IMessage value)
- {
- // TODO: In the common case where this *is* using the built-in Timestamp type, we could
- // avoid all the reflection at this point, by casting to Timestamp. In the interests of
- // avoiding subtle bugs, don't do that until we've implemented DynamicMessage so that we can prove
- // it still works in that case.
- int nanos = (int) value.Descriptor.Fields[Timestamp.NanosFieldNumber].Accessor.GetValue(value);
- long seconds = (long) value.Descriptor.Fields[Timestamp.SecondsFieldNumber].Accessor.GetValue(value);
- writer.Write(Timestamp.ToJson(seconds, nanos, DiagnosticOnly));
- }
-
- private void WriteDuration(TextWriter writer, IMessage value)
- {
- // TODO: Same as for WriteTimestamp
- int nanos = (int) value.Descriptor.Fields[Duration.NanosFieldNumber].Accessor.GetValue(value);
- long seconds = (long) value.Descriptor.Fields[Duration.SecondsFieldNumber].Accessor.GetValue(value);
- writer.Write(Duration.ToJson(seconds, nanos, DiagnosticOnly));
- }
-
- private void WriteFieldMask(TextWriter writer, IMessage value)
- {
- var paths = (IList<string>) value.Descriptor.Fields[FieldMask.PathsFieldNumber].Accessor.GetValue(value);
- writer.Write(FieldMask.ToJson(paths, DiagnosticOnly));
- }
-
- private void WriteAny(TextWriter writer, IMessage value, int indentationLevel)
- {
- if (DiagnosticOnly)
- {
- WriteDiagnosticOnlyAny(writer, value);
- return;
- }
-
- string typeUrl = (string) value.Descriptor.Fields[Any.TypeUrlFieldNumber].Accessor.GetValue(value);
- ByteString data = (ByteString) value.Descriptor.Fields[Any.ValueFieldNumber].Accessor.GetValue(value);
- string typeName = Any.GetTypeName(typeUrl);
- MessageDescriptor descriptor = settings.TypeRegistry.Find(typeName);
- if (descriptor == null)
- {
- throw new InvalidOperationException($"Type registry has no descriptor for type name '{typeName}'");
- }
- IMessage message = descriptor.Parser.ParseFrom(data);
- WriteBracketOpen(writer, ObjectOpenBracket);
- WriteString(writer, AnyTypeUrlField);
- writer.Write(NameValueSeparator);
- WriteString(writer, typeUrl);
-
- if (descriptor.IsWellKnownType)
- {
- writer.Write(ValueSeparator);
- WriteString(writer, AnyWellKnownTypeValueField);
- writer.Write(NameValueSeparator);
- WriteWellKnownTypeValue(writer, descriptor, message, indentationLevel);
- }
- else
- {
- WriteMessageFields(writer, message, true, indentationLevel);
- }
- WriteBracketClose(writer, ObjectCloseBracket, true, indentationLevel);
- }
-
- private void WriteDiagnosticOnlyAny(TextWriter writer, IMessage value)
- {
- string typeUrl = (string) value.Descriptor.Fields[Any.TypeUrlFieldNumber].Accessor.GetValue(value);
- ByteString data = (ByteString) value.Descriptor.Fields[Any.ValueFieldNumber].Accessor.GetValue(value);
- writer.Write("{ ");
- WriteString(writer, AnyTypeUrlField);
- writer.Write(NameValueSeparator);
- WriteString(writer, typeUrl);
- writer.Write(ValueSeparator);
- WriteString(writer, AnyDiagnosticValueField);
- writer.Write(NameValueSeparator);
- writer.Write('"');
- writer.Write(data.ToBase64());
- writer.Write('"');
- writer.Write(" }");
- }
-
- private void WriteStruct(TextWriter writer, IMessage message, int indentationLevel)
- {
- WriteBracketOpen(writer, ObjectOpenBracket);
- IDictionary fields = (IDictionary) message.Descriptor.Fields[Struct.FieldsFieldNumber].Accessor.GetValue(message);
- bool first = true;
- foreach (DictionaryEntry entry in fields)
- {
- string key = (string) entry.Key;
- IMessage value = (IMessage) entry.Value;
- if (string.IsNullOrEmpty(key) || value == null)
- {
- throw new InvalidOperationException("Struct fields cannot have an empty key or a null value.");
- }
-
- MaybeWriteValueSeparator(writer, first);
- MaybeWriteValueWhitespace(writer, indentationLevel + 1);
- WriteString(writer, key);
- writer.Write(NameValueSeparator);
- WriteStructFieldValue(writer, value, indentationLevel + 1);
- first = false;
- }
- WriteBracketClose(writer, ObjectCloseBracket, !first, indentationLevel);
- }
-
- private void WriteStructFieldValue(TextWriter writer, IMessage message, int indentationLevel)
- {
- var specifiedField = message.Descriptor.Oneofs[0].Accessor.GetCaseFieldDescriptor(message);
- if (specifiedField == null)
- {
- throw new InvalidOperationException("Value message must contain a value for the oneof.");
- }
-
- object value = specifiedField.Accessor.GetValue(message);
-
- switch (specifiedField.FieldNumber)
- {
- case Value.BoolValueFieldNumber:
- case Value.StringValueFieldNumber:
- case Value.NumberValueFieldNumber:
- WriteValue(writer, value);
- return;
- case Value.StructValueFieldNumber:
- case Value.ListValueFieldNumber:
- // Structs and ListValues are nested messages, and already well-known types.
- var nestedMessage = (IMessage) specifiedField.Accessor.GetValue(message);
- WriteWellKnownTypeValue(writer, nestedMessage.Descriptor, nestedMessage, indentationLevel);
- return;
- case Value.NullValueFieldNumber:
- WriteNull(writer);
- return;
- default:
- throw new InvalidOperationException("Unexpected case in struct field: " + specifiedField.FieldNumber);
- }
- }
-
- internal void WriteList(TextWriter writer, IList list, int indentationLevel = 0)
- {
- WriteBracketOpen(writer, ListBracketOpen);
-
- bool first = true;
- foreach (var value in list)
- {
- MaybeWriteValueSeparator(writer, first);
- MaybeWriteValueWhitespace(writer, indentationLevel + 1);
- WriteValue(writer, value, indentationLevel + 1);
- first = false;
- }
-
- WriteBracketClose(writer, ListBracketClose, !first, indentationLevel);
- }
-
- internal void WriteDictionary(TextWriter writer, IDictionary dictionary, int indentationLevel = 0)
- {
- WriteBracketOpen(writer, ObjectOpenBracket);
-
- bool first = true;
- // This will box each pair. Could use IDictionaryEnumerator, but that's ugly in terms of disposal.
- foreach (DictionaryEntry pair in dictionary)
- {
- string keyText;
- if (pair.Key is string s)
- {
- keyText = s;
- }
- else if (pair.Key is bool b)
- {
- keyText = b ? "true" : "false";
- }
- else if (pair.Key is int || pair.Key is uint || pair.Key is long || pair.Key is ulong)
- {
- keyText = ((IFormattable) pair.Key).ToString("d", CultureInfo.InvariantCulture);
- }
- else
- {
- if (pair.Key == null)
- {
- throw new ArgumentException("Dictionary has entry with null key");
- }
- throw new ArgumentException("Unhandled dictionary key type: " + pair.Key.GetType());
- }
-
- MaybeWriteValueSeparator(writer, first);
- MaybeWriteValueWhitespace(writer, indentationLevel + 1);
- WriteString(writer, keyText);
- writer.Write(NameValueSeparator);
- WriteValue(writer, pair.Value);
- first = false;
- }
-
- WriteBracketClose(writer, ObjectCloseBracket, !first, indentationLevel);
- }
-
- /// <summary>
- /// Writes a string (including leading and trailing double quotes) to a builder, escaping as required.
- /// </summary>
- /// <remarks>
- /// Other than surrogate pair handling, this code is mostly taken from src/google/protobuf/util/internal/json_escaping.cc.
- /// </remarks>
- internal static void WriteString(TextWriter writer, string text)
- {
- writer.Write('"');
- for (int i = 0; i < text.Length; i++)
- {
- char c = text[i];
- if (c < 0xa0)
- {
- writer.Write(CommonRepresentations[c]);
- continue;
- }
- if (char.IsHighSurrogate(c))
- {
- // Encountered first part of a surrogate pair.
- // Check that we have the whole pair, and encode both parts as hex.
- i++;
- if (i == text.Length || !char.IsLowSurrogate(text[i]))
- {
- throw new ArgumentException("String contains low surrogate not followed by high surrogate");
- }
- HexEncodeUtf16CodeUnit(writer, c);
- HexEncodeUtf16CodeUnit(writer, text[i]);
- continue;
- }
- else if (char.IsLowSurrogate(c))
- {
- throw new ArgumentException("String contains high surrogate not preceded by low surrogate");
- }
- switch ((uint) c)
- {
- // These are not required by json spec
- // but used to prevent security bugs in javascript.
- case 0xfeff: // Zero width no-break space
- case 0xfff9: // Interlinear annotation anchor
- case 0xfffa: // Interlinear annotation separator
- case 0xfffb: // Interlinear annotation terminator
-
- case 0x00ad: // Soft-hyphen
- case 0x06dd: // Arabic end of ayah
- case 0x070f: // Syriac abbreviation mark
- case 0x17b4: // Khmer vowel inherent Aq
- case 0x17b5: // Khmer vowel inherent Aa
- HexEncodeUtf16CodeUnit(writer, c);
- break;
-
- default:
- if ((c >= 0x0600 && c <= 0x0603) || // Arabic signs
- (c >= 0x200b && c <= 0x200f) || // Zero width etc.
- (c >= 0x2028 && c <= 0x202e) || // Separators etc.
- (c >= 0x2060 && c <= 0x2064) || // Invisible etc.
- (c >= 0x206a && c <= 0x206f))
- {
- HexEncodeUtf16CodeUnit(writer, c);
- }
- else
- {
- // No handling of surrogates here - that's done earlier
- writer.Write(c);
- }
- break;
- }
- }
- writer.Write('"');
- }
-
- private const string Hex = "0123456789abcdef";
- private static void HexEncodeUtf16CodeUnit(TextWriter writer, char c)
- {
- writer.Write("\\u");
- writer.Write(Hex[(c >> 12) & 0xf]);
- writer.Write(Hex[(c >> 8) & 0xf]);
- writer.Write(Hex[(c >> 4) & 0xf]);
- writer.Write(Hex[(c >> 0) & 0xf]);
- }
-
- private void WriteBracketOpen(TextWriter writer, char openChar)
- {
- writer.Write(openChar);
- if (settings.Indentation == null)
- {
- writer.Write(' ');
- }
- }
-
- private void WriteBracketClose(TextWriter writer, char closeChar, bool hasFields, int indentationLevel)
- {
- if (hasFields)
- {
- if (settings.Indentation != null)
- {
- writer.WriteLine();
- WriteIndentation(writer, indentationLevel);
- }
- else
- {
- writer.Write(" ");
- }
- }
-
- writer.Write(closeChar);
- }
-
- private void MaybeWriteValueWhitespace(TextWriter writer, int indentationLevel)
- {
- if (settings.Indentation != null) {
- writer.WriteLine();
- WriteIndentation(writer, indentationLevel);
- }
- }
-
- private void WriteIndentation(TextWriter writer, int indentationLevel)
- {
- for (int i = 0; i < indentationLevel; i++)
- {
- writer.Write(settings.Indentation);
- }
- }
-
- /// <summary>
- /// Settings controlling JSON formatting.
- /// </summary>
- public sealed class Settings
- {
- /// <summary>
- /// Default settings, as used by <see cref="JsonFormatter.Default"/>
- /// </summary>
- public static Settings Default { get; }
-
- // Workaround for the Mono compiler complaining about XML comments not being on
- // valid language elements.
- static Settings()
- {
- Default = new Settings(false);
- }
-
- /// <summary>
- /// Whether fields which would otherwise not be included in the formatted data
- /// should be formatted even when the value is not present, or has the default value.
- /// This option only affects fields which don't support "presence" (e.g.
- /// singular non-optional proto3 primitive fields).
- /// </summary>
- public bool FormatDefaultValues { get; }
-
- /// <summary>
- /// The type registry used to format <see cref="Any"/> messages.
- /// </summary>
- public TypeRegistry TypeRegistry { get; }
-
- /// <summary>
- /// Whether to format enums as ints. Defaults to false.
- /// </summary>
- public bool FormatEnumsAsIntegers { get; }
-
- /// <summary>
- /// Whether to use the original proto field names as defined in the .proto file. Defaults to false.
- /// </summary>
- public bool PreserveProtoFieldNames { get; }
-
- /// <summary>
- /// Indentation string, used for formatting. Setting null disables indentation.
- /// </summary>
- public string Indentation { get; }
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified formatting of default values
- /// and an empty type registry.
- /// </summary>
- /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc) should be formatted; <c>false</c> otherwise.</param>
- public Settings(bool formatDefaultValues) : this(formatDefaultValues, TypeRegistry.Empty)
- {
- }
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified formatting of default values
- /// and type registry.
- /// </summary>
- /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc) should be formatted; <c>false</c> otherwise.</param>
- /// <param name="typeRegistry">The <see cref="TypeRegistry"/> to use when formatting <see cref="Any"/> messages.</param>
- public Settings(bool formatDefaultValues, TypeRegistry typeRegistry) : this(formatDefaultValues, typeRegistry, false, false)
- {
- }
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified parameters.
- /// </summary>
- /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc) should be formatted; <c>false</c> otherwise.</param>
- /// <param name="typeRegistry">The <see cref="TypeRegistry"/> to use when formatting <see cref="Any"/> messages. TypeRegistry.Empty will be used if it is null.</param>
- /// <param name="formatEnumsAsIntegers"><c>true</c> to format the enums as integers; <c>false</c> to format enums as enum names.</param>
- /// <param name="preserveProtoFieldNames"><c>true</c> to preserve proto field names; <c>false</c> to convert them to lowerCamelCase.</param>
- /// <param name="indentation">The indentation string to use for multi-line formatting. <c>null</c> to disable multi-line format.</param>
- private Settings(bool formatDefaultValues,
- TypeRegistry typeRegistry,
- bool formatEnumsAsIntegers,
- bool preserveProtoFieldNames,
- string indentation = null)
- {
- FormatDefaultValues = formatDefaultValues;
- TypeRegistry = typeRegistry ?? TypeRegistry.Empty;
- FormatEnumsAsIntegers = formatEnumsAsIntegers;
- PreserveProtoFieldNames = preserveProtoFieldNames;
- Indentation = indentation;
- }
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified formatting of default values and the current settings.
- /// </summary>
- /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc) should be formatted; <c>false</c> otherwise.</param>
- public Settings WithFormatDefaultValues(bool formatDefaultValues) => new Settings(formatDefaultValues, TypeRegistry, FormatEnumsAsIntegers, PreserveProtoFieldNames, Indentation);
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified type registry and the current settings.
- /// </summary>
- /// <param name="typeRegistry">The <see cref="TypeRegistry"/> to use when formatting <see cref="Any"/> messages.</param>
- public Settings WithTypeRegistry(TypeRegistry typeRegistry) => new Settings(FormatDefaultValues, typeRegistry, FormatEnumsAsIntegers, PreserveProtoFieldNames, Indentation);
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified enums formatting option and the current settings.
- /// </summary>
- /// <param name="formatEnumsAsIntegers"><c>true</c> to format the enums as integers; <c>false</c> to format enums as enum names.</param>
- public Settings WithFormatEnumsAsIntegers(bool formatEnumsAsIntegers) => new Settings(FormatDefaultValues, TypeRegistry, formatEnumsAsIntegers, PreserveProtoFieldNames, Indentation);
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified field name formatting option and the current settings.
- /// </summary>
- /// <param name="preserveProtoFieldNames"><c>true</c> to preserve proto field names; <c>false</c> to convert them to lowerCamelCase.</param>
- public Settings WithPreserveProtoFieldNames(bool preserveProtoFieldNames) => new Settings(FormatDefaultValues, TypeRegistry, FormatEnumsAsIntegers, preserveProtoFieldNames, Indentation);
-
- /// <summary>
- /// Creates a new <see cref="Settings"/> object with the specified indentation and the current settings.
- /// </summary>
- /// <param name="indentation">The string to output for each level of indentation (nesting). The default is two spaces per level. Use null to disable indentation entirely.</param>
- /// <remarks>A non-null value for <see cref="Indentation"/> will insert additional line-breaks to the JSON output.
- /// Each line will contain either a single value, or braces. The default line-break is determined by <see cref="Environment.NewLine"/>,
- /// which is <c>"\n"</c> on Unix platforms, and <c>"\r\n"</c> on Windows. If <see cref="JsonFormatter"/> seems to produce empty lines,
- /// you need to pass a <see cref="TextWriter"/> that uses a <c>"\n"</c> newline. See <see cref="JsonFormatter.Format(Google.Protobuf.IMessage, TextWriter)"/>.
- /// </remarks>
- public Settings WithIndentation(string indentation = " ") => new Settings(FormatDefaultValues, TypeRegistry, FormatEnumsAsIntegers, PreserveProtoFieldNames, indentation);
- }
-
- // Effectively a cache of mapping from enum values to the original name as specified in the proto file,
- // fetched by reflection.
- // The need for this is unfortunate, as is its unbounded size, but realistically it shouldn't cause issues.
- private static class OriginalEnumValueHelper
- {
- private static readonly ConcurrentDictionary<System.Type, Dictionary<object, string>> dictionaries
- = new ConcurrentDictionary<System.Type, Dictionary<object, string>>();
-
- [UnconditionalSuppressMessage("Trimming", "IL2072",
- Justification = "The field for the value must still be present. It will be returned by reflection, will be in this collection, and its name can be resolved.")]
- internal static string GetOriginalName(object value)
- {
- Dictionary<object, string> nameMapping = dictionaries.GetOrAdd(value.GetType(), static t => GetNameMapping(t));
-
- // If this returns false, originalName will be null, which is what we want.
- nameMapping.TryGetValue(value, out string originalName);
- return originalName;
- }
-
- private static Dictionary<object, string> GetNameMapping(
- [DynamicallyAccessedMembers(
- DynamicallyAccessedMemberTypes.PublicFields |
- DynamicallyAccessedMemberTypes.NonPublicFields)]
- System.Type enumType)
- {
- return enumType.GetTypeInfo().DeclaredFields
- .Where(f => f.IsStatic)
- .Where(f => f.GetCustomAttributes<OriginalNameAttribute>()
- .FirstOrDefault()?.PreferredAlias ?? true)
- .ToDictionary(f => f.GetValue(null),
- f => f.GetCustomAttributes<OriginalNameAttribute>()
- .FirstOrDefault()
- // If the attribute hasn't been applied, fall back to the name of the field.
- ?.Name ?? f.Name);
- }
- }
+ }
+ return result.ToString();
}
+
+ internal static string FromJsonName(string name) {
+ StringBuilder result = new StringBuilder(name.Length);
+ foreach (char ch in name) {
+ if (char.IsUpper(ch)) {
+ result.Append('_');
+ result.Append(char.ToLowerInvariant(ch));
+ } else {
+ result.Append(ch);
+ }
+ }
+ return result.ToString();
+ }
+
+ private static void WriteNull(TextWriter writer) {
+ writer.Write("null");
+ }
+
+ private static bool IsDefaultValue(FieldDescriptor descriptor, object value) {
+ if (descriptor.IsMap) {
+ IDictionary dictionary = (IDictionary)value;
+ return dictionary.Count == 0;
+ }
+ if (descriptor.IsRepeated) {
+ IList list = (IList)value;
+ return list.Count == 0;
+ }
+ return descriptor.FieldType switch {
+ FieldType.Bool => (bool)value == false,
+ FieldType.Bytes => (ByteString)value == ByteString.Empty,
+ FieldType.String => (string)value == "",
+ FieldType.Double => (double)value == 0.0,
+ FieldType.SInt32 or FieldType.Int32 or FieldType.SFixed32 or FieldType.Enum =>
+ (int)value == 0,
+ FieldType.Fixed32 or FieldType.UInt32 => (uint)value == 0,
+ FieldType.Fixed64 or FieldType.UInt64 => (ulong)value == 0,
+ FieldType.SFixed64 or FieldType.Int64 or FieldType.SInt64 => (long)value == 0,
+ FieldType.Float => (float)value == 0f,
+ FieldType.Message or FieldType.Group => value == null,
+ _ => throw new ArgumentException("Invalid field type"),
+ };
+ }
+
+ /// <summary>
+ /// Writes a single value to the given writer as JSON. Only types understood by
+ /// Protocol Buffers can be written in this way. This method is only exposed for
+ /// advanced use cases; most users should be using <see cref="Format(IMessage)"/>
+ /// or <see cref="Format(IMessage, TextWriter)"/>.
+ /// </summary>
+ /// <param name="writer">The writer to write the value to. Must not be null.</param>
+ /// <param name="value">The value to write. May be null.</param>
+ /// <remarks>Delegates to <c>WriteValue(TextWriter, object, int)</c> with <c>indentationLevel =
+ /// 0</c>.</remarks>
+ public void WriteValue(TextWriter writer, object value) => WriteValue(writer, value, 0);
+
+ /// <summary>
+ /// Writes a single value to the given writer as JSON. Only types understood by
+ /// Protocol Buffers can be written in this way. This method is only exposed for
+ /// advanced use cases; most users should be using <see cref="Format(IMessage)"/>
+ /// or <see cref="Format(IMessage, TextWriter)"/>.
+ /// </summary>
+ /// <param name="writer">The writer to write the value to. Must not be null.</param>
+ /// <param name="value">The value to write. May be null.</param>
+ /// <param name="indentationLevel">The current indentationLevel. Not used when <see
+ /// cref="Settings.Indentation"/> is null.</param>
+ public void WriteValue(TextWriter writer, object value, int indentationLevel) {
+ if (value == null || value is NullValue) {
+ WriteNull(writer);
+ } else if (value is bool b) {
+ writer.Write(b ? "true" : "false");
+ } else if (value is ByteString byteString) {
+ // Nothing in Base64 needs escaping
+ writer.Write('"');
+ writer.Write(byteString.ToBase64());
+ writer.Write('"');
+ } else if (value is string str) {
+ WriteString(writer, str);
+ } else if (value is IDictionary dictionary) {
+ WriteDictionary(writer, dictionary, indentationLevel);
+ } else if (value is IList list) {
+ WriteList(writer, list, indentationLevel);
+ } else if (value is int || value is uint) {
+ IFormattable formattable = (IFormattable)value;
+ writer.Write(formattable.ToString("d", CultureInfo.InvariantCulture));
+ } else if (value is long || value is ulong) {
+ writer.Write('"');
+ IFormattable formattable = (IFormattable)value;
+ writer.Write(formattable.ToString("d", CultureInfo.InvariantCulture));
+ writer.Write('"');
+ } else if (value is System.Enum) {
+ if (settings.FormatEnumsAsIntegers) {
+ WriteValue(writer, (int)value);
+ } else {
+ string name = OriginalEnumValueHelper.GetOriginalName(value);
+ if (name != null) {
+ WriteString(writer, name);
+ } else {
+ WriteValue(writer, (int)value);
+ }
+ }
+ } else if (value is float || value is double) {
+ string text = ((IFormattable)value).ToString("r", CultureInfo.InvariantCulture);
+ if (text == "NaN" || text == "Infinity" || text == "-Infinity") {
+ writer.Write('"');
+ writer.Write(text);
+ writer.Write('"');
+ } else {
+ writer.Write(text);
+ }
+ } else if (value is IMessage message) {
+ Format(message, writer, indentationLevel);
+ } else {
+ throw new ArgumentException("Unable to format value of type " + value.GetType());
+ }
+ }
+
+ /// <summary>
+ /// Central interception point for well-known type formatting. Any well-known types which
+ /// don't need special handling can fall back to WriteMessage. We avoid assuming that the
+ /// values are using the embedded well-known types, in order to allow for dynamic messages
+ /// in the future.
+ /// </summary>
+ private void WriteWellKnownTypeValue(TextWriter writer, MessageDescriptor descriptor,
+ object value, int indentationLevel) {
+ // Currently, we can never actually get here, because null values are always handled by the
+ // caller. But if we *could*, this would do the right thing.
+ if (value == null) {
+ WriteNull(writer);
+ return;
+ }
+ // For wrapper types, the value will either be the (possibly boxed) "native" value,
+ // or the message itself if we're formatting it at the top level (e.g. just calling ToString
+ // on the object itself). If it's the message form, we can extract the value first, which
+ // *will* be the (possibly boxed) native value, and then proceed, writing it as if we were
+ // definitely in a field. (We never need to wrap it in an extra string... WriteValue will do
+ // the right thing.)
+ if (descriptor.IsWrapperType) {
+ if (value is IMessage message) {
+ value = message.Descriptor.Fields[WrappersReflection.WrapperValueFieldNumber]
+ .Accessor.GetValue(message);
+ }
+ WriteValue(writer, value);
+ return;
+ }
+ if (descriptor.FullName == Timestamp.Descriptor.FullName) {
+ WriteTimestamp(writer, (IMessage)value);
+ return;
+ }
+ if (descriptor.FullName == Duration.Descriptor.FullName) {
+ WriteDuration(writer, (IMessage)value);
+ return;
+ }
+ if (descriptor.FullName == FieldMask.Descriptor.FullName) {
+ WriteFieldMask(writer, (IMessage)value);
+ return;
+ }
+ if (descriptor.FullName == Struct.Descriptor.FullName) {
+ WriteStruct(writer, (IMessage)value, indentationLevel);
+ return;
+ }
+ if (descriptor.FullName == ListValue.Descriptor.FullName) {
+ var fieldAccessor = descriptor.Fields[ListValue.ValuesFieldNumber].Accessor;
+ WriteList(writer, (IList)fieldAccessor.GetValue((IMessage)value), indentationLevel);
+ return;
+ }
+ if (descriptor.FullName == Value.Descriptor.FullName) {
+ WriteStructFieldValue(writer, (IMessage)value, indentationLevel);
+ return;
+ }
+ if (descriptor.FullName == Any.Descriptor.FullName) {
+ WriteAny(writer, (IMessage)value, indentationLevel);
+ return;
+ }
+ WriteMessage(writer, (IMessage)value, indentationLevel);
+ }
+
+ private void WriteTimestamp(TextWriter writer, IMessage value) {
+ // TODO: In the common case where this *is* using the built-in Timestamp type, we could
+ // avoid all the reflection at this point, by casting to Timestamp. In the interests of
+ // avoiding subtle bugs, don't do that until we've implemented DynamicMessage so that we can
+ // prove it still works in that case.
+ int nanos = (int)value.Descriptor.Fields[Timestamp.NanosFieldNumber].Accessor.GetValue(value);
+ long seconds =
+ (long)value.Descriptor.Fields[Timestamp.SecondsFieldNumber].Accessor.GetValue(value);
+ writer.Write(Timestamp.ToJson(seconds, nanos, DiagnosticOnly));
+ }
+
+ private void WriteDuration(TextWriter writer, IMessage value) {
+ // TODO: Same as for WriteTimestamp
+ int nanos = (int)value.Descriptor.Fields[Duration.NanosFieldNumber].Accessor.GetValue(value);
+ long seconds =
+ (long)value.Descriptor.Fields[Duration.SecondsFieldNumber].Accessor.GetValue(value);
+ writer.Write(Duration.ToJson(seconds, nanos, DiagnosticOnly));
+ }
+
+ private void WriteFieldMask(TextWriter writer, IMessage value) {
+ var paths =
+ (IList<string>)value.Descriptor.Fields[FieldMask.PathsFieldNumber].Accessor.GetValue(
+ value);
+ writer.Write(FieldMask.ToJson(paths, DiagnosticOnly));
+ }
+
+ private void WriteAny(TextWriter writer, IMessage value, int indentationLevel) {
+ if (DiagnosticOnly) {
+ WriteDiagnosticOnlyAny(writer, value);
+ return;
+ }
+
+ string typeUrl =
+ (string)value.Descriptor.Fields[Any.TypeUrlFieldNumber].Accessor.GetValue(value);
+ ByteString data =
+ (ByteString)value.Descriptor.Fields[Any.ValueFieldNumber].Accessor.GetValue(value);
+ string typeName = Any.GetTypeName(typeUrl);
+ MessageDescriptor descriptor = settings.TypeRegistry.Find(typeName);
+ if (descriptor == null) {
+ throw new InvalidOperationException(
+ $"Type registry has no descriptor for type name '{typeName}'");
+ }
+ IMessage message = descriptor.Parser.ParseFrom(data);
+ WriteBracketOpen(writer, ObjectOpenBracket);
+ WriteString(writer, AnyTypeUrlField);
+ writer.Write(NameValueSeparator);
+ WriteString(writer, typeUrl);
+
+ if (descriptor.IsWellKnownType) {
+ writer.Write(ValueSeparator);
+ WriteString(writer, AnyWellKnownTypeValueField);
+ writer.Write(NameValueSeparator);
+ WriteWellKnownTypeValue(writer, descriptor, message, indentationLevel);
+ } else {
+ WriteMessageFields(writer, message, true, indentationLevel);
+ }
+ WriteBracketClose(writer, ObjectCloseBracket, true, indentationLevel);
+ }
+
+ private void WriteDiagnosticOnlyAny(TextWriter writer, IMessage value) {
+ string typeUrl =
+ (string)value.Descriptor.Fields[Any.TypeUrlFieldNumber].Accessor.GetValue(value);
+ ByteString data =
+ (ByteString)value.Descriptor.Fields[Any.ValueFieldNumber].Accessor.GetValue(value);
+ writer.Write("{ ");
+ WriteString(writer, AnyTypeUrlField);
+ writer.Write(NameValueSeparator);
+ WriteString(writer, typeUrl);
+ writer.Write(ValueSeparator);
+ WriteString(writer, AnyDiagnosticValueField);
+ writer.Write(NameValueSeparator);
+ writer.Write('"');
+ writer.Write(data.ToBase64());
+ writer.Write('"');
+ writer.Write(" }");
+ }
+
+ private void WriteStruct(TextWriter writer, IMessage message, int indentationLevel) {
+ WriteBracketOpen(writer, ObjectOpenBracket);
+ IDictionary fields =
+ (IDictionary)message.Descriptor.Fields[Struct.FieldsFieldNumber].Accessor.GetValue(
+ message);
+ bool first = true;
+ foreach (DictionaryEntry entry in fields) {
+ string key = (string)entry.Key;
+ IMessage value = (IMessage)entry.Value;
+ if (string.IsNullOrEmpty(key) || value == null) {
+ throw new InvalidOperationException(
+ "Struct fields cannot have an empty key or a null value.");
+ }
+
+ MaybeWriteValueSeparator(writer, first);
+ MaybeWriteValueWhitespace(writer, indentationLevel + 1);
+ WriteString(writer, key);
+ writer.Write(NameValueSeparator);
+ WriteStructFieldValue(writer, value, indentationLevel + 1);
+ first = false;
+ }
+ WriteBracketClose(writer, ObjectCloseBracket, !first, indentationLevel);
+ }
+
+ private void WriteStructFieldValue(TextWriter writer, IMessage message, int indentationLevel) {
+ var specifiedField = message.Descriptor.Oneofs[0].Accessor.GetCaseFieldDescriptor(message);
+ if (specifiedField == null) {
+ throw new InvalidOperationException("Value message must contain a value for the oneof.");
+ }
+
+ object value = specifiedField.Accessor.GetValue(message);
+
+ switch (specifiedField.FieldNumber) {
+ case Value.BoolValueFieldNumber:
+ case Value.StringValueFieldNumber:
+ case Value.NumberValueFieldNumber:
+ WriteValue(writer, value);
+ return;
+ case Value.StructValueFieldNumber:
+ case Value.ListValueFieldNumber:
+ // Structs and ListValues are nested messages, and already well-known types.
+ var nestedMessage = (IMessage)specifiedField.Accessor.GetValue(message);
+ WriteWellKnownTypeValue(writer, nestedMessage.Descriptor, nestedMessage,
+ indentationLevel);
+ return;
+ case Value.NullValueFieldNumber:
+ WriteNull(writer);
+ return;
+ default:
+ throw new InvalidOperationException("Unexpected case in struct field: " +
+ specifiedField.FieldNumber);
+ }
+ }
+
+ internal void WriteList(TextWriter writer, IList list, int indentationLevel = 0) {
+ WriteBracketOpen(writer, ListBracketOpen);
+
+ bool first = true;
+ foreach (var value in list) {
+ MaybeWriteValueSeparator(writer, first);
+ MaybeWriteValueWhitespace(writer, indentationLevel + 1);
+ WriteValue(writer, value, indentationLevel + 1);
+ first = false;
+ }
+
+ WriteBracketClose(writer, ListBracketClose, !first, indentationLevel);
+ }
+
+ internal void WriteDictionary(TextWriter writer, IDictionary dictionary,
+ int indentationLevel = 0) {
+ WriteBracketOpen(writer, ObjectOpenBracket);
+
+ bool first = true;
+ // This will box each pair. Could use IDictionaryEnumerator, but that's ugly in terms of
+ // disposal.
+ foreach (DictionaryEntry pair in dictionary) {
+ string keyText;
+ if (pair.Key is string s) {
+ keyText = s;
+ } else if (pair.Key is bool b) {
+ keyText = b ? "true" : "false";
+ } else if (pair.Key is int || pair.Key is uint || pair.Key is long || pair.Key is ulong) {
+ keyText = ((IFormattable)pair.Key).ToString("d", CultureInfo.InvariantCulture);
+ } else {
+ if (pair.Key == null) {
+ throw new ArgumentException("Dictionary has entry with null key");
+ }
+ throw new ArgumentException("Unhandled dictionary key type: " + pair.Key.GetType());
+ }
+
+ MaybeWriteValueSeparator(writer, first);
+ MaybeWriteValueWhitespace(writer, indentationLevel + 1);
+ WriteString(writer, keyText);
+ writer.Write(NameValueSeparator);
+ WriteValue(writer, pair.Value);
+ first = false;
+ }
+
+ WriteBracketClose(writer, ObjectCloseBracket, !first, indentationLevel);
+ }
+
+ /// <summary>
+ /// Writes a string (including leading and trailing double quotes) to a builder, escaping as
+ /// required.
+ /// </summary>
+ /// <remarks>
+ /// Other than surrogate pair handling, this code is mostly taken from
+ /// src/google/protobuf/util/internal/json_escaping.cc.
+ /// </remarks>
+ internal static void WriteString(TextWriter writer, string text) {
+ writer.Write('"');
+ for (int i = 0; i < text.Length; i++) {
+ char c = text[i];
+ if (c < 0xa0) {
+ writer.Write(CommonRepresentations[c]);
+ continue;
+ }
+ if (char.IsHighSurrogate(c)) {
+ // Encountered first part of a surrogate pair.
+ // Check that we have the whole pair, and encode both parts as hex.
+ i++;
+ if (i == text.Length || !char.IsLowSurrogate(text[i])) {
+ throw new ArgumentException(
+ "String contains low surrogate not followed by high surrogate");
+ }
+ HexEncodeUtf16CodeUnit(writer, c);
+ HexEncodeUtf16CodeUnit(writer, text[i]);
+ continue;
+ } else if (char.IsLowSurrogate(c)) {
+ throw new ArgumentException(
+ "String contains high surrogate not preceded by low surrogate");
+ }
+ switch ((uint)c) {
+ // These are not required by json spec
+ // but used to prevent security bugs in javascript.
+ case 0xfeff: // Zero width no-break space
+ case 0xfff9: // Interlinear annotation anchor
+ case 0xfffa: // Interlinear annotation separator
+ case 0xfffb: // Interlinear annotation terminator
+
+ case 0x00ad: // Soft-hyphen
+ case 0x06dd: // Arabic end of ayah
+ case 0x070f: // Syriac abbreviation mark
+ case 0x17b4: // Khmer vowel inherent Aq
+ case 0x17b5: // Khmer vowel inherent Aa
+ HexEncodeUtf16CodeUnit(writer, c);
+ break;
+
+ default:
+ if ((c >= 0x0600 && c <= 0x0603) || // Arabic signs
+ (c >= 0x200b && c <= 0x200f) || // Zero width etc.
+ (c >= 0x2028 && c <= 0x202e) || // Separators etc.
+ (c >= 0x2060 && c <= 0x2064) || // Invisible etc.
+ (c >= 0x206a && c <= 0x206f)) {
+ HexEncodeUtf16CodeUnit(writer, c);
+ } else {
+ // No handling of surrogates here - that's done earlier
+ writer.Write(c);
+ }
+ break;
+ }
+ }
+ writer.Write('"');
+ }
+
+ private const string Hex = "0123456789abcdef";
+ private static void HexEncodeUtf16CodeUnit(TextWriter writer, char c) {
+ writer.Write("\\u");
+ writer.Write(Hex[(c >> 12) & 0xf]);
+ writer.Write(Hex[(c >> 8) & 0xf]);
+ writer.Write(Hex[(c >> 4) & 0xf]);
+ writer.Write(Hex[(c >> 0) & 0xf]);
+ }
+
+ private void WriteBracketOpen(TextWriter writer, char openChar) {
+ writer.Write(openChar);
+ if (settings.Indentation == null) {
+ writer.Write(' ');
+ }
+ }
+
+ private void WriteBracketClose(TextWriter writer, char closeChar, bool hasFields,
+ int indentationLevel) {
+ if (hasFields) {
+ if (settings.Indentation != null) {
+ writer.WriteLine();
+ WriteIndentation(writer, indentationLevel);
+ } else {
+ writer.Write(" ");
+ }
+ }
+
+ writer.Write(closeChar);
+ }
+
+ private void MaybeWriteValueWhitespace(TextWriter writer, int indentationLevel) {
+ if (settings.Indentation != null) {
+ writer.WriteLine();
+ WriteIndentation(writer, indentationLevel);
+ }
+ }
+
+ private void WriteIndentation(TextWriter writer, int indentationLevel) {
+ for (int i = 0; i < indentationLevel; i++) {
+ writer.Write(settings.Indentation);
+ }
+ }
+
+ /// <summary>
+ /// Settings controlling JSON formatting.
+ /// </summary>
+ public sealed class Settings {
+ /// <summary>
+ /// Default settings, as used by <see cref="JsonFormatter.Default"/>
+ /// </summary>
+ public static Settings Default { get; }
+
+ // Workaround for the Mono compiler complaining about XML comments not being on
+ // valid language elements.
+ static Settings() {
+ Default = new Settings(false);
+ }
+
+ /// <summary>
+ /// Whether fields which would otherwise not be included in the formatted data
+ /// should be formatted even when the value is not present, or has the default value.
+ /// This option only affects fields which don't support "presence" (e.g.
+ /// singular non-optional proto3 primitive fields).
+ /// </summary>
+ public bool FormatDefaultValues { get; }
+
+ /// <summary>
+ /// The type registry used to format <see cref="Any"/> messages.
+ /// </summary>
+ public TypeRegistry TypeRegistry { get; }
+
+ /// <summary>
+ /// Whether to format enums as ints. Defaults to false.
+ /// </summary>
+ public bool FormatEnumsAsIntegers { get; }
+
+ /// <summary>
+ /// Whether to use the original proto field names as defined in the .proto file. Defaults to
+ /// false.
+ /// </summary>
+ public bool PreserveProtoFieldNames { get; }
+
+ /// <summary>
+ /// Indentation string, used for formatting. Setting null disables indentation.
+ /// </summary>
+ public string Indentation { get; }
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified formatting of default
+ /// values and an empty type registry.
+ /// </summary>
+ /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc)
+ /// should be formatted; <c>false</c> otherwise.</param>
+ public Settings(bool formatDefaultValues) : this(formatDefaultValues, TypeRegistry.Empty) {}
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified formatting of default
+ /// values and type registry.
+ /// </summary>
+ /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc)
+ /// should be formatted; <c>false</c> otherwise.</param> <param name="typeRegistry">The <see
+ /// cref="TypeRegistry"/> to use when formatting <see cref="Any"/> messages.</param>
+ public Settings(bool formatDefaultValues, TypeRegistry typeRegistry)
+ : this(formatDefaultValues, typeRegistry, false, false) {}
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified parameters.
+ /// </summary>
+ /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc)
+ /// should be formatted; <c>false</c> otherwise.</param> <param name="typeRegistry">The <see
+ /// cref="TypeRegistry"/> to use when formatting <see cref="Any"/> messages.
+ /// TypeRegistry.Empty will be used if it is null.</param> <param
+ /// name="formatEnumsAsIntegers"><c>true</c> to format the enums as integers; <c>false</c> to
+ /// format enums as enum names.</param> <param name="preserveProtoFieldNames"><c>true</c> to
+ /// preserve proto field names; <c>false</c> to convert them to lowerCamelCase.</param> <param
+ /// name="indentation">The indentation string to use for multi-line formatting. <c>null</c> to
+ /// disable multi-line format.</param>
+ private Settings(bool formatDefaultValues, TypeRegistry typeRegistry,
+ bool formatEnumsAsIntegers, bool preserveProtoFieldNames,
+ string indentation = null) {
+ FormatDefaultValues = formatDefaultValues;
+ TypeRegistry = typeRegistry ?? TypeRegistry.Empty;
+ FormatEnumsAsIntegers = formatEnumsAsIntegers;
+ PreserveProtoFieldNames = preserveProtoFieldNames;
+ Indentation = indentation;
+ }
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified formatting of default
+ /// values and the current settings.
+ /// </summary>
+ /// <param name="formatDefaultValues"><c>true</c> if default values (0, empty strings etc)
+ /// should be formatted; <c>false</c> otherwise.</param>
+ public Settings WithFormatDefaultValues(bool formatDefaultValues) =>
+ new Settings(formatDefaultValues, TypeRegistry, FormatEnumsAsIntegers,
+ PreserveProtoFieldNames, Indentation);
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified type registry and the
+ /// current settings.
+ /// </summary>
+ /// <param name="typeRegistry">The <see cref="TypeRegistry"/> to use when formatting <see
+ /// cref="Any"/> messages.</param>
+ public Settings WithTypeRegistry(TypeRegistry typeRegistry) =>
+ new Settings(FormatDefaultValues, typeRegistry, FormatEnumsAsIntegers,
+ PreserveProtoFieldNames, Indentation);
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified enums formatting option and
+ /// the current settings.
+ /// </summary>
+ /// <param name="formatEnumsAsIntegers"><c>true</c> to format the enums as integers;
+ /// <c>false</c> to format enums as enum names.</param>
+ public Settings WithFormatEnumsAsIntegers(bool formatEnumsAsIntegers) =>
+ new Settings(FormatDefaultValues, TypeRegistry, formatEnumsAsIntegers,
+ PreserveProtoFieldNames, Indentation);
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified field name formatting
+ /// option and the current settings.
+ /// </summary>
+ /// <param name="preserveProtoFieldNames"><c>true</c> to preserve proto field names;
+ /// <c>false</c> to convert them to lowerCamelCase.</param>
+ public Settings WithPreserveProtoFieldNames(bool preserveProtoFieldNames) =>
+ new Settings(FormatDefaultValues, TypeRegistry, FormatEnumsAsIntegers,
+ preserveProtoFieldNames, Indentation);
+
+ /// <summary>
+ /// Creates a new <see cref="Settings"/> object with the specified indentation and the current
+ /// settings.
+ /// </summary>
+ /// <param name="indentation">The string to output for each level of indentation (nesting).
+ /// The default is two spaces per level. Use null to disable indentation entirely.</param>
+ /// <remarks>A non-null value for <see cref="Indentation"/> will insert additional line-breaks
+ /// to the JSON output. Each line will contain either a single value, or braces. The default
+ /// line-break is determined by <see cref="Environment.NewLine"/>, which is <c>"\n"</c> on
+ /// Unix platforms, and <c>"\r\n"</c> on Windows. If <see cref="JsonFormatter"/> seems to
+ /// produce empty lines, you need to pass a <see cref="TextWriter"/> that uses a <c>"\n"</c>
+ /// newline. See <see cref="JsonFormatter.Format(Google.Protobuf.IMessage, TextWriter)"/>.
+ /// </remarks>
+ public Settings WithIndentation(string indentation = " ") =>
+ new Settings(FormatDefaultValues, TypeRegistry, FormatEnumsAsIntegers,
+ PreserveProtoFieldNames, indentation);
+ }
+
+ // Effectively a cache of mapping from enum values to the original name as specified in the
+ // proto file, fetched by reflection. The need for this is unfortunate, as is its unbounded
+ // size, but realistically it shouldn't cause issues.
+ private static class OriginalEnumValueHelper {
+ private static readonly ConcurrentDictionary<System.Type, Dictionary<object, string>>
+ dictionaries = new ConcurrentDictionary<System.Type, Dictionary<object, string>>();
+
+ [UnconditionalSuppressMessage(
+ "Trimming", "IL2072",
+ Justification =
+ "The field for the value must still be present. It will be returned by reflection, will be in this collection, and its name can be resolved.")]
+ [UnconditionalSuppressMessage(
+ "Trimming", "IL2067",
+ Justification =
+ "The field for the value must still be present. It will be returned by reflection, will be in this collection, and its name can be resolved.")]
+ internal static string GetOriginalName(object value) {
+ // Warnings are suppressed on this method. However, this code has been tested in an AOT app
+ // and verified that it works. Issue
+ // https://github.com/protocolbuffers/protobuf/issues/14788 discusses changes to guarantee
+ // that enum fields are never trimmed.
+ Dictionary<object, string> nameMapping =
+ dictionaries.GetOrAdd(value.GetType(), static t => GetNameMapping(t));
+
+ // If this returns false, originalName will be null, which is what we want.
+ nameMapping.TryGetValue(value, out string originalName);
+ return originalName;
+ }
+
+ private static Dictionary<object, string> GetNameMapping([
+ DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields |
+ DynamicallyAccessedMemberTypes.NonPublicFields)
+ ] System.Type enumType) {
+ return enumType.GetTypeInfo()
+ .DeclaredFields.Where(f => f.IsStatic)
+ .Where(f => f.GetCustomAttributes<OriginalNameAttribute>()
+ .FirstOrDefault()
+ ?.PreferredAlias ??
+ true)
+ .ToDictionary(
+ f => f.GetValue(null),
+ f =>
+ f.GetCustomAttributes<OriginalNameAttribute>()
+ .FirstOrDefault()
+ // If the attribute hasn't been applied, fall back to the name of the field.
+ ?.Name ??
+ f.Name);
+ }
+ }
+ }
}
diff --git a/csharp/src/Google.Protobuf/Reflection/Descriptor.pb.cs b/csharp/src/Google.Protobuf/Reflection/Descriptor.pb.cs
index 2421d98..336a074 100644
--- a/csharp/src/Google.Protobuf/Reflection/Descriptor.pb.cs
+++ b/csharp/src/Google.Protobuf/Reflection/Descriptor.pb.cs
@@ -53,190 +53,189 @@
"X25hbWUYCiADKAkaZQoORXh0ZW5zaW9uUmFuZ2USDQoFc3RhcnQYASABKAUS",
"CwoDZW5kGAIgASgFEjcKB29wdGlvbnMYAyABKAsyJi5nb29nbGUucHJvdG9i",
"dWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zGisKDVJlc2VydmVkUmFuZ2USDQoF",
- "c3RhcnQYASABKAUSCwoDZW5kGAIgASgFIuADChVFeHRlbnNpb25SYW5nZU9w",
+ "c3RhcnQYASABKAUSCwoDZW5kGAIgASgFIuUDChVFeHRlbnNpb25SYW5nZU9w",
"dGlvbnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xl",
"LnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24STAoLZGVjbGFyYXRpb24Y",
"AiADKAsyMi5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25z",
"LkRlY2xhcmF0aW9uQgOIAQISLQoIZmVhdHVyZXMYMiABKAsyGy5nb29nbGUu",
- "cHJvdG9idWYuRmVhdHVyZVNldBJaCgx2ZXJpZmljYXRpb24YAyABKA4yOC5n",
+ "cHJvdG9idWYuRmVhdHVyZVNldBJfCgx2ZXJpZmljYXRpb24YAyABKA4yOC5n",
"b29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLlZlcmlmaWNh",
- "dGlvblN0YXRlOgpVTlZFUklGSUVEGmgKC0RlY2xhcmF0aW9uEg4KBm51bWJl",
- "chgBIAEoBRIRCglmdWxsX25hbWUYAiABKAkSDAoEdHlwZRgDIAEoCRIQCghy",
- "ZXNlcnZlZBgFIAEoCBIQCghyZXBlYXRlZBgGIAEoCEoECAQQBSI0ChFWZXJp",
- "ZmljYXRpb25TdGF0ZRIPCgtERUNMQVJBVElPThAAEg4KClVOVkVSSUZJRUQQ",
- "ASoJCOgHEICAgIACItUFChRGaWVsZERlc2NyaXB0b3JQcm90bxIMCgRuYW1l",
- "GAEgASgJEg4KBm51bWJlchgDIAEoBRI6CgVsYWJlbBgEIAEoDjIrLmdvb2ds",
- "ZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbBI4CgR0eXBl",
- "GAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3Rv",
- "LlR5cGUSEQoJdHlwZV9uYW1lGAYgASgJEhAKCGV4dGVuZGVlGAIgASgJEhUK",
- "DWRlZmF1bHRfdmFsdWUYByABKAkSEwoLb25lb2ZfaW5kZXgYCSABKAUSEQoJ",
- "anNvbl9uYW1lGAogASgJEi4KB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJv",
- "dG9idWYuRmllbGRPcHRpb25zEhcKD3Byb3RvM19vcHRpb25hbBgRIAEoCCK2",
- "AgoEVHlwZRIPCgtUWVBFX0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpU",
- "WVBFX0lOVDY0EAMSDwoLVFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUS",
- "EAoMVFlQRV9GSVhFRDY0EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9C",
- "T09MEAgSDwoLVFlQRV9TVFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQ",
- "RV9NRVNTQUdFEAsSDgoKVFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0S",
- "DQoJVFlQRV9FTlVNEA4SEQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJ",
- "WEVENjQQEBIPCgtUWVBFX1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoF",
- "TGFiZWwSEgoOTEFCRUxfT1BUSU9OQUwQARISCg5MQUJFTF9SRVBFQVRFRBAD",
- "EhIKDkxBQkVMX1JFUVVJUkVEEAIiVAoUT25lb2ZEZXNjcmlwdG9yUHJvdG8S",
- "DAoEbmFtZRgBIAEoCRIuCgdvcHRpb25zGAIgASgLMh0uZ29vZ2xlLnByb3Rv",
- "YnVmLk9uZW9mT3B0aW9ucyKkAgoTRW51bURlc2NyaXB0b3JQcm90bxIMCgRu",
- "YW1lGAEgASgJEjgKBXZhbHVlGAIgAygLMikuZ29vZ2xlLnByb3RvYnVmLkVu",
- "dW1WYWx1ZURlc2NyaXB0b3JQcm90bxItCgdvcHRpb25zGAMgASgLMhwuZ29v",
- "Z2xlLnByb3RvYnVmLkVudW1PcHRpb25zEk4KDnJlc2VydmVkX3JhbmdlGAQg",
- "AygLMjYuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51",
- "bVJlc2VydmVkUmFuZ2USFQoNcmVzZXJ2ZWRfbmFtZRgFIAMoCRovChFFbnVt",
- "UmVzZXJ2ZWRSYW5nZRINCgVzdGFydBgBIAEoBRILCgNlbmQYAiABKAUibAoY",
- "RW51bVZhbHVlRGVzY3JpcHRvclByb3RvEgwKBG5hbWUYASABKAkSDgoGbnVt",
- "YmVyGAIgASgFEjIKB29wdGlvbnMYAyABKAsyIS5nb29nbGUucHJvdG9idWYu",
- "RW51bVZhbHVlT3B0aW9ucyKQAQoWU2VydmljZURlc2NyaXB0b3JQcm90bxIM",
- "CgRuYW1lGAEgASgJEjYKBm1ldGhvZBgCIAMoCzImLmdvb2dsZS5wcm90b2J1",
- "Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8SMAoHb3B0aW9ucxgDIAEoCzIfLmdv",
- "b2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucyLBAQoVTWV0aG9kRGVzY3Jp",
- "cHRvclByb3RvEgwKBG5hbWUYASABKAkSEgoKaW5wdXRfdHlwZRgCIAEoCRIT",
- "CgtvdXRwdXRfdHlwZRgDIAEoCRIvCgdvcHRpb25zGAQgASgLMh4uZ29vZ2xl",
- "LnByb3RvYnVmLk1ldGhvZE9wdGlvbnMSHwoQY2xpZW50X3N0cmVhbWluZxgF",
- "IAEoCDoFZmFsc2USHwoQc2VydmVyX3N0cmVhbWluZxgGIAEoCDoFZmFsc2Ui",
- "1AYKC0ZpbGVPcHRpb25zEhQKDGphdmFfcGFja2FnZRgBIAEoCRIcChRqYXZh",
- "X291dGVyX2NsYXNzbmFtZRgIIAEoCRIiChNqYXZhX211bHRpcGxlX2ZpbGVz",
- "GAogASgIOgVmYWxzZRIpCh1qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFz",
- "aBgUIAEoCEICGAESJQoWamF2YV9zdHJpbmdfY2hlY2tfdXRmOBgbIAEoCDoF",
- "ZmFsc2USRgoMb3B0aW1pemVfZm9yGAkgASgOMikuZ29vZ2xlLnByb3RvYnVm",
- "LkZpbGVPcHRpb25zLk9wdGltaXplTW9kZToFU1BFRUQSEgoKZ29fcGFja2Fn",
- "ZRgLIAEoCRIiChNjY19nZW5lcmljX3NlcnZpY2VzGBAgASgIOgVmYWxzZRIk",
- "ChVqYXZhX2dlbmVyaWNfc2VydmljZXMYESABKAg6BWZhbHNlEiIKE3B5X2dl",
- "bmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlEiMKFHBocF9nZW5lcmljX3Nl",
- "cnZpY2VzGCogASgIOgVmYWxzZRIZCgpkZXByZWNhdGVkGBcgASgIOgVmYWxz",
- "ZRIeChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlEhkKEW9iamNfY2xh",
- "c3NfcHJlZml4GCQgASgJEhgKEGNzaGFycF9uYW1lc3BhY2UYJSABKAkSFAoM",
- "c3dpZnRfcHJlZml4GCcgASgJEhgKEHBocF9jbGFzc19wcmVmaXgYKCABKAkS",
- "FQoNcGhwX25hbWVzcGFjZRgpIAEoCRIeChZwaHBfbWV0YWRhdGFfbmFtZXNw",
- "YWNlGCwgASgJEhQKDHJ1YnlfcGFja2FnZRgtIAEoCRItCghmZWF0dXJlcxgy",
- "IAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0EkMKFHVuaW50ZXJw",
- "cmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy",
- "cHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNP",
- "REVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgmECci",
- "5wIKDk1lc3NhZ2VPcHRpb25zEiYKF21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0",
- "GAEgASgIOgVmYWxzZRIuCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vz",
- "c29yGAIgASgIOgVmYWxzZRIZCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZRIR",
- "CgltYXBfZW50cnkYByABKAgSMgomZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9m",
- "aWVsZF9jb25mbGljdHMYCyABKAhCAhgBEi0KCGZlYXR1cmVzGAwgASgLMhsu",
- "Z29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQSQwoUdW5pbnRlcnByZXRlZF9v",
- "cHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP",
- "cHRpb24qCQjoBxCAgICAAkoECAQQBUoECAUQBkoECAYQB0oECAgQCUoECAkQ",
- "CiKNCQoMRmllbGRPcHRpb25zEjoKBWN0eXBlGAEgASgOMiMuZ29vZ2xlLnBy",
- "b3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZToGU1RSSU5HEg4KBnBhY2tlZBgC",
- "IAEoCBI/CgZqc3R5cGUYBiABKA4yJC5nb29nbGUucHJvdG9idWYuRmllbGRP",
- "cHRpb25zLkpTVHlwZToJSlNfTk9STUFMEhMKBGxhenkYBSABKAg6BWZhbHNl",
- "Eh4KD3VudmVyaWZpZWRfbGF6eRgPIAEoCDoFZmFsc2USGQoKZGVwcmVjYXRl",
- "ZBgDIAEoCDoFZmFsc2USEwoEd2VhaxgKIAEoCDoFZmFsc2USGwoMZGVidWdf",
- "cmVkYWN0GBAgASgIOgVmYWxzZRJACglyZXRlbnRpb24YESABKA4yLS5nb29n",
- "bGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvbhI/Cgd0",
- "YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5P",
- "cHRpb25UYXJnZXRUeXBlEkYKEGVkaXRpb25fZGVmYXVsdHMYFCADKAsyLC5n",
- "b29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkVkaXRpb25EZWZhdWx0Ei0K",
- "CGZlYXR1cmVzGBUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQS",
- "QwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3Rv",
- "YnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24aSgoORWRpdGlvbkRlZmF1bHQSKQoH",
- "ZWRpdGlvbhgDIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uEg0KBXZh",
- "bHVlGAIgASgJIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxT",
- "VFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNf",
- "U1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUK",
- "EVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIU",
- "ChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoT",
- "VEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIf",
- "ChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQ",
- "RV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRf",
- "VFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRf",
- "VFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYK",
- "ElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAVKBAgSEBMi",
- "jQEKDE9uZW9mT3B0aW9ucxItCghmZWF0dXJlcxgBIAEoCzIbLmdvb2dsZS5w",
+ "dGlvblN0YXRlOgpVTlZFUklGSUVEQgOIAQIaaAoLRGVjbGFyYXRpb24SDgoG",
+ "bnVtYmVyGAEgASgFEhEKCWZ1bGxfbmFtZRgCIAEoCRIMCgR0eXBlGAMgASgJ",
+ "EhAKCHJlc2VydmVkGAUgASgIEhAKCHJlcGVhdGVkGAYgASgISgQIBBAFIjQK",
+ "EVZlcmlmaWNhdGlvblN0YXRlEg8KC0RFQ0xBUkFUSU9OEAASDgoKVU5WRVJJ",
+ "RklFRBABKgkI6AcQgICAgAIi1QUKFEZpZWxkRGVzY3JpcHRvclByb3RvEgwK",
+ "BG5hbWUYASABKAkSDgoGbnVtYmVyGAMgASgFEjoKBWxhYmVsGAQgASgOMisu",
+ "Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsEjgK",
+ "BHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y",
+ "UHJvdG8uVHlwZRIRCgl0eXBlX25hbWUYBiABKAkSEAoIZXh0ZW5kZWUYAiAB",
+ "KAkSFQoNZGVmYXVsdF92YWx1ZRgHIAEoCRITCgtvbmVvZl9pbmRleBgJIAEo",
+ "BRIRCglqc29uX25hbWUYCiABKAkSLgoHb3B0aW9ucxgIIAEoCzIdLmdvb2ds",
+ "ZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMSFwoPcHJvdG8zX29wdGlvbmFsGBEg",
+ "ASgIIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBAC",
+ "Eg4KClRZUEVfSU5UNjQQAxIPCgtUWVBFX1VJTlQ2NBAEEg4KClRZUEVfSU5U",
+ "MzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglU",
+ "WVBFX0JPT0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQ",
+ "CgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLVFlQRV9VSU5U",
+ "MzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQ",
+ "RV9TRklYRUQ2NBAQEg8KC1RZUEVfU0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQ",
+ "EiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUEVB",
+ "VEVEEAMSEgoOTEFCRUxfUkVRVUlSRUQQAiJUChRPbmVvZkRlc2NyaXB0b3JQ",
+ "cm90bxIMCgRuYW1lGAEgASgJEi4KB29wdGlvbnMYAiABKAsyHS5nb29nbGUu",
+ "cHJvdG9idWYuT25lb2ZPcHRpb25zIqQCChNFbnVtRGVzY3JpcHRvclByb3Rv",
+ "EgwKBG5hbWUYASABKAkSOAoFdmFsdWUYAiADKAsyKS5nb29nbGUucHJvdG9i",
+ "dWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEi0KB29wdGlvbnMYAyABKAsy",
+ "HC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMSTgoOcmVzZXJ2ZWRfcmFu",
+ "Z2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90",
+ "by5FbnVtUmVzZXJ2ZWRSYW5nZRIVCg1yZXNlcnZlZF9uYW1lGAUgAygJGi8K",
+ "EUVudW1SZXNlcnZlZFJhbmdlEg0KBXN0YXJ0GAEgASgFEgsKA2VuZBgCIAEo",
+ "BSJsChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRIO",
+ "CgZudW1iZXIYAiABKAUSMgoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90",
+ "b2J1Zi5FbnVtVmFsdWVPcHRpb25zIpABChZTZXJ2aWNlRGVzY3JpcHRvclBy",
+ "b3RvEgwKBG5hbWUYASABKAkSNgoGbWV0aG9kGAIgAygLMiYuZ29vZ2xlLnBy",
+ "b3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bxIwCgdvcHRpb25zGAMgASgL",
+ "Mh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zIsEBChVNZXRob2RE",
+ "ZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRISCgppbnB1dF90eXBlGAIg",
+ "ASgJEhMKC291dHB1dF90eXBlGAMgASgJEi8KB29wdGlvbnMYBCABKAsyHi5n",
+ "b29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxIfChBjbGllbnRfc3RyZWFt",
+ "aW5nGAUgASgIOgVmYWxzZRIfChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVm",
+ "YWxzZSK1BgoLRmlsZU9wdGlvbnMSFAoMamF2YV9wYWNrYWdlGAEgASgJEhwK",
+ "FGphdmFfb3V0ZXJfY2xhc3NuYW1lGAggASgJEiIKE2phdmFfbXVsdGlwbGVf",
+ "ZmlsZXMYCiABKAg6BWZhbHNlEikKHWphdmFfZ2VuZXJhdGVfZXF1YWxzX2Fu",
+ "ZF9oYXNoGBQgASgIQgIYARIlChZqYXZhX3N0cmluZ19jaGVja191dGY4GBsg",
+ "ASgIOgVmYWxzZRJGCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJv",
+ "dG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlOgVTUEVFRBISCgpnb19w",
+ "YWNrYWdlGAsgASgJEiIKE2NjX2dlbmVyaWNfc2VydmljZXMYECABKAg6BWZh",
+ "bHNlEiQKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2USIgoT",
+ "cHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2USGQoKZGVwcmVjYXRl",
+ "ZBgXIAEoCDoFZmFsc2USHgoQY2NfZW5hYmxlX2FyZW5hcxgfIAEoCDoEdHJ1",
+ "ZRIZChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCRIYChBjc2hhcnBfbmFtZXNw",
+ "YWNlGCUgASgJEhQKDHN3aWZ0X3ByZWZpeBgnIAEoCRIYChBwaHBfY2xhc3Nf",
+ "cHJlZml4GCggASgJEhUKDXBocF9uYW1lc3BhY2UYKSABKAkSHgoWcGhwX21l",
+ "dGFkYXRhX25hbWVzcGFjZRgsIAEoCRIUCgxydWJ5X3BhY2thZ2UYLSABKAkS",
+ "LQoIZmVhdHVyZXMYMiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNl",
+ "dBJDChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJv",
+ "dG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiI6CgxPcHRpbWl6ZU1vZGUSCQoF",
+ "U1BFRUQQARINCglDT0RFX1NJWkUQAhIQCgxMSVRFX1JVTlRJTUUQAyoJCOgH",
+ "EICAgIACSgQIKhArSgQIJhAnIucCCg5NZXNzYWdlT3B0aW9ucxImChdtZXNz",
+ "YWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2USLgofbm9fc3RhbmRh",
+ "cmRfZGVzY3JpcHRvcl9hY2Nlc3NvchgCIAEoCDoFZmFsc2USGQoKZGVwcmVj",
+ "YXRlZBgDIAEoCDoFZmFsc2USEQoJbWFwX2VudHJ5GAcgASgIEjIKJmRlcHJl",
+ "Y2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYARIt",
+ "CghmZWF0dXJlcxgMIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0",
+ "EkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90",
+ "b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgEEAVKBAgF",
+ "EAZKBAgGEAdKBAgIEAlKBAgJEAoijQkKDEZpZWxkT3B0aW9ucxI6CgVjdHlw",
+ "ZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6",
+ "BlNUUklORxIOCgZwYWNrZWQYAiABKAgSPwoGanN0eXBlGAYgASgOMiQuZ29v",
+ "Z2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6CUpTX05PUk1BTBIT",
+ "CgRsYXp5GAUgASgIOgVmYWxzZRIeCg91bnZlcmlmaWVkX2xhenkYDyABKAg6",
+ "BWZhbHNlEhkKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlEhMKBHdlYWsYCiAB",
+ "KAg6BWZhbHNlEhsKDGRlYnVnX3JlZGFjdBgQIAEoCDoFZmFsc2USQAoJcmV0",
+ "ZW50aW9uGBEgASgOMi0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5P",
+ "cHRpb25SZXRlbnRpb24SPwoHdGFyZ2V0cxgTIAMoDjIuLmdvb2dsZS5wcm90",
+ "b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZRJGChBlZGl0aW9u",
+ "X2RlZmF1bHRzGBQgAygLMiwuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9u",
+ "cy5FZGl0aW9uRGVmYXVsdBItCghmZWF0dXJlcxgVIAEoCzIbLmdvb2dsZS5w",
"cm90b2J1Zi5GZWF0dXJlU2V0EkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcH",
- "IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI",
- "6AcQgICAgAIi9gEKC0VudW1PcHRpb25zEhMKC2FsbG93X2FsaWFzGAIgASgI",
- "EhkKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlEjIKJmRlcHJlY2F0ZWRfbGVn",
- "YWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYARItCghmZWF0dXJl",
- "cxgHIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0EkMKFHVuaW50",
- "ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5Vbmlu",
- "dGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYiyQEKEEVudW1WYWx1",
- "ZU9wdGlvbnMSGQoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2USLQoIZmVhdHVy",
- "ZXMYAiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldBIbCgxkZWJ1",
- "Z19yZWRhY3QYAyABKAg6BWZhbHNlEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9u",
- "GOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9u",
- "KgkI6AcQgICAgAIiqgEKDlNlcnZpY2VPcHRpb25zEi0KCGZlYXR1cmVzGCIg",
- "ASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQSGQoKZGVwcmVjYXRl",
- "ZBghIAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygL",
- "MiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCA",
- "gICAAiLcAgoNTWV0aG9kT3B0aW9ucxIZCgpkZXByZWNhdGVkGCEgASgIOgVm",
- "YWxzZRJfChFpZGVtcG90ZW5jeV9sZXZlbBgiIAEoDjIvLmdvb2dsZS5wcm90",
- "b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWw6E0lERU1QT1RF",
- "TkNZX1VOS05PV04SLQoIZmVhdHVyZXMYIyABKAsyGy5nb29nbGUucHJvdG9i",
- "dWYuRmVhdHVyZVNldBJDChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsy",
- "JC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiJQChBJZGVt",
- "cG90ZW5jeUxldmVsEhcKE0lERU1QT1RFTkNZX1VOS05PV04QABITCg9OT19T",
- "SURFX0VGRkVDVFMQARIOCgpJREVNUE9URU5UEAIqCQjoBxCAgICAAiKeAgoT",
- "VW5pbnRlcnByZXRlZE9wdGlvbhI7CgRuYW1lGAIgAygLMi0uZ29vZ2xlLnBy",
- "b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQSGAoQaWRlbnRp",
- "Zmllcl92YWx1ZRgDIAEoCRIaChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKAQS",
- "GgoSbmVnYXRpdmVfaW50X3ZhbHVlGAUgASgDEhQKDGRvdWJsZV92YWx1ZRgG",
- "IAEoARIUCgxzdHJpbmdfdmFsdWUYByABKAwSFwoPYWdncmVnYXRlX3ZhbHVl",
- "GAggASgJGjMKCE5hbWVQYXJ0EhEKCW5hbWVfcGFydBgBIAIoCRIUCgxpc19l",
- "eHRlbnNpb24YAiACKAginQkKCkZlYXR1cmVTZXQSfAoOZmllbGRfcHJlc2Vu",
- "Y2UYASABKA4yKS5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5GaWVsZFBy",
- "ZXNlbmNlQjmIAQGYAQSYAQGiAQ0SCEVYUExJQ0lUGOYHogENEghJTVBMSUNJ",
- "VBjnB6IBDRIIRVhQTElDSVQY6AcSXAoJZW51bV90eXBlGAIgASgOMiQuZ29v",
- "Z2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuRW51bVR5cGVCI4gBAZgBBpgBAaIB",
- "CxIGQ0xPU0VEGOYHogEJEgRPUEVOGOcHEnsKF3JlcGVhdGVkX2ZpZWxkX2Vu",
- "Y29kaW5nGAMgASgOMjEuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuUmVw",
- "ZWF0ZWRGaWVsZEVuY29kaW5nQieIAQGYAQSYAQGiAQ0SCEVYUEFOREVEGOYH",
- "ogELEgZQQUNLRUQY5wcSaAoPdXRmOF92YWxpZGF0aW9uGAQgASgOMiouZ29v",
- "Z2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuVXRmOFZhbGlkYXRpb25CI4gBAZgB",
- "BJgBAaIBCRIETk9ORRjmB6IBCxIGVkVSSUZZGOcHEmcKEG1lc3NhZ2VfZW5j",
- "b2RpbmcYBSABKA4yKy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5NZXNz",
- "YWdlRW5jb2RpbmdCIIgBAZgBBJgBAaIBFBIPTEVOR1RIX1BSRUZJWEVEGOYH",
- "EnAKC2pzb25fZm9ybWF0GAYgASgOMiYuZ29vZ2xlLnByb3RvYnVmLkZlYXR1",
- "cmVTZXQuSnNvbkZvcm1hdEIziAEBmAEDmAEGmAEBogEXEhJMRUdBQ1lfQkVT",
- "VF9FRkZPUlQY5geiAQoSBUFMTE9XGOcHIlwKDUZpZWxkUHJlc2VuY2USGgoW",
- "RklFTERfUFJFU0VOQ0VfVU5LTk9XThAAEgwKCEVYUExJQ0lUEAESDAoISU1Q",
- "TElDSVQQAhITCg9MRUdBQ1lfUkVRVUlSRUQQAyI3CghFbnVtVHlwZRIVChFF",
- "TlVNX1RZUEVfVU5LTk9XThAAEggKBE9QRU4QARIKCgZDTE9TRUQQAiJWChVS",
- "ZXBlYXRlZEZpZWxkRW5jb2RpbmcSIwofUkVQRUFURURfRklFTERfRU5DT0RJ",
- "TkdfVU5LTk9XThAAEgoKBlBBQ0tFRBABEgwKCEVYUEFOREVEEAIiQwoOVXRm",
- "OFZhbGlkYXRpb24SGwoXVVRGOF9WQUxJREFUSU9OX1VOS05PV04QABIICgRO",
- "T05FEAESCgoGVkVSSUZZEAIiUwoPTWVzc2FnZUVuY29kaW5nEhwKGE1FU1NB",
- "R0VfRU5DT0RJTkdfVU5LTk9XThAAEhMKD0xFTkdUSF9QUkVGSVhFRBABEg0K",
- "CURFTElNSVRFRBACIkgKCkpzb25Gb3JtYXQSFwoTSlNPTl9GT1JNQVRfVU5L",
- "Tk9XThAAEgkKBUFMTE9XEAESFgoSTEVHQUNZX0JFU1RfRUZGT1JUEAIqBgjo",
- "BxDpByoGCOkHEOoHKgYIi04QkE5KBgjnBxDoByLAAgoSRmVhdHVyZVNldERl",
- "ZmF1bHRzEk4KCGRlZmF1bHRzGAEgAygLMjwuZ29vZ2xlLnByb3RvYnVmLkZl",
- "YXR1cmVTZXREZWZhdWx0cy5GZWF0dXJlU2V0RWRpdGlvbkRlZmF1bHQSMQoP",
- "bWluaW11bV9lZGl0aW9uGAQgASgOMhguZ29vZ2xlLnByb3RvYnVmLkVkaXRp",
- "b24SMQoPbWF4aW11bV9lZGl0aW9uGAUgASgOMhguZ29vZ2xlLnByb3RvYnVm",
- "LkVkaXRpb24adAoYRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0EikKB2VkaXRp",
- "b24YAyABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvbhItCghmZWF0dXJl",
- "cxgCIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0ItUBCg5Tb3Vy",
- "Y2VDb2RlSW5mbxI6Cghsb2NhdGlvbhgBIAMoCzIoLmdvb2dsZS5wcm90b2J1",
- "Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbhqGAQoITG9jYXRpb24SEAoEcGF0",
- "aBgBIAMoBUICEAESEAoEc3BhbhgCIAMoBUICEAESGAoQbGVhZGluZ19jb21t",
- "ZW50cxgDIAEoCRIZChF0cmFpbGluZ19jb21tZW50cxgEIAEoCRIhChlsZWFk",
- "aW5nX2RldGFjaGVkX2NvbW1lbnRzGAYgAygJIpwCChFHZW5lcmF0ZWRDb2Rl",
- "SW5mbxJBCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdl",
- "bmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24awwEKCkFubm90YXRpb24SEAoE",
- "cGF0aBgBIAMoBUICEAESEwoLc291cmNlX2ZpbGUYAiABKAkSDQoFYmVnaW4Y",
- "AyABKAUSCwoDZW5kGAQgASgFEkgKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xl",
- "LnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50",
- "aWMiKAoIU2VtYW50aWMSCAoETk9ORRAAEgcKA1NFVBABEgkKBUFMSUFTEAIq",
- "6gEKB0VkaXRpb24SEwoPRURJVElPTl9VTktOT1dOEAASEwoORURJVElPTl9Q",
- "Uk9UTzIQ5gcSEwoORURJVElPTl9QUk9UTzMQ5wcSEQoMRURJVElPTl8yMDIz",
- "EOgHEhcKE0VESVRJT05fMV9URVNUX09OTFkQARIXChNFRElUSU9OXzJfVEVT",
- "VF9PTkxZEAISHQoXRURJVElPTl85OTk5N19URVNUX09OTFkQnY0GEh0KF0VE",
- "SVRJT05fOTk5OThfVEVTVF9PTkxZEJ6NBhIdChdFRElUSU9OXzk5OTk5X1RF",
- "U1RfT05MWRCfjQZCfgoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRv",
- "clByb3Rvc0gBWi1nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9k",
- "ZXNjcmlwdG9ycGL4AQGiAgNHUEKqAhpHb29nbGUuUHJvdG9idWYuUmVmbGVj",
- "dGlvbg=="));
+ "IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uGkoK",
+ "DkVkaXRpb25EZWZhdWx0EikKB2VkaXRpb24YAyABKA4yGC5nb29nbGUucHJv",
+ "dG9idWYuRWRpdGlvbhINCgV2YWx1ZRgCIAEoCSIvCgVDVHlwZRIKCgZTVFJJ",
+ "TkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0K",
+ "CUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACIlUK",
+ "D09wdGlvblJldGVudGlvbhIVChFSRVRFTlRJT05fVU5LTk9XThAAEhUKEVJF",
+ "VEVOVElPTl9SVU5USU1FEAESFAoQUkVURU5USU9OX1NPVVJDRRACIowCChBP",
+ "cHRpb25UYXJnZXRUeXBlEhcKE1RBUkdFVF9UWVBFX1VOS05PV04QABIUChBU",
+ "QVJHRVRfVFlQRV9GSUxFEAESHwobVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JB",
+ "TkdFEAISFwoTVEFSR0VUX1RZUEVfTUVTU0FHRRADEhUKEVRBUkdFVF9UWVBF",
+ "X0ZJRUxEEAQSFQoRVEFSR0VUX1RZUEVfT05FT0YQBRIUChBUQVJHRVRfVFlQ",
+ "RV9FTlVNEAYSGgoWVEFSR0VUX1RZUEVfRU5VTV9FTlRSWRAHEhcKE1RBUkdF",
+ "VF9UWVBFX1NFUlZJQ0UQCBIWChJUQVJHRVRfVFlQRV9NRVRIT0QQCSoJCOgH",
+ "EICAgIACSgQIBBAFSgQIEhATIo0BCgxPbmVvZk9wdGlvbnMSLQoIZmVhdHVy",
+ "ZXMYASABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldBJDChR1bmlu",
+ "dGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5p",
+ "bnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIvYBCgtFbnVtT3B0aW9ucxIT",
+ "CgthbGxvd19hbGlhcxgCIAEoCBIZCgpkZXByZWNhdGVkGAMgASgIOgVmYWxz",
+ "ZRIyCiZkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cxgG",
+ "IAEoCEICGAESLQoIZmVhdHVyZXMYByABKAsyGy5nb29nbGUucHJvdG9idWYu",
+ "RmVhdHVyZVNldBJDChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5n",
+ "b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIAC",
+ "SgQIBRAGIskBChBFbnVtVmFsdWVPcHRpb25zEhkKCmRlcHJlY2F0ZWQYASAB",
+ "KAg6BWZhbHNlEi0KCGZlYXR1cmVzGAIgASgLMhsuZ29vZ2xlLnByb3RvYnVm",
+ "LkZlYXR1cmVTZXQSGwoMZGVidWdfcmVkYWN0GAMgASgIOgVmYWxzZRJDChR1",
+ "bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYu",
+ "VW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIqoBCg5TZXJ2aWNlT3B0",
+ "aW9ucxItCghmZWF0dXJlcxgiIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0",
+ "dXJlU2V0EhkKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlEkMKFHVuaW50ZXJw",
+ "cmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy",
+ "cHJldGVkT3B0aW9uKgkI6AcQgICAgAIi3AIKDU1ldGhvZE9wdGlvbnMSGQoK",
+ "ZGVwcmVjYXRlZBghIAEoCDoFZmFsc2USXwoRaWRlbXBvdGVuY3lfbGV2ZWwY",
+ "IiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90",
+ "ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOEi0KCGZlYXR1cmVzGCMg",
+ "ASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQSQwoUdW5pbnRlcnBy",
+ "ZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJw",
+ "cmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZXZlbBIXChNJREVNUE9URU5D",
+ "WV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVO",
+ "VBACKgkI6AcQgICAgAIingIKE1VuaW50ZXJwcmV0ZWRPcHRpb24SOwoEbmFt",
+ "ZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9u",
+ "Lk5hbWVQYXJ0EhgKEGlkZW50aWZpZXJfdmFsdWUYAyABKAkSGgoScG9zaXRp",
+ "dmVfaW50X3ZhbHVlGAQgASgEEhoKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEo",
+ "AxIUCgxkb3VibGVfdmFsdWUYBiABKAESFAoMc3RyaW5nX3ZhbHVlGAcgASgM",
+ "EhcKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCRozCghOYW1lUGFydBIRCgluYW1l",
+ "X3BhcnQYASACKAkSFAoMaXNfZXh0ZW5zaW9uGAIgAigIIp0JCgpGZWF0dXJl",
+ "U2V0EnwKDmZpZWxkX3ByZXNlbmNlGAEgASgOMikuZ29vZ2xlLnByb3RvYnVm",
+ "LkZlYXR1cmVTZXQuRmllbGRQcmVzZW5jZUI5iAEBmAEEmAEBogENEghFWFBM",
+ "SUNJVBjmB6IBDRIISU1QTElDSVQY5weiAQ0SCEVYUExJQ0lUGOgHElwKCWVu",
+ "dW1fdHlwZRgCIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LkVu",
+ "dW1UeXBlQiOIAQGYAQaYAQGiAQsSBkNMT1NFRBjmB6IBCRIET1BFThjnBxJ7",
+ "ChdyZXBlYXRlZF9maWVsZF9lbmNvZGluZxgDIAEoDjIxLmdvb2dsZS5wcm90",
+ "b2J1Zi5GZWF0dXJlU2V0LlJlcGVhdGVkRmllbGRFbmNvZGluZ0IniAEBmAEE",
+ "mAEBogENEghFWFBBTkRFRBjmB6IBCxIGUEFDS0VEGOcHEmgKD3V0ZjhfdmFs",
+ "aWRhdGlvbhgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlV0",
+ "ZjhWYWxpZGF0aW9uQiOIAQGYAQSYAQGiAQkSBE5PTkUY5geiAQsSBlZFUklG",
+ "WRjnBxJnChBtZXNzYWdlX2VuY29kaW5nGAUgASgOMisuZ29vZ2xlLnByb3Rv",
+ "YnVmLkZlYXR1cmVTZXQuTWVzc2FnZUVuY29kaW5nQiCIAQGYAQSYAQGiARQS",
+ "D0xFTkdUSF9QUkVGSVhFRBjmBxJwCgtqc29uX2Zvcm1hdBgGIAEoDjImLmdv",
+ "b2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lkpzb25Gb3JtYXRCM4gBAZgBA5gB",
+ "BpgBAaIBFxISTEVHQUNZX0JFU1RfRUZGT1JUGOYHogEKEgVBTExPVxjnByJc",
+ "Cg1GaWVsZFByZXNlbmNlEhoKFkZJRUxEX1BSRVNFTkNFX1VOS05PV04QABIM",
+ "CghFWFBMSUNJVBABEgwKCElNUExJQ0lUEAISEwoPTEVHQUNZX1JFUVVJUkVE",
+ "EAMiNwoIRW51bVR5cGUSFQoRRU5VTV9UWVBFX1VOS05PV04QABIICgRPUEVO",
+ "EAESCgoGQ0xPU0VEEAIiVgoVUmVwZWF0ZWRGaWVsZEVuY29kaW5nEiMKH1JF",
+ "UEVBVEVEX0ZJRUxEX0VOQ09ESU5HX1VOS05PV04QABIKCgZQQUNLRUQQARIM",
+ "CghFWFBBTkRFRBACIkMKDlV0ZjhWYWxpZGF0aW9uEhsKF1VURjhfVkFMSURB",
+ "VElPTl9VTktOT1dOEAASCgoGVkVSSUZZEAISCAoETk9ORRADIlMKD01lc3Nh",
+ "Z2VFbmNvZGluZxIcChhNRVNTQUdFX0VOQ09ESU5HX1VOS05PV04QABITCg9M",
+ "RU5HVEhfUFJFRklYRUQQARINCglERUxJTUlURUQQAiJICgpKc29uRm9ybWF0",
+ "EhcKE0pTT05fRk9STUFUX1VOS05PV04QABIJCgVBTExPVxABEhYKEkxFR0FD",
+ "WV9CRVNUX0VGRk9SVBACKgYI6AcQ6QcqBgjpBxDqByoGCItOEJBOSgYI5wcQ",
+ "6AciwAIKEkZlYXR1cmVTZXREZWZhdWx0cxJOCghkZWZhdWx0cxgBIAMoCzI8",
+ "Lmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0RGVmYXVsdHMuRmVhdHVyZVNl",
+ "dEVkaXRpb25EZWZhdWx0EjEKD21pbmltdW1fZWRpdGlvbhgEIAEoDjIYLmdv",
+ "b2dsZS5wcm90b2J1Zi5FZGl0aW9uEjEKD21heGltdW1fZWRpdGlvbhgFIAEo",
+ "DjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uGnQKGEZlYXR1cmVTZXRFZGl0",
+ "aW9uRGVmYXVsdBIpCgdlZGl0aW9uGAMgASgOMhguZ29vZ2xlLnByb3RvYnVm",
+ "LkVkaXRpb24SLQoIZmVhdHVyZXMYAiABKAsyGy5nb29nbGUucHJvdG9idWYu",
+ "RmVhdHVyZVNldCLVAQoOU291cmNlQ29kZUluZm8SOgoIbG9jYXRpb24YASAD",
+ "KAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24a",
+ "hgEKCExvY2F0aW9uEhAKBHBhdGgYASADKAVCAhABEhAKBHNwYW4YAiADKAVC",
+ "AhABEhgKEGxlYWRpbmdfY29tbWVudHMYAyABKAkSGQoRdHJhaWxpbmdfY29t",
+ "bWVudHMYBCABKAkSIQoZbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cxgGIAMo",
+ "CSKcAgoRR2VuZXJhdGVkQ29kZUluZm8SQQoKYW5ub3RhdGlvbhgBIAMoCzIt",
+ "Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9u",
+ "GsMBCgpBbm5vdGF0aW9uEhAKBHBhdGgYASADKAVCAhABEhMKC3NvdXJjZV9m",
+ "aWxlGAIgASgJEg0KBWJlZ2luGAMgASgFEgsKA2VuZBgEIAEoBRJICghzZW1h",
+ "bnRpYxgFIAEoDjI2Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5m",
+ "by5Bbm5vdGF0aW9uLlNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIH",
+ "CgNTRVQQARIJCgVBTElBUxACKv8BCgdFZGl0aW9uEhMKD0VESVRJT05fVU5L",
+ "Tk9XThAAEhMKDkVESVRJT05fUFJPVE8yEOYHEhMKDkVESVRJT05fUFJPVE8z",
+ "EOcHEhEKDEVESVRJT05fMjAyMxDoBxIXChNFRElUSU9OXzFfVEVTVF9PTkxZ",
+ "EAESFwoTRURJVElPTl8yX1RFU1RfT05MWRACEh0KF0VESVRJT05fOTk5OTdf",
+ "VEVTVF9PTkxZEJ2NBhIdChdFRElUSU9OXzk5OTk4X1RFU1RfT05MWRCejQYS",
+ "HQoXRURJVElPTl85OTk5OV9URVNUX09OTFkQn40GEhMKC0VESVRJT05fTUFY",
+ "EP////8HQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90",
+ "b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3Jp",
+ "cHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Google.Protobuf.Reflection.Edition), }, null, new pbr::GeneratedClrTypeInfo[] {
@@ -251,7 +250,7 @@
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.EnumValueDescriptorProto), global::Google.Protobuf.Reflection.EnumValueDescriptorProto.Parser, new[]{ "Name", "Number", "Options" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.ServiceDescriptorProto), global::Google.Protobuf.Reflection.ServiceDescriptorProto.Parser, new[]{ "Name", "Method", "Options" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.MethodDescriptorProto), global::Google.Protobuf.Reflection.MethodDescriptorProto.Parser, new[]{ "Name", "InputType", "OutputType", "Options", "ClientStreaming", "ServerStreaming" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.FileOptions), global::Google.Protobuf.Reflection.FileOptions.Parser, new[]{ "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "JavaStringCheckUtf8", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "PhpGenericServices", "Deprecated", "CcEnableArenas", "ObjcClassPrefix", "CsharpNamespace", "SwiftPrefix", "PhpClassPrefix", "PhpNamespace", "PhpMetadataNamespace", "RubyPackage", "Features", "UninterpretedOption" }, null, new[]{ typeof(global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode) }, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.FileOptions), global::Google.Protobuf.Reflection.FileOptions.Parser, new[]{ "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "JavaStringCheckUtf8", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "Deprecated", "CcEnableArenas", "ObjcClassPrefix", "CsharpNamespace", "SwiftPrefix", "PhpClassPrefix", "PhpNamespace", "PhpMetadataNamespace", "RubyPackage", "Features", "UninterpretedOption" }, null, new[]{ typeof(global::Google.Protobuf.Reflection.FileOptions.Types.OptimizeMode) }, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.MessageOptions), global::Google.Protobuf.Reflection.MessageOptions.Parser, new[]{ "MessageSetWireFormat", "NoStandardDescriptorAccessor", "Deprecated", "MapEntry", "DeprecatedLegacyJsonFieldConflicts", "Features", "UninterpretedOption" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.FieldOptions), global::Google.Protobuf.Reflection.FieldOptions.Parser, new[]{ "Ctype", "Packed", "Jstype", "Lazy", "UnverifiedLazy", "Deprecated", "Weak", "DebugRedact", "Retention", "Targets", "EditionDefaults", "Features", "UninterpretedOption" }, null, new[]{ typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.CType), typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.JSType), typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.OptionRetention), typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.OptionTargetType) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.FieldOptions.Types.EditionDefault), global::Google.Protobuf.Reflection.FieldOptions.Types.EditionDefault.Parser, new[]{ "Edition", "Value" }, null, null, null, null)}),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Reflection.OneofOptions), global::Google.Protobuf.Reflection.OneofOptions.Parser, new[]{ "Features", "UninterpretedOption" }, null, null, null, null),
@@ -301,6 +300,12 @@
[pbr::OriginalName("EDITION_99997_TEST_ONLY")] _99997TestOnly = 99997,
[pbr::OriginalName("EDITION_99998_TEST_ONLY")] _99998TestOnly = 99998,
[pbr::OriginalName("EDITION_99999_TEST_ONLY")] _99999TestOnly = 99999,
+ /// <summary>
+ /// Placeholder for specifying unbounded edition support. This should only
+ /// ever be used by plugins that can expect to never require any changes to
+ /// support a new edition.
+ /// </summary>
+ [pbr::OriginalName("EDITION_MAX")] Max = 2147483647,
}
#endregion
@@ -3387,12 +3392,12 @@
/// If true, this is a proto3 "optional". When a proto3 field is optional, it
/// tracks presence regardless of field type.
///
- /// When proto3_optional is true, this field must be belong to a oneof to
- /// signal to old proto3 clients that presence is tracked for this field. This
- /// oneof is known as a "synthetic" oneof, and this field must be its sole
- /// member (each proto3 optional field gets its own synthetic oneof). Synthetic
- /// oneofs exist in the descriptor only, and do not generate any API. Synthetic
- /// oneofs must be ordered after all "real" oneofs.
+ /// When proto3_optional is true, this field must belong to a oneof to signal
+ /// to old proto3 clients that presence is tracked for this field. This oneof
+ /// is known as a "synthetic" oneof, and this field must be its sole member
+ /// (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs
+ /// exist in the descriptor only, and do not generate any API. Synthetic oneofs
+ /// must be ordered after all "real" oneofs.
///
/// For message fields, proto3_optional doesn't create any semantic change,
/// since non-repeated message fields always track presence. However it still
@@ -5864,7 +5869,6 @@
ccGenericServices_ = other.ccGenericServices_;
javaGenericServices_ = other.javaGenericServices_;
pyGenericServices_ = other.pyGenericServices_;
- phpGenericServices_ = other.phpGenericServices_;
deprecated_ = other.deprecated_;
ccEnableArenas_ = other.ccEnableArenas_;
objcClassPrefix_ = other.objcClassPrefix_;
@@ -6207,33 +6211,6 @@
_hasBits0 &= ~16;
}
- /// <summary>Field number for the "php_generic_services" field.</summary>
- public const int PhpGenericServicesFieldNumber = 42;
- private readonly static bool PhpGenericServicesDefaultValue = false;
-
- private bool phpGenericServices_;
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public bool PhpGenericServices {
- get { if ((_hasBits0 & 512) != 0) { return phpGenericServices_; } else { return PhpGenericServicesDefaultValue; } }
- set {
- _hasBits0 |= 512;
- phpGenericServices_ = value;
- }
- }
- /// <summary>Gets whether the "php_generic_services" field is set</summary>
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public bool HasPhpGenericServices {
- get { return (_hasBits0 & 512) != 0; }
- }
- /// <summary>Clears the value of the "php_generic_services" field</summary>
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public void ClearPhpGenericServices() {
- _hasBits0 &= ~512;
- }
-
/// <summary>Field number for the "deprecated" field.</summary>
public const int DeprecatedFieldNumber = 23;
private readonly static bool DeprecatedDefaultValue = false;
@@ -6567,7 +6544,6 @@
if (CcGenericServices != other.CcGenericServices) return false;
if (JavaGenericServices != other.JavaGenericServices) return false;
if (PyGenericServices != other.PyGenericServices) return false;
- if (PhpGenericServices != other.PhpGenericServices) return false;
if (Deprecated != other.Deprecated) return false;
if (CcEnableArenas != other.CcEnableArenas) return false;
if (ObjcClassPrefix != other.ObjcClassPrefix) return false;
@@ -6599,7 +6575,6 @@
if (HasCcGenericServices) hash ^= CcGenericServices.GetHashCode();
if (HasJavaGenericServices) hash ^= JavaGenericServices.GetHashCode();
if (HasPyGenericServices) hash ^= PyGenericServices.GetHashCode();
- if (HasPhpGenericServices) hash ^= PhpGenericServices.GetHashCode();
if (HasDeprecated) hash ^= Deprecated.GetHashCode();
if (HasCcEnableArenas) hash ^= CcEnableArenas.GetHashCode();
if (HasObjcClassPrefix) hash ^= ObjcClassPrefix.GetHashCode();
@@ -6700,10 +6675,6 @@
output.WriteRawTag(202, 2);
output.WriteString(PhpNamespace);
}
- if (HasPhpGenericServices) {
- output.WriteRawTag(208, 2);
- output.WriteBool(PhpGenericServices);
- }
if (HasPhpMetadataNamespace) {
output.WriteRawTag(226, 2);
output.WriteString(PhpMetadataNamespace);
@@ -6798,10 +6769,6 @@
output.WriteRawTag(202, 2);
output.WriteString(PhpNamespace);
}
- if (HasPhpGenericServices) {
- output.WriteRawTag(208, 2);
- output.WriteBool(PhpGenericServices);
- }
if (HasPhpMetadataNamespace) {
output.WriteRawTag(226, 2);
output.WriteString(PhpMetadataNamespace);
@@ -6858,9 +6825,6 @@
if (HasPyGenericServices) {
size += 2 + 1;
}
- if (HasPhpGenericServices) {
- size += 2 + 1;
- }
if (HasDeprecated) {
size += 2 + 1;
}
@@ -6937,9 +6901,6 @@
if (other.HasPyGenericServices) {
PyGenericServices = other.PyGenericServices;
}
- if (other.HasPhpGenericServices) {
- PhpGenericServices = other.PhpGenericServices;
- }
if (other.HasDeprecated) {
Deprecated = other.Deprecated;
}
@@ -7060,10 +7021,6 @@
PhpNamespace = input.ReadString();
break;
}
- case 336: {
- PhpGenericServices = input.ReadBool();
- break;
- }
case 354: {
PhpMetadataNamespace = input.ReadString();
break;
@@ -7168,10 +7125,6 @@
PhpNamespace = input.ReadString();
break;
}
- case 336: {
- PhpGenericServices = input.ReadBool();
- break;
- }
case 354: {
PhpMetadataNamespace = input.ReadString();
break;
@@ -7420,10 +7373,6 @@
private bool mapEntry_;
/// <summary>
- /// NOTE: Do not set the option in .proto files. Always use the maps syntax
- /// instead. The option should only be implicitly set by the proto compiler
- /// parser.
- ///
/// Whether the message is an automatically generated map entry type for the
/// maps field.
///
@@ -7441,6 +7390,10 @@
/// use a native map in the target language to hold the keys and values.
/// The reflection APIs in such implementations still need to work as
/// if the field is a repeated message field.
+ ///
+ /// NOTE: Do not set the option in .proto files. Always use the maps syntax
+ /// instead. The option should only be implicitly set by the proto compiler
+ /// parser.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@@ -12256,8 +12209,8 @@
public enum Utf8Validation {
[pbr::OriginalName("UTF8_VALIDATION_UNKNOWN")] Unknown = 0,
- [pbr::OriginalName("NONE")] None = 1,
[pbr::OriginalName("VERIFY")] Verify = 2,
+ [pbr::OriginalName("NONE")] None = 3,
}
public enum MessageEncoding {
@@ -13133,7 +13086,7 @@
/// location.
///
/// Each element is a field number or an index. They form a path from
- /// the root FileDescriptorProto to the place where the definition occurs.
+ /// the root FileDescriptorProto to the place where the definition appears.
/// For example, this path:
/// [ 4, 3, 2, 7, 1 ]
/// refers to:
diff --git a/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs b/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs
index 387f158..0815d5f 100644
--- a/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs
+++ b/csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs
@@ -13,378 +13,363 @@
using System.Runtime.CompilerServices;
using Google.Protobuf.Compatibility;
-namespace Google.Protobuf.Reflection
-{
- /// <summary>
- /// The methods in this class are somewhat evil, and should not be tampered with lightly.
- /// Basically they allow the creation of relatively weakly typed delegates from MethodInfos
- /// which are more strongly typed. They do this by creating an appropriate strongly typed
- /// delegate from the MethodInfo, and then calling that within an anonymous method.
- /// Mind-bending stuff (at least to your humble narrator) but the resulting delegates are
- /// very fast compared with calling Invoke later on.
- /// </summary>
- internal static class ReflectionUtil
- {
- static ReflectionUtil()
- {
- ForceInitialize<string>(); // Handles all reference types
- ForceInitialize<int>();
- ForceInitialize<long>();
- ForceInitialize<uint>();
- ForceInitialize<ulong>();
- ForceInitialize<float>();
- ForceInitialize<double>();
- ForceInitialize<bool>();
- ForceInitialize<int?>();
- ForceInitialize<long?>();
- ForceInitialize<uint?>();
- ForceInitialize<ulong?>();
- ForceInitialize<float?>();
- ForceInitialize<double?>();
- ForceInitialize<bool?>();
- ForceInitialize<SampleEnum>();
- SampleEnumMethod();
- }
-
- internal static void ForceInitialize<T>() => new ReflectionHelper<IMessage, T>();
-
- /// <summary>
- /// Empty Type[] used when calling GetProperty to force property instead of indexer fetching.
- /// </summary>
- internal static readonly Type[] EmptyTypes = new Type[0];
-
- /// <summary>
- /// Creates a delegate which will cast the argument to the type that declares the method,
- /// call the method on it, then convert the result to object.
- /// </summary>
- /// <param name="method">The method to create a delegate for, which must be declared in an IMessage
- /// implementation.</param>
- internal static Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method) =>
- GetReflectionHelper(method.DeclaringType, method.ReturnType).CreateFuncIMessageObject(method);
-
- /// <summary>
- /// Creates a delegate which will cast the argument to the type that declares the method,
- /// call the method on it, then convert the result to the specified type. The method is expected
- /// to actually return an enum (because of where we're calling it - for oneof cases). Sometimes that
- /// means we need some extra work to perform conversions.
- /// </summary>
- /// <param name="method">The method to create a delegate for, which must be declared in an IMessage
- /// implementation.</param>
- internal static Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method) =>
- GetReflectionHelper(method.DeclaringType, method.ReturnType).CreateFuncIMessageInt32(method);
-
- /// <summary>
- /// Creates a delegate which will execute the given method after casting the first argument to
- /// the type that declares the method, and the second argument to the first parameter type of the method.
- /// </summary>
- /// <param name="method">The method to create a delegate for, which must be declared in an IMessage
- /// implementation.</param>
- internal static Action<IMessage, object> CreateActionIMessageObject(MethodInfo method) =>
- GetReflectionHelper(method.DeclaringType, method.GetParameters()[0].ParameterType).CreateActionIMessageObject(method);
-
- /// <summary>
- /// Creates a delegate which will execute the given method after casting the first argument to
- /// type that declares the method.
- /// </summary>
- /// <param name="method">The method to create a delegate for, which must be declared in an IMessage
- /// implementation.</param>
- internal static Action<IMessage> CreateActionIMessage(MethodInfo method) =>
- GetReflectionHelper(method.DeclaringType, typeof(object)).CreateActionIMessage(method);
-
- internal static Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method) =>
- GetReflectionHelper(method.DeclaringType, method.ReturnType).CreateFuncIMessageBool(method);
-
- [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Type parameter members are preserved with DynamicallyAccessedMembers on GeneratedClrTypeInfo.ctor clrType parameter.")]
- [UnconditionalSuppressMessage("AotAnalysis", "IL3050:RequiresDynamicCode", Justification = "Type definition is explicitly specified and type argument is always a message type.")]
- internal static Func<IMessage, bool> CreateIsInitializedCaller([DynamicallyAccessedMembers(GeneratedClrTypeInfo.MessageAccessibility)]Type msg) =>
- ((IExtensionSetReflector)Activator.CreateInstance(typeof(ExtensionSetReflector<>).MakeGenericType(msg))).CreateIsInitializedCaller();
-
- /// <summary>
- /// Creates a delegate which will execute the given method after casting the first argument to
- /// the type that declares the method, and the second argument to the first parameter type of the method.
- /// </summary>
- [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Type parameter members are preserved with DynamicallyAccessedMembers on GeneratedClrTypeInfo.ctor clrType parameter.")]
- internal static IExtensionReflectionHelper CreateExtensionHelper(Extension extension)
- {
-#if NET5_0_OR_GREATER
- if (!RuntimeFeature.IsDynamicCodeSupported)
- {
- // Using extensions with reflection is not supported with AOT.
- // This helper is created when descriptors are populated. Delay throwing error until an app
- // uses IFieldAccessor with an extension field.
- return new AotExtensionReflectionHelper();
- }
-#endif
-
- var t1 = extension.TargetType;
- var t3 = extension.GetType().GenericTypeArguments[1];
- return (IExtensionReflectionHelper) Activator.CreateInstance(typeof(ExtensionReflectionHelper<,>).MakeGenericType(t1, t3), extension);
- }
-
- /// <summary>
- /// Creates a reflection helper for the given type arguments. Currently these are created on demand
- /// rather than cached; this will be "busy" when initially loading a message's descriptor, but after that
- /// they can be garbage collected. We could cache them by type if that proves to be important, but creating
- /// an object is pretty cheap.
- /// </summary>
- [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Type parameter members are preserved with DynamicallyAccessedMembers on GeneratedClrTypeInfo.ctor clrType parameter.")]
- private static IReflectionHelper GetReflectionHelper(Type t1, Type t2)
- {
-#if NET5_0_OR_GREATER
- if (!RuntimeFeature.IsDynamicCodeSupported)
- {
- return new AotReflectionHelper();
- }
-#endif
-
- return (IReflectionHelper) Activator.CreateInstance(typeof(ReflectionHelper<,>).MakeGenericType(t1, t2));
- }
-
- // Non-generic interface allowing us to use an instance of ReflectionHelper<T1, T2> without statically
- // knowing the types involved.
- private interface IReflectionHelper
- {
- Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method);
- Action<IMessage> CreateActionIMessage(MethodInfo method);
- Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method);
- Action<IMessage, object> CreateActionIMessageObject(MethodInfo method);
- Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method);
- }
-
- internal interface IExtensionReflectionHelper
- {
- object GetExtension(IMessage message);
- void SetExtension(IMessage message, object value);
- bool HasExtension(IMessage message);
- void ClearExtension(IMessage message);
- }
-
- private interface IExtensionSetReflector
- {
- Func<IMessage, bool> CreateIsInitializedCaller();
- }
-
- private sealed class ReflectionHelper<T1, T2> : IReflectionHelper
- {
- public Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method)
- {
- // On pleasant runtimes, we can create a Func<int> from a method returning
- // an enum based on an int. That's the fast path.
- if (CanConvertEnumFuncToInt32Func)
- {
- var del = (Func<T1, int>) method.CreateDelegate(typeof(Func<T1, int>));
- return message => del((T1) message);
- }
- else
- {
- // On some runtimes (e.g. old Mono) the return type has to be exactly correct,
- // so we go via boxing. Reflection is already fairly inefficient, and this is
- // only used for one-of case checking, fortunately.
- var del = (Func<T1, T2>) method.CreateDelegate(typeof(Func<T1, T2>));
- return message => (int) (object) del((T1) message);
- }
- }
-
- public Action<IMessage> CreateActionIMessage(MethodInfo method)
- {
- var del = (Action<T1>) method.CreateDelegate(typeof(Action<T1>));
- return message => del((T1) message);
- }
-
- public Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method)
- {
- var del = (Func<T1, T2>) method.CreateDelegate(typeof(Func<T1, T2>));
- return message => del((T1) message);
- }
-
- public Action<IMessage, object> CreateActionIMessageObject(MethodInfo method)
- {
- var del = (Action<T1, T2>) method.CreateDelegate(typeof(Action<T1, T2>));
- return (message, arg) => del((T1) message, (T2) arg);
- }
-
- public Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method)
- {
- var del = (Func<T1, bool>)method.CreateDelegate(typeof(Func<T1, bool>));
- return message => del((T1)message);
- }
- }
-
- private sealed class ExtensionReflectionHelper<T1, T3> : IExtensionReflectionHelper
- where T1 : IExtendableMessage<T1>
- {
- private readonly Extension extension;
-
- public ExtensionReflectionHelper(Extension extension)
- {
- this.extension = extension;
- }
-
- public object GetExtension(IMessage message)
- {
- if (message is not T1 extensionMessage)
- {
- throw new InvalidCastException("Cannot access extension on message that isn't IExtensionMessage");
- }
-
- if (extension is Extension<T1, T3> ext13)
- {
- return extensionMessage.GetExtension(ext13);
- }
- else if (extension is RepeatedExtension<T1, T3> repeatedExt13)
- {
- return extensionMessage.GetOrInitializeExtension(repeatedExt13);
- }
- else
- {
- throw new InvalidCastException("The provided extension is not a valid extension identifier type");
- }
- }
-
- public bool HasExtension(IMessage message)
- {
- if (message is not T1 extensionMessage)
- {
- throw new InvalidCastException("Cannot access extension on message that isn't IExtensionMessage");
- }
-
- if (extension is Extension<T1, T3> ext13)
- {
- return extensionMessage.HasExtension(ext13);
- }
- else if (extension is RepeatedExtension<T1, T3>)
- {
- throw new InvalidOperationException("HasValue is not implemented for repeated extensions");
- }
- else
- {
- throw new InvalidCastException("The provided extension is not a valid extension identifier type");
- }
- }
-
- public void SetExtension(IMessage message, object value)
- {
- if (message is not T1 extensionMessage)
- {
- throw new InvalidCastException("Cannot access extension on message that isn't IExtensionMessage");
- }
-
- if (extension is Extension<T1, T3> ext13)
- {
- extensionMessage.SetExtension(ext13, (T3)value);
- }
- else if (extension is RepeatedExtension<T1, T3>)
- {
- throw new InvalidOperationException("SetValue is not implemented for repeated extensions");
- }
- else
- {
- throw new InvalidCastException("The provided extension is not a valid extension identifier type");
- }
- }
-
- public void ClearExtension(IMessage message)
- {
- if (message is not T1 extensionMessage)
- {
- throw new InvalidCastException("Cannot access extension on message that isn't IExtensionMessage");
- }
-
- if (extension is Extension<T1, T3> ext13)
- {
- extensionMessage.ClearExtension(ext13);
- }
- else if (extension is RepeatedExtension<T1, T3> repeatedExt13)
- {
- extensionMessage.GetExtension(repeatedExt13).Clear();
- }
- else
- {
- throw new InvalidCastException("The provided extension is not a valid extension identifier type");
- }
- }
- }
-
-#if NET5_0_OR_GREATER
- /// <summary>
- /// This helper is compatible with .NET Native AOT.
- /// MakeGenericType doesn't work when a type argument is a value type in AOT.
- /// MethodInfo.Invoke is used instead of compiled expressions because it's faster in AOT.
- /// </summary>
- private sealed class AotReflectionHelper : IReflectionHelper
- {
- private static readonly object[] EmptyObjectArray = new object[0];
- public Action<IMessage> CreateActionIMessage(MethodInfo method) => message => method.Invoke(message, EmptyObjectArray);
- public Action<IMessage, object> CreateActionIMessageObject(MethodInfo method) => (message, arg) => method.Invoke(message, new object[] { arg });
- public Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method) => message => (bool) method.Invoke(message, EmptyObjectArray);
- public Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method) => message => (int) method.Invoke(message, EmptyObjectArray);
- public Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method) => message => method.Invoke(message, EmptyObjectArray);
- }
-
- /// <summary>
- /// Reflection with extensions isn't supported because IExtendableMessage members are used to get values.
- /// Can't use reflection to invoke those methods because they have a generic argument.
- /// MakeGenericMethod can't be used because it will break whenever the extension type is a value type.
- /// This could be made to work if there were non-generic methods available for getting and setting extension values.
- /// </summary>
- private sealed class AotExtensionReflectionHelper : IExtensionReflectionHelper
- {
- private const string Message = "Extensions reflection is not supported with AOT.";
- public object GetExtension(IMessage message) => throw new NotSupportedException(Message);
- public bool HasExtension(IMessage message) => throw new NotSupportedException(Message);
- public void SetExtension(IMessage message, object value) => throw new NotSupportedException(Message);
- public void ClearExtension(IMessage message) => throw new NotSupportedException(Message);
- }
-#endif
-
- private sealed class ExtensionSetReflector<
- [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
- T1> : IExtensionSetReflector where T1 : IExtendableMessage<T1>
- {
- public Func<IMessage, bool> CreateIsInitializedCaller()
- {
- var prop = typeof(T1).GetTypeInfo().GetDeclaredProperty("_Extensions");
- var getFunc = (Func<T1, ExtensionSet<T1>>)prop.GetMethod.CreateDelegate(typeof(Func<T1, ExtensionSet<T1>>));
- var initializedFunc = (Func<ExtensionSet<T1>, bool>)
- typeof(ExtensionSet<T1>)
- .GetTypeInfo()
- .GetDeclaredMethod("IsInitialized")
- .CreateDelegate(typeof(Func<ExtensionSet<T1>, bool>));
- return (m) => {
- var set = getFunc((T1)m);
- return set == null || initializedFunc(set);
- };
- }
- }
-
- // Runtime compatibility checking code - see ReflectionHelper<T1, T2>.CreateFuncIMessageInt32 for
- // details about why we're doing this.
-
- // Deliberately not inside the generic type. We only want to check this once.
- private static bool CanConvertEnumFuncToInt32Func { get; } = CheckCanConvertEnumFuncToInt32Func();
-
- private static bool CheckCanConvertEnumFuncToInt32Func()
- {
- try
- {
- // Try to do the conversion using reflection, so we can see whether it's supported.
- MethodInfo method = typeof(ReflectionUtil).GetMethod(nameof(SampleEnumMethod));
- // If this passes, we're in a reasonable runtime.
- method.CreateDelegate(typeof(Func<int>));
- return true;
- }
- catch (ArgumentException)
- {
- return false;
- }
- }
-
- public enum SampleEnum
- {
- X
- }
-
- // Public to make the reflection simpler.
- public static SampleEnum SampleEnumMethod() => SampleEnum.X;
+namespace Google.Protobuf.Reflection {
+ /// <summary>
+ /// The methods in this class are somewhat evil, and should not be tampered with lightly.
+ /// Basically they allow the creation of relatively weakly typed delegates from MethodInfos
+ /// which are more strongly typed. They do this by creating an appropriate strongly typed
+ /// delegate from the MethodInfo, and then calling that within an anonymous method.
+ /// Mind-bending stuff (at least to your humble narrator) but the resulting delegates are
+ /// very fast compared with calling Invoke later on.
+ /// </summary>
+ internal static class ReflectionUtil {
+ static ReflectionUtil() {
+ ForceInitialize<string>(); // Handles all reference types
+ ForceInitialize<int>();
+ ForceInitialize<long>();
+ ForceInitialize<uint>();
+ ForceInitialize<ulong>();
+ ForceInitialize<float>();
+ ForceInitialize<double>();
+ ForceInitialize<bool>();
+ ForceInitialize < int ? > ();
+ ForceInitialize < long ? > ();
+ ForceInitialize < uint ? > ();
+ ForceInitialize < ulong ? > ();
+ ForceInitialize < float ? > ();
+ ForceInitialize < double ? > ();
+ ForceInitialize < bool ? > ();
+ ForceInitialize<SampleEnum>();
+ SampleEnumMethod();
}
+
+ internal static void ForceInitialize<T>() => new ReflectionHelper<IMessage, T>();
+
+ /// <summary>
+ /// Empty Type[] used when calling GetProperty to force property instead of indexer fetching.
+ /// </summary>
+ internal static readonly Type[] EmptyTypes = new Type[0];
+
+ /// <summary>
+ /// Creates a delegate which will cast the argument to the type that declares the method,
+ /// call the method on it, then convert the result to object.
+ /// </summary>
+ /// <param name="method">The method to create a delegate for, which must be declared in an
+ /// IMessage implementation.</param>
+ internal static Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method) =>
+ GetReflectionHelper(method.DeclaringType, method.ReturnType)
+ .CreateFuncIMessageObject(method);
+
+ /// <summary>
+ /// Creates a delegate which will cast the argument to the type that declares the method,
+ /// call the method on it, then convert the result to the specified type. The method is expected
+ /// to actually return an enum (because of where we're calling it - for oneof cases). Sometimes
+ /// that means we need some extra work to perform conversions.
+ /// </summary>
+ /// <param name="method">The method to create a delegate for, which must be declared in an
+ /// IMessage implementation.</param>
+ internal static Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method) =>
+ GetReflectionHelper(method.DeclaringType, method.ReturnType)
+ .CreateFuncIMessageInt32(method);
+
+ /// <summary>
+ /// Creates a delegate which will execute the given method after casting the first argument to
+ /// the type that declares the method, and the second argument to the first parameter type of
+ /// the method.
+ /// </summary>
+ /// <param name="method">The method to create a delegate for, which must be declared in an
+ /// IMessage implementation.</param>
+ internal static Action<IMessage, object> CreateActionIMessageObject(MethodInfo method) =>
+ GetReflectionHelper(method.DeclaringType, method.GetParameters()[0].ParameterType)
+ .CreateActionIMessageObject(method);
+
+ /// <summary>
+ /// Creates a delegate which will execute the given method after casting the first argument to
+ /// type that declares the method.
+ /// </summary>
+ /// <param name="method">The method to create a delegate for, which must be declared in an
+ /// IMessage implementation.</param>
+ internal static Action<IMessage> CreateActionIMessage(MethodInfo method) =>
+ GetReflectionHelper(method.DeclaringType, typeof(object)).CreateActionIMessage(method);
+
+ internal static Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method) =>
+ GetReflectionHelper(method.DeclaringType, method.ReturnType).CreateFuncIMessageBool(method);
+
+ [UnconditionalSuppressMessage(
+ "Trimming", "IL2026",
+ Justification =
+ "Type parameter members are preserved with DynamicallyAccessedMembers on GeneratedClrTypeInfo.ctor clrType parameter.")]
+ [UnconditionalSuppressMessage(
+ "AotAnalysis", "IL3050:RequiresDynamicCode",
+ Justification =
+ "Type definition is explicitly specified and type argument is always a message type.")]
+ internal static Func<IMessage, bool> CreateIsInitializedCaller([
+ DynamicallyAccessedMembers(GeneratedClrTypeInfo.MessageAccessibility)
+ ] Type msg) => ((IExtensionSetReflector)Activator
+ .CreateInstance(typeof(ExtensionSetReflector<>).MakeGenericType(msg)))
+ .CreateIsInitializedCaller();
+
+ /// <summary>
+ /// Creates a delegate which will execute the given method after casting the first argument to
+ /// the type that declares the method, and the second argument to the first parameter type of
+ /// the method.
+ /// </summary>
+ [UnconditionalSuppressMessage(
+ "Trimming", "IL2026",
+ Justification =
+ "Type parameter members are preserved with DynamicallyAccessedMembers on GeneratedClrTypeInfo.ctor clrType parameter.")]
+ [UnconditionalSuppressMessage("AOT", "IL3050",
+ Justification = "Dynamic code won't call Type.MakeGenericType.")]
+ internal static IExtensionReflectionHelper CreateExtensionHelper(Extension extension) {
+#if NET5_0_OR_GREATER
+ if (!RuntimeFeature.IsDynamicCodeSupported) {
+ // Using extensions with reflection is not supported with AOT.
+ // This helper is created when descriptors are populated. Delay throwing error until an app
+ // uses IFieldAccessor with an extension field.
+ return new AotExtensionReflectionHelper();
+ }
+#endif
+
+ var t1 = extension.TargetType;
+ var t3 = extension.GetType().GenericTypeArguments[1];
+ return (IExtensionReflectionHelper)Activator.CreateInstance(
+ typeof(ExtensionReflectionHelper<, >).MakeGenericType(t1, t3), extension);
+ }
+
+ /// <summary>
+ /// Creates a reflection helper for the given type arguments. Currently these are created on
+ /// demand rather than cached; this will be "busy" when initially loading a message's
+ /// descriptor, but after that they can be garbage collected. We could cache them by type if
+ /// that proves to be important, but creating an object is pretty cheap.
+ /// </summary>
+ [UnconditionalSuppressMessage(
+ "Trimming", "IL2026",
+ Justification =
+ "Type parameter members are preserved with DynamicallyAccessedMembers on GeneratedClrTypeInfo.ctor clrType parameter.")]
+ [UnconditionalSuppressMessage("AOT", "IL3050",
+ Justification = "Dynamic code won't call Type.MakeGenericType.")]
+ private static IReflectionHelper GetReflectionHelper(Type t1, Type t2) {
+#if NET5_0_OR_GREATER
+ if (!RuntimeFeature.IsDynamicCodeSupported) {
+ return new AotReflectionHelper();
+ }
+#endif
+
+ return (IReflectionHelper)Activator.CreateInstance(
+ typeof(ReflectionHelper<, >).MakeGenericType(t1, t2));
+ }
+
+ // Non-generic interface allowing us to use an instance of ReflectionHelper<T1, T2> without
+ // statically knowing the types involved.
+ private interface IReflectionHelper {
+ Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method);
+ Action<IMessage> CreateActionIMessage(MethodInfo method);
+ Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method);
+ Action<IMessage, object> CreateActionIMessageObject(MethodInfo method);
+ Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method);
+ }
+
+ internal interface IExtensionReflectionHelper {
+ object GetExtension(IMessage message);
+ void SetExtension(IMessage message, object value);
+ bool HasExtension(IMessage message);
+ void ClearExtension(IMessage message);
+ }
+
+ private interface IExtensionSetReflector {
+ Func<IMessage, bool> CreateIsInitializedCaller();
+ }
+
+ private sealed class ReflectionHelper<T1, T2> : IReflectionHelper {
+ public Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method) {
+ // On pleasant runtimes, we can create a Func<int> from a method returning
+ // an enum based on an int. That's the fast path.
+ if (CanConvertEnumFuncToInt32Func) {
+ var del = (Func<T1, int>)method.CreateDelegate(typeof(Func<T1, int>));
+ return message => del((T1)message);
+ } else {
+ // On some runtimes (e.g. old Mono) the return type has to be exactly correct,
+ // so we go via boxing. Reflection is already fairly inefficient, and this is
+ // only used for one-of case checking, fortunately.
+ var del = (Func<T1, T2>)method.CreateDelegate(typeof(Func<T1, T2>));
+ return message => (int)(object)del((T1)message);
+ }
+ }
+
+ public Action<IMessage> CreateActionIMessage(MethodInfo method) {
+ var del = (Action<T1>)method.CreateDelegate(typeof(Action<T1>));
+ return message => del((T1)message);
+ }
+
+ public Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method) {
+ var del = (Func<T1, T2>)method.CreateDelegate(typeof(Func<T1, T2>));
+ return message => del((T1)message);
+ }
+
+ public Action<IMessage, object> CreateActionIMessageObject(MethodInfo method) {
+ var del = (Action<T1, T2>)method.CreateDelegate(typeof(Action<T1, T2>));
+ return (message, arg) => del((T1)message, (T2)arg);
+ }
+
+ public Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method) {
+ var del = (Func<T1, bool>)method.CreateDelegate(typeof(Func<T1, bool>));
+ return message => del((T1)message);
+ }
+ }
+
+ private sealed class ExtensionReflectionHelper<T1, T3> : IExtensionReflectionHelper
+ where T1 : IExtendableMessage<T1> {
+ private readonly Extension extension;
+
+ public ExtensionReflectionHelper(Extension extension) {
+ this.extension = extension;
+ }
+
+ public object GetExtension(IMessage message) {
+ if (message is not T1 extensionMessage) {
+ throw new InvalidCastException(
+ "Cannot access extension on message that isn't IExtensionMessage");
+ }
+
+ if (extension is Extension<T1, T3> ext13) {
+ return extensionMessage.GetExtension(ext13);
+ } else if (extension is RepeatedExtension<T1, T3> repeatedExt13) {
+ return extensionMessage.GetOrInitializeExtension(repeatedExt13);
+ } else {
+ throw new InvalidCastException(
+ "The provided extension is not a valid extension identifier type");
+ }
+ }
+
+ public bool HasExtension(IMessage message) {
+ if (message is not T1 extensionMessage) {
+ throw new InvalidCastException(
+ "Cannot access extension on message that isn't IExtensionMessage");
+ }
+
+ if (extension is Extension<T1, T3> ext13) {
+ return extensionMessage.HasExtension(ext13);
+ } else if (extension is RepeatedExtension<T1, T3>) {
+ throw new InvalidOperationException(
+ "HasValue is not implemented for repeated extensions");
+ } else {
+ throw new InvalidCastException(
+ "The provided extension is not a valid extension identifier type");
+ }
+ }
+
+ public void SetExtension(IMessage message, object value) {
+ if (message is not T1 extensionMessage) {
+ throw new InvalidCastException(
+ "Cannot access extension on message that isn't IExtensionMessage");
+ }
+
+ if (extension is Extension<T1, T3> ext13) {
+ extensionMessage.SetExtension(ext13, (T3)value);
+ } else if (extension is RepeatedExtension<T1, T3>) {
+ throw new InvalidOperationException(
+ "SetValue is not implemented for repeated extensions");
+ } else {
+ throw new InvalidCastException(
+ "The provided extension is not a valid extension identifier type");
+ }
+ }
+
+ public void ClearExtension(IMessage message) {
+ if (message is not T1 extensionMessage) {
+ throw new InvalidCastException(
+ "Cannot access extension on message that isn't IExtensionMessage");
+ }
+
+ if (extension is Extension<T1, T3> ext13) {
+ extensionMessage.ClearExtension(ext13);
+ } else if (extension is RepeatedExtension<T1, T3> repeatedExt13) {
+ extensionMessage.GetExtension(repeatedExt13).Clear();
+ } else {
+ throw new InvalidCastException(
+ "The provided extension is not a valid extension identifier type");
+ }
+ }
+ }
+
+#if NET5_0_OR_GREATER
+ /// <summary>
+ /// This helper is compatible with .NET Native AOT.
+ /// MakeGenericType doesn't work when a type argument is a value type in AOT.
+ /// MethodInfo.Invoke is used instead of compiled expressions because it's faster in AOT.
+ /// </summary>
+ private sealed class AotReflectionHelper : IReflectionHelper {
+ private static readonly object[] EmptyObjectArray = new object[0];
+ public Action<IMessage> CreateActionIMessage(MethodInfo method) => message =>
+ method.Invoke(message, EmptyObjectArray);
+ public Action<IMessage, object> CreateActionIMessageObject(MethodInfo method) =>
+ (message, arg) => method.Invoke(message, new object[] { arg });
+ public Func<IMessage, bool> CreateFuncIMessageBool(MethodInfo method) => message =>
+ (bool)method.Invoke(message, EmptyObjectArray);
+ public Func<IMessage, int> CreateFuncIMessageInt32(MethodInfo method) => message =>
+ (int)method.Invoke(message, EmptyObjectArray);
+ public Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method) => message =>
+ method.Invoke(message, EmptyObjectArray);
+ }
+
+ /// <summary>
+ /// Reflection with extensions isn't supported because IExtendableMessage members are used to
+ /// get values. Can't use reflection to invoke those methods because they have a generic
+ /// argument. MakeGenericMethod can't be used because it will break whenever the extension type
+ /// is a value type. This could be made to work if there were non-generic methods available for
+ /// getting and setting extension values.
+ /// </summary>
+ private sealed class AotExtensionReflectionHelper : IExtensionReflectionHelper {
+ private const string Message = "Extensions reflection is not supported with AOT.";
+ public object GetExtension(IMessage message) => throw new NotSupportedException(Message);
+ public bool HasExtension(IMessage message) => throw new NotSupportedException(Message);
+ public void SetExtension(IMessage message,
+ object value) => throw new NotSupportedException(Message);
+ public void ClearExtension(IMessage message) => throw new NotSupportedException(Message);
+ }
+#endif
+
+ private sealed class ExtensionSetReflector<[DynamicallyAccessedMembers(
+ DynamicallyAccessedMemberTypes.PublicProperties |
+ DynamicallyAccessedMemberTypes.NonPublicProperties)] T1> : IExtensionSetReflector
+ where T1 : IExtendableMessage<T1> {
+ public Func<IMessage, bool> CreateIsInitializedCaller() {
+ var prop = typeof(T1).GetTypeInfo().GetDeclaredProperty("_Extensions");
+ var getFunc = (Func<T1, ExtensionSet<T1>>)prop.GetMethod.CreateDelegate(
+ typeof(Func<T1, ExtensionSet<T1>>));
+ var initializedFunc = (Func<ExtensionSet<T1>, bool>)typeof(ExtensionSet<T1>)
+ .GetTypeInfo()
+ .GetDeclaredMethod("IsInitialized")
+ .CreateDelegate(typeof(Func<ExtensionSet<T1>, bool>));
+ return (m) => {
+ var set = getFunc((T1)m);
+ return set == null || initializedFunc(set);
+ };
+ }
+ }
+
+ // Runtime compatibility checking code - see ReflectionHelper<T1, T2>.CreateFuncIMessageInt32
+ // for details about why we're doing this.
+
+ // Deliberately not inside the generic type. We only want to check this once.
+ private static bool CanConvertEnumFuncToInt32Func { get; } =
+ CheckCanConvertEnumFuncToInt32Func();
+
+ private static bool CheckCanConvertEnumFuncToInt32Func() {
+ try {
+ // Try to do the conversion using reflection, so we can see whether it's supported.
+ MethodInfo method = typeof(ReflectionUtil).GetMethod(nameof(SampleEnumMethod));
+ // If this passes, we're in a reasonable runtime.
+ method.CreateDelegate(typeof(Func<int>));
+ return true;
+ } catch (ArgumentException) {
+ return false;
+ }
+ }
+
+ public enum SampleEnum { X }
+
+ // Public to make the reflection simpler.
+ public static SampleEnum SampleEnumMethod() => SampleEnum.X;
+ }
}
diff --git a/docs/design/prototiller/prototiller-reqs-for-editions.md b/docs/design/prototiller/prototiller-reqs-for-editions.md
new file mode 100644
index 0000000..4850329
--- /dev/null
+++ b/docs/design/prototiller/prototiller-reqs-for-editions.md
@@ -0,0 +1,138 @@
+# Prototiller Requirements for Editions
+
+**Author:** [@mcy](https://github.com/mcy)
+
+**Approved:** 2022-11-29
+
+## Background
+
+Prototiller is Protobuf's new mass refactoring Swiss army knife, similar to
+Buildozer. We plan to use Prototiller to enable LSCs within google3 and to allow
+users (internal and external) to modify `.proto` files safely.
+
+Prototiller is being developed as part of the
+[Editions](../editions/what-are-protobuf-editions.md) project, and will
+prioritize enabling Editions-related refactorings to unblock Editions migrations
+in 2023. This document describes the relevant requirements.
+
+## Overview
+
+*Protochangifier Semantic Actions* (not available externally) describes the
+original design for the Prototiller interface; it would consume a Protobuf
+message that described changes to apply to a `.proto` file passed as input. In
+this document, we prescribe a variant of this interface that fulfills *only* the
+needs of Editions, while remaining extensible for future change actions.
+
+Broad requirements are as follows:
+
+* Actions must include the following Editions-oriented upgrade workflows:
+ * Upgrade a file to a particular edition, regardless of whether it's in
+ syntax mode or editions mode, updating features in such a way to be a
+ no-op. **This is the highest-priority workflow.**
+ * "Clean up" features in a particular file: i.e., run a simple algorithm
+ to determine the smallest set of features that need to be present at
+ each level of the file.
+ * Modify features from a particular syntax element.
+* Actions must be both specific to particular syntax elements (for when change
+ specs are checked in alongside `.proto` files by Schema Consumers), and
+ generic (so that a single change spec or set of change specs can power a
+ large-scale change).
+
+In this document we provide a recommendation for a Protobuf schema based on the
+original Protochangifier design, but geared towards these specific needs.
+
+This is only a recommendation; the Prototiller project owners should modify this
+to suit the implementation; only the requirements in this document are binding,
+and the schema is merely an illustration of those requirements.
+
+The suggested schema is as follows.
+
+```
+syntax = "proto2";
+
+package prototiller;
+
+// This is the proto that Prototiller accepts as input.
+message ChangeSpec {
+ // Actions to execute on the file.
+ repeated Action actions = 1;
+
+ // Some changes may result in a wireformat break; changing field type is
+ // usually unsafe. By default, Prototiller does not allow such changes,
+ // users can set allow_unsafe_wire_format_changes to true to force the change.
+ optional bool allow_unsafe_wire_format_changes = 2 [default = false];
+ optional bool allow_unsafe_text_format_changes = 3 [default = false];
+ optional bool allow_unsafe_json_format_changes = 4 [default = false];
+}
+
+// A single action. See messages below for description of their
+// semantics.
+message Action {
+ oneof kind {
+ UpgradeEdition upgrade_edition = 20;
+ CleanUpFeatures clean_up_features = 21;
+ ModifyFeature modify_feature = 22;
+ }
+}
+
+// Upgrades the edition of a file to a specified edition.
+// Treats syntax mode as being a weird, special edition that cannot be
+// upgraded to.
+//
+// This action is always safe.
+message UpgradeEdition {
+ // The edition to upgrade to.
+ optional string edition = 1;
+}
+
+// Cleans up features in a file, such that there are as few explicitly set
+// features as necessary.
+//
+// This action is always safe.
+message CleanUpFeatures {}
+
+// Modifies a specific feature on all syntax elements that match and which can
+// host that particular feature.
+//
+// Prototiller must be aware of which changes affect wire format, so that it
+// can flag them as unsafe.
+message ModifyFeature {
+ // The name of the feature to modify.
+ repeated proto2.UninterpretedOption.NamePart feature = 1;
+
+ // A pattern for matching paths to syntax elements to modify.
+ //
+ // Elements of this field can either be identifiers, or the string "*", which
+ // matches all identifiers. Thus, ["foo", "Bar"] matches the message foo.Bar,
+ // ["foo", "Bar", "*"] matches all fields and nested types of foo.Bar
+ // (recursively), and ["*"] matches all elements of a file.
+ repeated string path_pattern = 2;
+
+ // The value to set the feature to. If not set, this means that the
+ // feature should be deleted.
+ oneof value {
+ int64 int_value = 20;
+ double double_value = 21;
+ // ... and so on.
+ }
+}
+```
+
+## Alternatives Considered
+
+This document does not capture a design so much as requirements that a design
+must satisfy, so we will be brief on potential alternatives to the requirements,
+and why we decided against them.
+
+* Omit feature cleanup as its own action, and let it happen implicitly as part
+ of other actions.
+ * It is desirable to be able to aggressively run this operation
+ everywhere, potentially even as part of "format on save" in Cider and
+ other IDEs.
+* Make `ModifyFeature` operate on all syntax elements of a file
+ simultaneously.
+ * `ModifyFeature` is intended so that SchemaConsumers can affect
+ fine-grained control of features in `.proto` files they import. Users
+ will want to be able to wipe out a feature from all fields in a file, or
+ perhaps just on a handful of fields they care about. Offering simple
+ pattern-matching supports both.
diff --git a/java/core/BUILD.bazel b/java/core/BUILD.bazel
index b896c42..4168a54 100644
--- a/java/core/BUILD.bazel
+++ b/java/core/BUILD.bazel
@@ -2,10 +2,10 @@
load("@rules_java//java:defs.bzl", "java_lite_proto_library", "java_proto_library")
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
-load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_java_library", "protobuf_versioned_java_library")
-load("//conformance:defs.bzl", "conformance_test")
load("//:protobuf.bzl", "internal_gen_well_known_protos_java")
load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
+load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_java_library", "protobuf_versioned_java_library")
+load("//conformance:defs.bzl", "conformance_test")
load("//java/internal:testing.bzl", "junit_tests")
LITE_SRCS = [
@@ -85,6 +85,7 @@
"src/main/java/com/google/protobuf/RawMessageInfo.java",
"src/main/java/com/google/protobuf/Reader.java",
"src/main/java/com/google/protobuf/RopeByteString.java",
+ "src/main/java/com/google/protobuf/RuntimeVersion.java",
"src/main/java/com/google/protobuf/Schema.java",
"src/main/java/com/google/protobuf/SchemaFactory.java",
"src/main/java/com/google/protobuf/SchemaUtil.java",
@@ -472,6 +473,7 @@
"src/test/java/com/google/protobuf/FieldPresenceTest.java",
"src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java",
"src/test/java/com/google/protobuf/GeneratedMessageTest.java",
+ "src/test/java/com/google/protobuf/LazilyParsedMessageSetTest.java",
"src/test/java/com/google/protobuf/LazyFieldTest.java",
"src/test/java/com/google/protobuf/LazyStringEndToEndTest.java",
"src/test/java/com/google/protobuf/MapForProto2Test.java",
@@ -485,6 +487,7 @@
"src/test/java/com/google/protobuf/Proto2SchemaTest.java",
"src/test/java/com/google/protobuf/Proto2UnknownEnumValueTest.java",
"src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java",
+ "src/test/java/com/google/protobuf/RuntimeVersionTest.java",
"src/test/java/com/google/protobuf/ServiceTest.java",
"src/test/java/com/google/protobuf/SingleFieldBuilderV3Test.java",
"src/test/java/com/google/protobuf/TestBadIdentifiers.java",
diff --git a/java/core/src/main/java/com/google/protobuf/AbstractMessage.java b/java/core/src/main/java/com/google/protobuf/AbstractMessage.java
index f383625..30eccc1 100644
--- a/java/core/src/main/java/com/google/protobuf/AbstractMessage.java
+++ b/java/core/src/main/java/com/google/protobuf/AbstractMessage.java
@@ -538,44 +538,4 @@
return (BuilderType) super.mergeFrom(input, extensionRegistry);
}
}
-
- /**
- * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1
- * generated code.
- */
- @Deprecated
- protected static int hashLong(long n) {
- return (int) (n ^ (n >>> 32));
- }
-
- /**
- * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1
- * generated code.
- */
- @Deprecated
- protected static int hashBoolean(boolean b) {
- return b ? 1231 : 1237;
- }
-
- /**
- * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1
- * generated code.
- */
- @Deprecated
- protected static int hashEnum(EnumLite e) {
- return e.getNumber();
- }
-
- /**
- * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1
- * generated code.
- */
- @Deprecated
- protected static int hashEnumList(List<? extends EnumLite> list) {
- int hash = 1;
- for (EnumLite e : list) {
- hash = 31 * hash + hashEnum(e);
- }
- return hash;
- }
}
diff --git a/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java b/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java
index 37bb44a..2c28536 100644
--- a/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java
+++ b/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java
@@ -40,7 +40,9 @@
/** Used to adapt to the experimental {@link Writer} interface. */
CodedOutputStreamWriter wrapper;
- /** @deprecated Use {@link #computeFixed32SizeNoTag(int)} instead. */
+ /**
+ * @deprecated Use {@link #computeFixed32SizeNoTag(int)} instead.
+ */
@Deprecated public static final int LITTLE_ENDIAN_32_SIZE = FIXED32_SIZE;
/** The buffer size used in {@link #newInstance(OutputStream)}. */
@@ -669,9 +671,8 @@
}
/**
- * Compute the number of bytes that would be needed to encode a lazily parsed MessageSet
- * extension field to the stream. For historical reasons, the wire format differs from normal
- * fields.
+ * Compute the number of bytes that would be needed to encode a lazily parsed MessageSet extension
+ * field to the stream. For historical reasons, the wire format differs from normal fields.
*/
public static int computeLazyFieldMessageSetExtensionSize(
final int fieldNumber, final LazyFieldLite value) {
@@ -692,29 +693,52 @@
* tag.
*/
public static int computeInt32SizeNoTag(final int value) {
- if (value >= 0) {
- return computeUInt32SizeNoTag(value);
- } else {
- // Must sign-extend.
- return MAX_VARINT_SIZE;
- }
+ return computeUInt64SizeNoTag((long) value);
}
/** Compute the number of bytes that would be needed to encode a {@code uint32} field. */
public static int computeUInt32SizeNoTag(final int value) {
- if ((value & (~0 << 7)) == 0) {
- return 1;
- }
- if ((value & (~0 << 14)) == 0) {
- return 2;
- }
- if ((value & (~0 << 21)) == 0) {
- return 3;
- }
- if ((value & (~0 << 28)) == 0) {
- return 4;
- }
- return 5;
+ /*
+ This code is ported from the C++ varint implementation.
+ Implementation notes:
+
+ To calcuate varint size, we want to count the number of 7 bit chunks required. Rather than using
+ division by 7 to accomplish this, we use multiplication by 9/64. This has a number of important
+ properties:
+ * It's roughly 1/7.111111. This makes the 0 bits set case have the same value as the 7 bits set
+ case, so offsetting by 1 gives us the correct value we want for integers up to 448 bits.
+ * Multiplying by 9 is special. x * 9 = x << 3 + x, and so this multiplication can be done by a
+ single shifted add on arm (add w0, w0, w0, lsl #3), or a single lea instruction
+ (leal (%rax,%rax,8), %eax)) on x86.
+ * Dividing by 64 is a 6 bit right shift.
+
+ An explicit non-sign-extended right shift is used instead of the more obvious '/ 64' because
+ that actually produces worse code on android arm64 at time of authoring because of sign
+ extension. Rather than
+ lsr w0, w0, #6
+ It would emit:
+ add w16, w0, #0x3f (63)
+ cmp w0, #0x0 (0)
+ csel w0, w16, w0, lt
+ asr w0, w0, #6
+
+ Summarized:
+ floor(((Integer.SIZE - clz) / 7.1111) + 1
+ ((Integer.SIZE - clz) * 9) / 64 + 1
+ (((Integer.SIZE - clz) * 9) >>> 6) + 1
+ ((Integer.SIZE - clz) * 9 + (1 << 6)) >>> 6
+ (Integer.SIZE * 9 + (1 << 6) - clz * 9) >>> 6
+ (352 - clz * 9) >>> 6
+ on arm:
+ (352 - clz - (clz << 3)) >>> 6
+ on x86:
+ (352 - lea(clz, clz, 8)) >>> 6
+
+ If you make changes here, please validate their compiled output on different architectures and
+ runtimes.
+ */
+ int clz = Integer.numberOfLeadingZeros(value);
+ return ((Integer.SIZE * 9 + (1 << 6)) - (clz * 9)) >>> 6;
}
/** Compute the number of bytes that would be needed to encode an {@code sint32} field. */
@@ -745,27 +769,9 @@
* tag.
*/
public static int computeUInt64SizeNoTag(long value) {
- // handle two popular special cases up front ...
- if ((value & (~0L << 7)) == 0L) {
- return 1;
- }
- if (value < 0L) {
- return 10;
- }
- // ... leaving us with 8 remaining, which we can divide and conquer
- int n = 2;
- if ((value & (~0L << 35)) != 0L) {
- n += 4;
- value >>>= 28;
- }
- if ((value & (~0L << 21)) != 0L) {
- n += 2;
- value >>>= 14;
- }
- if ((value & (~0L << 14)) != 0L) {
- n += 1;
- }
- return n;
+ int clz = Long.numberOfLeadingZeros(value);
+ // See computeUInt32SizeNoTag for explanation
+ return ((Long.SIZE * 9 + (1 << 6)) - (clz * 9)) >>> 6;
}
/** Compute the number of bytes that would be needed to encode an {@code sint64} field. */
@@ -1326,7 +1332,7 @@
buffer[position++] = (byte) value;
return;
} else {
- buffer[position++] = (byte) ((value & 0x7F) | 0x80);
+ buffer[position++] = (byte) ((value | 0x80) & 0xFF);
value >>>= 7;
}
}
@@ -1357,7 +1363,7 @@
UnsafeUtil.putByte(buffer, position++, (byte) value);
return;
} else {
- UnsafeUtil.putByte(buffer, position++, (byte) (((int) value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(buffer, position++, (byte) (((int) value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -1368,7 +1374,7 @@
buffer[position++] = (byte) value;
return;
} else {
- buffer[position++] = (byte) (((int) value & 0x7F) | 0x80);
+ buffer[position++] = (byte) (((int) value | 0x80) & 0xFF);
value >>>= 7;
}
}
@@ -1684,7 +1690,7 @@
buffer.put((byte) value);
return;
} else {
- buffer.put((byte) ((value & 0x7F) | 0x80));
+ buffer.put((byte) ((value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -1710,7 +1716,7 @@
buffer.put((byte) value);
return;
} else {
- buffer.put((byte) (((int) value & 0x7F) | 0x80));
+ buffer.put((byte) (((int) value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2015,7 +2021,7 @@
UnsafeUtil.putByte(position++, (byte) value);
return;
} else {
- UnsafeUtil.putByte(position++, (byte) ((value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(position++, (byte) ((value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2025,7 +2031,7 @@
UnsafeUtil.putByte(position++, (byte) value);
return;
} else {
- UnsafeUtil.putByte(position++, (byte) ((value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(position++, (byte) ((value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2049,7 +2055,7 @@
UnsafeUtil.putByte(position++, (byte) value);
return;
} else {
- UnsafeUtil.putByte(position++, (byte) (((int) value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(position++, (byte) (((int) value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2059,7 +2065,7 @@
UnsafeUtil.putByte(position++, (byte) value);
return;
} else {
- UnsafeUtil.putByte(position++, (byte) (((int) value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(position++, (byte) (((int) value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2259,7 +2265,7 @@
UnsafeUtil.putByte(buffer, position++, (byte) value);
break;
} else {
- UnsafeUtil.putByte(buffer, position++, (byte) ((value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(buffer, position++, (byte) ((value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2272,7 +2278,7 @@
totalBytesWritten++;
return;
} else {
- buffer[position++] = (byte) ((value & 0x7F) | 0x80);
+ buffer[position++] = (byte) ((value | 0x80) & 0xFF);
totalBytesWritten++;
value >>>= 7;
}
@@ -2292,7 +2298,7 @@
UnsafeUtil.putByte(buffer, position++, (byte) value);
break;
} else {
- UnsafeUtil.putByte(buffer, position++, (byte) (((int) value & 0x7F) | 0x80));
+ UnsafeUtil.putByte(buffer, position++, (byte) (((int) value | 0x80) & 0xFF));
value >>>= 7;
}
}
@@ -2305,7 +2311,7 @@
totalBytesWritten++;
return;
} else {
- buffer[position++] = (byte) (((int) value & 0x7F) | 0x80);
+ buffer[position++] = (byte) (((int) value | 0x80) & 0xFF);
totalBytesWritten++;
value >>>= 7;
}
diff --git a/java/core/src/main/java/com/google/protobuf/Descriptors.java b/java/core/src/main/java/com/google/protobuf/Descriptors.java
index 330cbf3..a8ed0e8 100644
--- a/java/core/src/main/java/com/google/protobuf/Descriptors.java
+++ b/java/core/src/main/java/com/google/protobuf/Descriptors.java
@@ -140,8 +140,6 @@
}
/** The syntax of the .proto file. */
- @Deprecated
- public
enum Syntax {
UNKNOWN("unknown"),
PROTO2("proto2"),
@@ -156,8 +154,6 @@
}
/** Get the syntax of the .proto file. */
- @Deprecated
- public
Syntax getSyntax() {
if (Syntax.PROTO3.name.equals(proto.getSyntax())) {
return Syntax.PROTO3;
@@ -1273,8 +1269,6 @@
* Returns true if this field was syntactically written with "optional" in the .proto file.
* Excludes singular proto3 fields that do not have a label.
*/
- @Deprecated
- public
boolean hasOptionalKeyword() {
return isProto3Optional
|| (file.getSyntax() == Syntax.PROTO2 && isOptional() && getContainingOneof() == null);
@@ -2843,8 +2837,6 @@
return proto;
}
- @Deprecated
- public
boolean isSynthetic() {
return fields.length == 1 && fields[0].isProto3Optional;
}
diff --git a/java/core/src/main/java/com/google/protobuf/FieldSet.java b/java/core/src/main/java/com/google/protobuf/FieldSet.java
index bb3eea9..a8ba1bd 100644
--- a/java/core/src/main/java/com/google/protobuf/FieldSet.java
+++ b/java/core/src/main/java/com/google/protobuf/FieldSet.java
@@ -173,7 +173,8 @@
/** Get a simple map containing all the fields. */
public Map<T, Object> getAllFields() {
if (hasLazyField) {
- SmallSortedMap<T, Object> result = cloneAllFieldsMap(fields, /* copyList */ false);
+ SmallSortedMap<T, Object> result =
+ cloneAllFieldsMap(fields, /* copyList= */ false, /* resolveLazyFields= */ true);
if (fields.isImmutable()) {
result.makeImmutable();
}
@@ -183,22 +184,22 @@
}
private static <T extends FieldDescriptorLite<T>> SmallSortedMap<T, Object> cloneAllFieldsMap(
- SmallSortedMap<T, Object> fields, boolean copyList) {
+ SmallSortedMap<T, Object> fields, boolean copyList, boolean resolveLazyFields) {
SmallSortedMap<T, Object> result = SmallSortedMap.newFieldMap(DEFAULT_FIELD_MAP_ARRAY_SIZE);
for (int i = 0; i < fields.getNumArrayEntries(); i++) {
- cloneFieldEntry(result, fields.getArrayEntryAt(i), copyList);
+ cloneFieldEntry(result, fields.getArrayEntryAt(i), copyList, resolveLazyFields);
}
for (Map.Entry<T, Object> entry : fields.getOverflowEntries()) {
- cloneFieldEntry(result, entry, copyList);
+ cloneFieldEntry(result, entry, copyList, resolveLazyFields);
}
return result;
}
private static <T extends FieldDescriptorLite<T>> void cloneFieldEntry(
- Map<T, Object> map, Map.Entry<T, Object> entry, boolean copyList) {
+ Map<T, Object> map, Map.Entry<T, Object> entry, boolean copyList, boolean resolveLazyFields) {
T key = entry.getKey();
Object value = entry.getValue();
- if (value instanceof LazyField) {
+ if (resolveLazyFields && value instanceof LazyField) {
map.put(key, ((LazyField) value).getValue());
} else if (copyList && value instanceof List) {
map.put(key, new ArrayList<>((List<?>) value));
@@ -958,7 +959,8 @@
SmallSortedMap<T, Object> fieldsForBuild = fields;
if (hasNestedBuilders) {
// Make a copy of the fields map with all Builders replaced by Message.
- fieldsForBuild = cloneAllFieldsMap(fields, /* copyList */ false);
+ fieldsForBuild =
+ cloneAllFieldsMap(fields, /* copyList= */ false, /* resolveLazyFields= */ false);
replaceBuilders(fieldsForBuild, partial);
}
FieldSet<T> fieldSet = new FieldSet<>(fieldsForBuild);
@@ -1030,7 +1032,10 @@
/** Returns a new Builder using the fields from {@code fieldSet}. */
public static <T extends FieldDescriptorLite<T>> Builder<T> fromFieldSet(FieldSet<T> fieldSet) {
- Builder<T> builder = new Builder<T>(cloneAllFieldsMap(fieldSet.fields, /* copyList */ true));
+ Builder<T> builder =
+ new Builder<T>(
+ cloneAllFieldsMap(
+ fieldSet.fields, /* copyList= */ true, /* resolveLazyFields= */ false));
builder.hasLazyField = fieldSet.hasLazyField;
return builder;
}
@@ -1040,7 +1045,8 @@
/** Get a simple map containing all the fields. */
public Map<T, Object> getAllFields() {
if (hasLazyField) {
- SmallSortedMap<T, Object> result = cloneAllFieldsMap(fields, /* copyList */ false);
+ SmallSortedMap<T, Object> result =
+ cloneAllFieldsMap(fields, /* copyList= */ false, /* resolveLazyFields= */ true);
if (fields.isImmutable()) {
result.makeImmutable();
} else {
@@ -1081,7 +1087,7 @@
private void ensureIsMutable() {
if (!isMutable) {
- fields = cloneAllFieldsMap(fields, /* copyList */ true);
+ fields = cloneAllFieldsMap(fields, /* copyList= */ true, /* resolveLazyFields= */ false);
isMutable = true;
}
}
diff --git a/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java b/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
index c153960..115f428 100644
--- a/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
+++ b/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java
@@ -1440,7 +1440,7 @@
} catch (ClassNotFoundException e) {
throw new RuntimeException("Unable to find proto buffer class: " + messageClassName, e);
} catch (NoSuchFieldException e) {
- return readResolveFallback();
+ throw new RuntimeException("Unable to find DEFAULT_INSTANCE in " + messageClassName, e);
} catch (SecurityException e) {
throw new RuntimeException("Unable to call DEFAULT_INSTANCE in " + messageClassName, e);
} catch (IllegalAccessException e) {
@@ -1450,33 +1450,6 @@
}
}
- /**
- * @deprecated from v3.0.0-beta-3+, for compatibility with v2.5.0 and v2.6.1 generated code.
- */
- @Deprecated
- private Object readResolveFallback() throws ObjectStreamException {
- try {
- Class<?> messageClass = resolveMessageClass();
- java.lang.reflect.Field defaultInstanceField =
- messageClass.getDeclaredField("defaultInstance");
- defaultInstanceField.setAccessible(true);
- MessageLite defaultInstance = (MessageLite) defaultInstanceField.get(null);
- return defaultInstance.newBuilderForType()
- .mergeFrom(asBytes)
- .buildPartial();
- } catch (ClassNotFoundException e) {
- throw new RuntimeException("Unable to find proto buffer class: " + messageClassName, e);
- } catch (NoSuchFieldException e) {
- throw new RuntimeException("Unable to find defaultInstance in " + messageClassName, e);
- } catch (SecurityException e) {
- throw new RuntimeException("Unable to call defaultInstance in " + messageClassName, e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Unable to call parsePartialFrom", e);
- } catch (InvalidProtocolBufferException e) {
- throw new RuntimeException("Unable to understand proto buffer", e);
- }
- }
-
private Class<?> resolveMessageClass() throws ClassNotFoundException {
return messageClass != null ? messageClass : Class.forName(messageClassName);
}
diff --git a/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java b/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
index 9c4980f..0a5bfda 100644
--- a/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
+++ b/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
@@ -2459,11 +2459,7 @@
final String containingOneofCamelCaseName) {
isOneofField =
descriptor.getRealContainingOneof() != null;
- hasHasMethod =
- descriptor.getFile().getSyntax() == FileDescriptor.Syntax.EDITIONS && descriptor.hasPresence()
- || descriptor.getFile().getSyntax() == FileDescriptor.Syntax.PROTO2
- || descriptor.hasOptionalKeyword()
- || (!isOneofField && descriptor.getJavaType() == FieldDescriptor.JavaType.MESSAGE);
+ hasHasMethod = descriptor.hasPresence();
ReflectionInvoker reflectionInvoker =
new ReflectionInvoker(
descriptor,
diff --git a/java/core/src/main/java/com/google/protobuf/RuntimeVersion.java b/java/core/src/main/java/com/google/protobuf/RuntimeVersion.java
new file mode 100644
index 0000000..815bb9e
--- /dev/null
+++ b/java/core/src/main/java/com/google/protobuf/RuntimeVersion.java
@@ -0,0 +1,128 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+package com.google.protobuf;
+
+import java.util.logging.Logger;
+
+/**
+ * Provides the version of this Protobuf Java runtime, and methods for Protobuf Java gencode to
+ * validate that versions are compatible. Fields and methods in this class should be only accessed
+ * by related unit tests and Protobuf Java gencode, and should not be used elsewhere.
+ */
+public final class RuntimeVersion {
+
+ /** Indicates the domain of the Protobuf artifact. */
+ public enum RuntimeDomain {
+ GOOGLE_INTERNAL,
+ PUBLIC,
+ }
+
+ // The version of this runtime.
+ // Automatically updated by Protobuf release process. Do not edit manually.
+ public static final RuntimeDomain DOMAIN = RuntimeDomain.PUBLIC;
+ public static final int MAJOR = 3;
+ public static final int MINOR = 26;
+ public static final int PATCH = 0;
+ public static final String SUFFIX = "-dev";
+ private static final String VERSION_STRING = versionString(MAJOR, MINOR, PATCH, SUFFIX);
+
+ /**
+ * Validates that the gencode is in the same domain as the runtime.
+ *
+ * <p>This method will be directly called by the google-internal gencode to verify no cross-domain
+ * usages.
+ *
+ * @param gencodeDomain the domain where Protobuf Java code was generated.
+ * @throws ProtobufRuntimeVersionException if gencodeDomain is not the same as DOMAIN.
+ */
+ public static void validateProtobufGencodeDomain(RuntimeDomain gencodeDomain) {
+ // Check the environmental variable, and temporarily disable validation if it's set to true.
+ String disableFlag = java.lang.System.getenv("TEMORARILY_DISABLE_PROTOBUF_VERSION_CHECK");
+ if ((disableFlag != null && disableFlag.equals("true"))) {
+ return;
+ }
+
+ if (gencodeDomain != DOMAIN) {
+ throw new ProtobufRuntimeVersionException(
+ String.format(
+ "Mismatched Protobuf Gencode/Runtime domains: gencode %s, runtime %s. Cross-domain"
+ + " usage of Protobuf is not supported.",
+ gencodeDomain, DOMAIN));
+ }
+ }
+
+ /**
+ * Validates that the gencode version is compatible with this runtime version according to
+ * https://protobuf.dev/support/cross-version-runtime-guarantee/.
+ *
+ * <p>This method is currently only used by Protobuf Java gencode in OSS.
+ *
+ * <p>This method is only for Protobuf Java gencode; do not call it elsewhere.
+ *
+ * @param domain the domain where Protobuf Java code was generated.
+ * @param major the major version of Protobuf Java gencode.
+ * @param minor the minor version of Protobuf Java gencode.
+ * @param patch the micro/patch version of Protobuf Java gencode.
+ * @param suffix the version suffix e.g. "-rc2", "-dev", etc.
+ * @throws ProtobufRuntimeVersionException if versions are incompatible.
+ */
+ public static void validateProtobufGencodeVersion(
+ RuntimeDomain domain, int major, int minor, int patch, String suffix) {
+
+ // Check that version numbers are valid.
+ if (major < 0 || minor < 0 || patch < 0) {
+ throw new ProtobufRuntimeVersionException(
+ "Invalid gencode version: " + versionString(major, minor, patch, suffix));
+ }
+
+ validateProtobufGencodeDomain(domain);
+
+ String gencodeVersionString = versionString(major, minor, patch, suffix);
+ // Check that runtime major version is the same as the gencode major version.
+ if (major != MAJOR) {
+ throw new ProtobufRuntimeVersionException(
+ String.format(
+ "Mismatched Protobuf Gencode/Runtime major versions: gencode %s, runtime %s. Same"
+ + " major version is required.",
+ gencodeVersionString, VERSION_STRING));
+ }
+
+ // Check that runtime version is newer than the gencode version.
+ if (MINOR < minor || (MINOR == minor && PATCH < patch)) {
+ throw new ProtobufRuntimeVersionException(
+ String.format(
+ "Protobuf Java runtime version cannot be older than the gencode version:"
+ + "gencode %s, runtime %s.",
+ gencodeVersionString, VERSION_STRING));
+ }
+
+ // Check that runtime version suffix is the same as the gencode version suffix.
+ if (!suffix.equals(SUFFIX)) {
+ throw new ProtobufRuntimeVersionException(
+ String.format(
+ "Mismatched Protobuf Gencode/Runtime version suffixes: gencode %s, runtime %s."
+ + " Version suffixes must be the same.",
+ gencodeVersionString, VERSION_STRING));
+ }
+ }
+
+ /**
+ * A runtime exception to be thrown by the version validator if version is not well defined or
+ * versions mismatch.
+ */
+ public static final class ProtobufRuntimeVersionException extends RuntimeException {
+ public ProtobufRuntimeVersionException(String message) {
+ super(message);
+ }
+ }
+
+ /** Gets the version string given the version segments. */
+ private static String versionString(int major, int minor, int patch, String suffix) {
+ return String.format("%d.%d.%d%s", major, minor, patch, suffix);
+ }
+}
diff --git a/java/core/src/main/java/com/google/protobuf/TextFormat.java b/java/core/src/main/java/com/google/protobuf/TextFormat.java
index a49919e..39838ad 100644
--- a/java/core/src/main/java/com/google/protobuf/TextFormat.java
+++ b/java/core/src/main/java/com/google/protobuf/TextFormat.java
@@ -39,58 +39,6 @@
private static final String DEBUG_STRING_SILENT_MARKER = "\t ";
/**
- * Outputs a textual representation of the Protocol Message supplied into the parameter output.
- * (This representation is the new version of the classic "ProtocolPrinter" output from the
- * original Protocol Buffer system)
- *
- * @deprecated Use {@code printer().print(MessageOrBuilder, Appendable)}
- */
- @Deprecated
- @InlineMe(
- replacement = "TextFormat.printer().print(message, output)",
- imports = "com.google.protobuf.TextFormat")
- public static void print(final MessageOrBuilder message, final Appendable output)
- throws IOException {
- printer().print(message, output);
- }
-
- /**
- * Outputs a textual representation of {@code fields} to {@code output}.
- *
- * @deprecated Use {@code printer().print(UnknownFieldSet, Appendable)}
- */
- @Deprecated
- public static void print(final UnknownFieldSet fields, final Appendable output)
- throws IOException {
- printer().print(fields, output);
- }
-
- /**
- * Same as {@code print()}, except that non-ASCII characters are not escaped.
- *
- * @deprecated Use {@code printer().escapingNonAscii(false).print(MessageOrBuilder, Appendable)}
- */
- @Deprecated
- @InlineMe(
- replacement = "TextFormat.printer().escapingNonAscii(false).print(message, output)",
- imports = "com.google.protobuf.TextFormat")
- public static void printUnicode(final MessageOrBuilder message, final Appendable output)
- throws IOException {
- printer().escapingNonAscii(false).print(message, output);
- }
-
- /**
- * Same as {@code print()}, except that non-ASCII characters are not escaped.
- *
- * @deprecated Use {@code printer().escapingNonAscii(false).print(UnknownFieldSet, Appendable)}
- */
- @Deprecated
- public static void printUnicode(final UnknownFieldSet fields, final Appendable output)
- throws IOException {
- printer().escapingNonAscii(false).print(fields, output);
- }
-
- /**
* Generates a human readable form of this message, useful for debugging and other purposes, with
* no newline characters. This is just a trivial wrapper around {@link
* TextFormat.Printer#shortDebugString(MessageOrBuilder)}.
@@ -100,130 +48,6 @@
}
/**
- * Generates a human readable form of the field, useful for debugging and other purposes, with
- * no newline characters.
- *
- * @deprecated Use {@code printer().shortDebugString(FieldDescriptor, Object)}
- */
- @Deprecated
- public static String shortDebugString(final FieldDescriptor field, final Object value) {
- return printer().shortDebugString(field, value);
- }
-
- /**
- * Generates a human readable form of the unknown fields, useful for debugging and other
- * purposes, with no newline characters.
- *
- * @deprecated Use {@code printer().shortDebugString(UnknownFieldSet)}
- */
- @Deprecated
- public static String shortDebugString(final UnknownFieldSet fields) {
- return printer().shortDebugString(fields);
- }
-
- /**
- * Like {@code print()}, but writes directly to a {@code String} and returns it.
- *
- * @deprecated Use {@code message.toString()}
- */
- @Deprecated
- @InlineMe(
- replacement = "TextFormat.printer().printToString(message)",
- imports = "com.google.protobuf.TextFormat")
- public static String printToString(final MessageOrBuilder message) {
- return printer().printToString(message);
- }
-
- /**
- * Like {@code print()}, but writes directly to a {@code String} and returns it.
- *
- * @deprecated Use {@link UnknownFieldSet#toString()}
- */
- @Deprecated
- public static String printToString(final UnknownFieldSet fields) {
- return printer().printToString(fields);
- }
-
- /**
- * Same as {@code printToString()}, except that non-ASCII characters in string type fields are not
- * escaped in backslash+octals.
- *
- * @deprecated Use {@code printer().escapingNonAscii(false).printToString(MessageOrBuilder)}
- */
- @Deprecated
- @InlineMe(
- replacement = "TextFormat.printer().escapingNonAscii(false).printToString(message)",
- imports = "com.google.protobuf.TextFormat")
- public static String printToUnicodeString(final MessageOrBuilder message) {
- return printer().escapingNonAscii(false).printToString(message);
- }
-
- /**
- * Same as {@code printToString()}, except that non-ASCII characters in string type fields are
- * not escaped in backslash+octals.
- *
- * @deprecated Use {@code printer().escapingNonAscii(false).printToString(UnknownFieldSet)}
- */
- @Deprecated
- public static String printToUnicodeString(final UnknownFieldSet fields) {
- return printer().escapingNonAscii(false).printToString(fields);
- }
-
- /** @deprecated Use {@code printer().printField(FieldDescriptor, Object, Appendable)} */
- @Deprecated
- public static void printField(
- final FieldDescriptor field, final Object value, final Appendable output)
- throws IOException {
- printer().printField(field, value, output);
- }
-
- /** @deprecated Use {@code printer().printFieldToString(FieldDescriptor, Object)} */
- @Deprecated
- public static String printFieldToString(final FieldDescriptor field, final Object value) {
- return printer().printFieldToString(field, value);
- }
-
- /**
- * Outputs a unicode textual representation of the value of given field value.
- *
- * <p>Same as {@code printFieldValue()}, except that non-ASCII characters in string type fields
- * are not escaped in backslash+octals.
- *
- * @deprecated Use {@code printer().escapingNonAscii(false).printFieldValue(FieldDescriptor,
- * Object, Appendable)}
- * @param field the descriptor of the field
- * @param value the value of the field
- * @param output the output to which to append the formatted value
- * @throws ClassCastException if the value is not appropriate for the given field descriptor
- * @throws IOException if there is an exception writing to the output
- */
- @Deprecated
- public static void printUnicodeFieldValue(
- final FieldDescriptor field, final Object value, final Appendable output)
- throws IOException {
- printer().escapingNonAscii(false).printFieldValue(field, value, output);
- }
-
- /**
- * Outputs a textual representation of the value of given field value.
- *
- * @deprecated Use {@code printer().printFieldValue(FieldDescriptor, Object, Appendable)}
- * @param field the descriptor of the field
- * @param value the value of the field
- * @param output the output to which to append the formatted value
- * @throws ClassCastException if the value is not appropriate for the given field descriptor
- * @throws IOException if there is an exception writing to the output
- */
- @Deprecated
- @InlineMe(
- replacement = "TextFormat.printer().printFieldValue(field, value, output)",
- imports = "com.google.protobuf.TextFormat")
- public static void printFieldValue(
- final FieldDescriptor field, final Object value, final Appendable output) throws IOException {
- printer().printFieldValue(field, value, output);
- }
-
- /**
* Outputs a textual representation of the value of an unknown field.
*
* @param tag the field's tag number
@@ -283,16 +107,23 @@
public static final class Printer {
// Printer instance which escapes non-ASCII characters.
- private static final Printer DEFAULT = new Printer(true, TypeRegistry.getEmptyTypeRegistry());
+ private static final Printer DEFAULT =
+ new Printer(
+ true, TypeRegistry.getEmptyTypeRegistry(), ExtensionRegistryLite.getEmptyRegistry());
/** Whether to escape non ASCII characters with backslash and octal. */
private final boolean escapeNonAscii;
private final TypeRegistry typeRegistry;
+ private final ExtensionRegistryLite extensionRegistry;
- private Printer(boolean escapeNonAscii, TypeRegistry typeRegistry) {
+ private Printer(
+ boolean escapeNonAscii,
+ TypeRegistry typeRegistry,
+ ExtensionRegistryLite extensionRegistry) {
this.escapeNonAscii = escapeNonAscii;
this.typeRegistry = typeRegistry;
+ this.extensionRegistry = extensionRegistry;
}
/**
@@ -305,7 +136,7 @@
* with the escape mode set to the given parameter.
*/
public Printer escapingNonAscii(boolean escapeNonAscii) {
- return new Printer(escapeNonAscii, typeRegistry);
+ return new Printer(escapeNonAscii, typeRegistry, extensionRegistry);
}
/**
@@ -318,7 +149,20 @@
if (this.typeRegistry != TypeRegistry.getEmptyTypeRegistry()) {
throw new IllegalArgumentException("Only one typeRegistry is allowed.");
}
- return new Printer(escapeNonAscii, typeRegistry);
+ return new Printer(escapeNonAscii, typeRegistry, extensionRegistry);
+ }
+
+ /**
+ * Creates a new {@link Printer} using the given extensionRegistry. The new Printer clones all
+ * other configurations from the current {@link Printer}.
+ *
+ * @throws IllegalArgumentException if a registry is already set.
+ */
+ public Printer usingExtensionRegistry(ExtensionRegistryLite extensionRegistry) {
+ if (this.extensionRegistry != ExtensionRegistryLite.getEmptyRegistry()) {
+ throw new IllegalArgumentException("Only one extensionRegistry is allowed.");
+ }
+ return new Printer(escapeNonAscii, typeRegistry, extensionRegistry);
}
/**
@@ -377,7 +221,7 @@
return false;
}
contentBuilder = DynamicMessage.getDefaultInstance(contentType).newBuilderForType();
- contentBuilder.mergeFrom((ByteString) value);
+ contentBuilder.mergeFrom((ByteString) value, extensionRegistry);
} catch (InvalidProtocolBufferException e) {
// The value of Any is malformed. We cannot print it out nicely, so fallback to printing out
// the type_url and value as bytes. Note that we fail open here to be consistent with
diff --git a/java/core/src/main/java/com/google/protobuf/Utf8.java b/java/core/src/main/java/com/google/protobuf/Utf8.java
index f71820e..2eace98 100644
--- a/java/core/src/main/java/com/google/protobuf/Utf8.java
+++ b/java/core/src/main/java/com/google/protobuf/Utf8.java
@@ -214,24 +214,24 @@
* @throws IllegalArgumentException if {@code sequence} contains ill-formed UTF-16 (unpaired
* surrogates)
*/
- static int encodedLength(CharSequence sequence) {
+ static int encodedLength(String string) {
// Warning to maintainers: this implementation is highly optimized.
- int utf16Length = sequence.length();
+ int utf16Length = string.length();
int utf8Length = utf16Length;
int i = 0;
// This loop optimizes for pure ASCII.
- while (i < utf16Length && sequence.charAt(i) < 0x80) {
+ while (i < utf16Length && string.charAt(i) < 0x80) {
i++;
}
// This loop optimizes for chars less than 0x800.
for (; i < utf16Length; i++) {
- char c = sequence.charAt(i);
+ char c = string.charAt(i);
if (c < 0x800) {
utf8Length += ((0x7f - c) >>> 31); // branch free!
} else {
- utf8Length += encodedLengthGeneral(sequence, i);
+ utf8Length += encodedLengthGeneral(string, i);
break;
}
}
@@ -244,11 +244,11 @@
return utf8Length;
}
- private static int encodedLengthGeneral(CharSequence sequence, int start) {
- int utf16Length = sequence.length();
+ private static int encodedLengthGeneral(String string, int start) {
+ int utf16Length = string.length();
int utf8Length = 0;
for (int i = start; i < utf16Length; i++) {
- char c = sequence.charAt(i);
+ char c = string.charAt(i);
if (c < 0x800) {
utf8Length += (0x7f - c) >>> 31; // branch free!
} else {
@@ -256,7 +256,7 @@
// jdk7+: if (Character.isSurrogate(c)) {
if (Character.MIN_SURROGATE <= c && c <= Character.MAX_SURROGATE) {
// Check that we have a well-formed surrogate pair.
- int cp = Character.codePointAt(sequence, i);
+ int cp = Character.codePointAt(string, i);
if (cp < MIN_SUPPLEMENTARY_CODE_POINT) {
throw new UnpairedSurrogateException(i, utf16Length);
}
@@ -267,7 +267,7 @@
return utf8Length;
}
- static int encode(CharSequence in, byte[] out, int offset, int length) {
+ static int encode(String in, byte[] out, int offset, int length) {
return processor.encodeUtf8(in, out, offset, length);
}
// End Guava UTF-8 methods.
@@ -326,9 +326,9 @@
*
* @param in the source string to be encoded
* @param out the target buffer to receive the encoded string.
- * @see Utf8#encode(CharSequence, byte[], int, int)
+ * @see Utf8#encode(String, byte[], int, int)
*/
- static void encodeUtf8(CharSequence in, ByteBuffer out) {
+ static void encodeUtf8(String in, ByteBuffer out) {
processor.encodeUtf8(in, out);
}
@@ -724,7 +724,7 @@
* {@code bytes.length - offset}
* @return the new offset, equivalent to {@code offset + Utf8.encodedLength(sequence)}
*/
- abstract int encodeUtf8(CharSequence in, byte[] out, int offset, int length);
+ abstract int encodeUtf8(String in, byte[] out, int offset, int length);
/**
* Encodes an input character sequence ({@code in}) to UTF-8 in the target buffer ({@code out}).
@@ -743,7 +743,7 @@
* @throws ArrayIndexOutOfBoundsException if {@code in} encoded in UTF-8 is longer than {@code
* out.remaining()}
*/
- final void encodeUtf8(CharSequence in, ByteBuffer out) {
+ final void encodeUtf8(String in, ByteBuffer out) {
if (out.hasArray()) {
final int offset = out.arrayOffset();
int endIndex = Utf8.encode(in, out.array(), offset + out.position(), out.remaining());
@@ -756,13 +756,13 @@
}
/** Encodes the input character sequence to a direct {@link ByteBuffer} instance. */
- abstract void encodeUtf8Direct(CharSequence in, ByteBuffer out);
+ abstract void encodeUtf8Direct(String in, ByteBuffer out);
/**
* Encodes the input character sequence to a {@link ByteBuffer} instance using the {@link
* ByteBuffer} API, rather than potentially faster approaches.
*/
- final void encodeUtf8Default(CharSequence in, ByteBuffer out) {
+ final void encodeUtf8Default(String in, ByteBuffer out) {
final int inLength = in.length();
int outIx = out.position();
int inIx = 0;
@@ -1013,7 +1013,7 @@
}
@Override
- int encodeUtf8(CharSequence in, byte[] out, int offset, int length) {
+ int encodeUtf8(String in, byte[] out, int offset, int length) {
int utf16Length = in.length();
int j = offset;
int i = 0;
@@ -1065,7 +1065,7 @@
}
@Override
- void encodeUtf8Direct(CharSequence in, ByteBuffer out) {
+ void encodeUtf8Direct(String in, ByteBuffer out) {
// For safe processing, we have to use the ByteBuffer API.
encodeUtf8Default(in, out);
}
@@ -1442,7 +1442,7 @@
}
@Override
- int encodeUtf8(final CharSequence in, final byte[] out, final int offset, final int length) {
+ int encodeUtf8(final String in, final byte[] out, final int offset, final int length) {
long outIx = offset;
final long outLimit = outIx + length;
final int inLimit = in.length();
@@ -1503,7 +1503,7 @@
}
@Override
- void encodeUtf8Direct(CharSequence in, ByteBuffer out) {
+ void encodeUtf8Direct(String in, ByteBuffer out) {
final long address = addressOffset(out);
long outIx = address + out.position();
final long outLimit = address + out.limit();
diff --git a/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java b/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java
index 3007c83..51e66b9 100644
--- a/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java
+++ b/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java
@@ -327,6 +327,81 @@
.isEqualTo(-75123905439571256L);
}
+ @Test
+ public void computeIntSize() {
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(0)).isEqualTo(1);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(0)).isEqualTo(1);
+ int i;
+ for (i = 0; i < 7; i++) {
+ assertThat(CodedOutputStream.computeInt32SizeNoTag(1 << i)).isEqualTo(1);
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(1 << i)).isEqualTo(1);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(1);
+ }
+ for (; i < 14; i++) {
+ assertThat(CodedOutputStream.computeInt32SizeNoTag(1 << i)).isEqualTo(2);
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(1 << i)).isEqualTo(2);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(2);
+ }
+ for (; i < 21; i++) {
+ assertThat(CodedOutputStream.computeInt32SizeNoTag(1 << i)).isEqualTo(3);
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(1 << i)).isEqualTo(3);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(3);
+ }
+ for (; i < 28; i++) {
+ assertThat(CodedOutputStream.computeInt32SizeNoTag(1 << i)).isEqualTo(4);
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(1 << i)).isEqualTo(4);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(4);
+ }
+ for (; i < 31; i++) {
+ assertThat(CodedOutputStream.computeInt32SizeNoTag(1 << i)).isEqualTo(5);
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(1 << i)).isEqualTo(5);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(5);
+ }
+ for (; i < 32; i++) {
+ assertThat(CodedOutputStream.computeInt32SizeNoTag(1 << i)).isEqualTo(10);
+ assertThat(CodedOutputStream.computeUInt32SizeNoTag(1 << i)).isEqualTo(5);
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(5);
+ }
+ for (; i < 35; i++) {
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(5);
+ }
+ for (; i < 42; i++) {
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(6);
+ }
+ for (; i < 49; i++) {
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(7);
+ }
+ for (; i < 56; i++) {
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(8);
+ }
+ for (; i < 63; i++) {
+ assertThat(CodedOutputStream.computeUInt64SizeNoTag(1L << i)).isEqualTo(9);
+ }
+ }
+
+ @Test
+ public void computeTagSize() {
+ assertThat(CodedOutputStream.computeTagSize(0)).isEqualTo(1);
+ int i;
+ for (i = 0; i < 4; i++) {
+ assertThat(CodedOutputStream.computeTagSize(1 << i)).isEqualTo(1);
+ }
+ for (; i < 11; i++) {
+ assertThat(CodedOutputStream.computeTagSize(1 << i)).isEqualTo(2);
+ }
+ for (; i < 18; i++) {
+ assertThat(CodedOutputStream.computeTagSize(1 << i)).isEqualTo(3);
+ }
+ for (; i < 25; i++) {
+ assertThat(CodedOutputStream.computeTagSize(1 << i)).isEqualTo(4);
+ }
+ for (; i < 29; i++) {
+ assertThat(CodedOutputStream.computeTagSize(1 << i)).isEqualTo(5);
+ }
+ // Invalid tags
+ assertThat(CodedOutputStream.computeTagSize((1 << 30) + 1)).isEqualTo(1);
+ }
+
/** Tests writing a whole message with every field type. */
@Test
public void testWriteWholeMessage() throws Exception {
diff --git a/java/core/src/test/java/com/google/protobuf/LazilyParsedMessageSetTest.java b/java/core/src/test/java/com/google/protobuf/LazilyParsedMessageSetTest.java
new file mode 100644
index 0000000..c41a381
--- /dev/null
+++ b/java/core/src/test/java/com/google/protobuf/LazilyParsedMessageSetTest.java
@@ -0,0 +1,162 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+package com.google.protobuf;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import protobuf_unittest.UnittestMset.RawMessageSet;
+import protobuf_unittest.UnittestMset.TestMessageSetExtension1;
+import protobuf_unittest.UnittestMset.TestMessageSetExtension2;
+import protobuf_unittest.UnittestMset.TestMessageSetExtension3;
+import proto2_wireformat_unittest.UnittestMsetWireFormat.TestMessageSet;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests related to handling of MessageSets with lazily parsed extensions. */
+@RunWith(JUnit4.class)
+public class LazilyParsedMessageSetTest {
+ private static final int TYPE_ID_1 =
+ TestMessageSetExtension1.getDescriptor().getExtensions().get(0).getNumber();
+ private static final int TYPE_ID_2 =
+ TestMessageSetExtension2.getDescriptor().getExtensions().get(0).getNumber();
+ private static final int TYPE_ID_3 =
+ TestMessageSetExtension3.getDescriptor().getExtensions().get(0).getNumber();
+ private static final ByteString CORRUPTED_MESSAGE_PAYLOAD =
+ ByteString.copyFrom(new byte[] {(byte) 0xff});
+
+ @Before
+ public void setUp() {
+ ExtensionRegistryLite.setEagerlyParseMessageSets(false);
+ }
+
+ @Test
+ public void testParseAndUpdateMessageSet_unaccessedLazyFieldsAreNotLoaded() throws Exception {
+ ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance();
+ extensionRegistry.add(TestMessageSetExtension1.messageSetExtension);
+ extensionRegistry.add(TestMessageSetExtension2.messageSetExtension);
+ extensionRegistry.add(TestMessageSetExtension3.messageSetExtension);
+
+ // Set up a TestMessageSet with 2 extensions. The first extension has corrupted payload
+ // data. The test below makes sure that we never load this extension. If we ever do, then we
+ // will handle the exception and replace the value with the default empty message (this behavior
+ // is tested below in testLoadCorruptedLazyField_getsReplacedWithEmptyMessage). Later on we
+ // check that when we serialize the message set, we still have corrupted payload for the first
+ // extension.
+ RawMessageSet inputRaw =
+ RawMessageSet.newBuilder()
+ .addItem(
+ RawMessageSet.Item.newBuilder()
+ .setTypeId(TYPE_ID_1)
+ .setMessage(CORRUPTED_MESSAGE_PAYLOAD))
+ .addItem(
+ RawMessageSet.Item.newBuilder()
+ .setTypeId(TYPE_ID_2)
+ .setMessage(
+ TestMessageSetExtension2.newBuilder().setStr("foo").build().toByteString()))
+ .build();
+
+ ByteString inputData = inputRaw.toByteString();
+
+ // Re-parse as a TestMessageSet, so that all extensions are lazy
+ TestMessageSet messageSet = TestMessageSet.parseFrom(inputData, extensionRegistry);
+
+ // Update one extension and add a new one.
+ TestMessageSet.Builder builder = messageSet.toBuilder();
+ builder.setExtension(
+ TestMessageSetExtension2.messageSetExtension,
+ TestMessageSetExtension2.newBuilder().setStr("bar").build());
+
+ // Call .build() in the middle of updating the builder. This triggers a codepath that we want to
+ // make sure preserves lazy fields.
+ TestMessageSet unusedIntermediateMessageSet = builder.build();
+
+ builder.setExtension(
+ TestMessageSetExtension3.messageSetExtension,
+ TestMessageSetExtension3.newBuilder().setRequiredInt(666).build());
+
+ TestMessageSet updatedMessageSet = builder.build();
+
+ // Check that hasExtension call does not load lazy fields.
+ assertThat(updatedMessageSet.hasExtension(TestMessageSetExtension1.messageSetExtension))
+ .isTrue();
+
+ // Serialize. The first extension should still be unloaded and will get serialized using the
+ // same corrupted byte array.
+ ByteString outputData = updatedMessageSet.toByteString();
+
+ // Re-parse as RawMessageSet
+ RawMessageSet actualRaw =
+ RawMessageSet.parseFrom(outputData, ExtensionRegistry.getEmptyRegistry());
+
+ RawMessageSet expectedRaw =
+ RawMessageSet.newBuilder()
+ .addItem(
+ RawMessageSet.Item.newBuilder()
+ .setTypeId(TYPE_ID_1)
+ // This is the important part -- we want to make sure that the payload of the
+ // 1st extensions is the same corrupted byte array. If we ever load the
+ // extension during our manipulations above, then we would have replaced it with
+ // the default empty message.
+ .setMessage(CORRUPTED_MESSAGE_PAYLOAD))
+ .addItem(
+ RawMessageSet.Item.newBuilder()
+ .setTypeId(TYPE_ID_2)
+ .setMessage(
+ TestMessageSetExtension2.newBuilder().setStr("bar").build().toByteString()))
+ .addItem(
+ RawMessageSet.Item.newBuilder()
+ .setTypeId(TYPE_ID_3)
+ .setMessage(
+ TestMessageSetExtension3.newBuilder()
+ .setRequiredInt(666)
+ .build()
+ .toByteString()))
+ .build();
+
+ assertThat(actualRaw).isEqualTo(expectedRaw);
+ }
+
+ @Test
+ public void testLoadCorruptedLazyField_getsReplacedWithEmptyMessage() throws Exception {
+ ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance();
+ extensionRegistry.add(TestMessageSetExtension1.messageSetExtension);
+
+ RawMessageSet inputRaw =
+ RawMessageSet.newBuilder()
+ .addItem(
+ RawMessageSet.Item.newBuilder()
+ .setTypeId(TYPE_ID_1)
+ .setMessage(CORRUPTED_MESSAGE_PAYLOAD))
+ .build();
+
+ ByteString inputData = inputRaw.toByteString();
+
+ // Re-parse as a TestMessageSet, so that all extensions are lazy
+ TestMessageSet messageSet = TestMessageSet.parseFrom(inputData, extensionRegistry);
+
+ assertThat(messageSet.getExtension(TestMessageSetExtension1.messageSetExtension))
+ .isEqualTo(TestMessageSetExtension1.getDefaultInstance());
+
+ // Serialize. The first extension should be serialized as an empty message.
+ ByteString outputData = messageSet.toByteString();
+
+ // Re-parse as RawMessageSet
+ RawMessageSet actualRaw =
+ RawMessageSet.parseFrom(outputData, ExtensionRegistry.getEmptyRegistry());
+
+ RawMessageSet expectedRaw =
+ RawMessageSet.newBuilder()
+ .addItem(
+ RawMessageSet.Item.newBuilder().setTypeId(TYPE_ID_1).setMessage(ByteString.empty()))
+ .build();
+
+ assertThat(actualRaw).isEqualTo(expectedRaw);
+ }
+}
diff --git a/java/core/src/test/java/com/google/protobuf/RuntimeVersionTest.java b/java/core/src/test/java/com/google/protobuf/RuntimeVersionTest.java
new file mode 100644
index 0000000..c30c9a6
--- /dev/null
+++ b/java/core/src/test/java/com/google/protobuf/RuntimeVersionTest.java
@@ -0,0 +1,138 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+package com.google.protobuf;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertThrows;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public final class RuntimeVersionTest {
+
+ @Test
+ public void versionValidation_invalidVersionNumbers() {
+ RuntimeVersion.ProtobufRuntimeVersionException thrown =
+ assertThrows(
+ RuntimeVersion.ProtobufRuntimeVersionException.class,
+ () ->
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN, 1, -2, -3, ""));
+ assertThat(thrown).hasMessageThat().contains("Invalid gencode version: 1.-2.-3");
+ }
+
+ @Test
+ public void versionValidation_crossDomainDisallowed() {
+
+ RuntimeVersion.RuntimeDomain gencodeDomain = RuntimeVersion.RuntimeDomain.GOOGLE_INTERNAL;
+ RuntimeVersion.ProtobufRuntimeVersionException thrown =
+ assertThrows(
+ RuntimeVersion.ProtobufRuntimeVersionException.class,
+ () -> RuntimeVersion.validateProtobufGencodeDomain(gencodeDomain));
+ assertThat(thrown).hasMessageThat().contains("Mismatched Protobuf Gencode/Runtime domains");
+ }
+
+ @Test
+ public void versionValidation_sameDomainAllowed() {
+
+ RuntimeVersion.RuntimeDomain gencodeDomain = RuntimeVersion.RuntimeDomain.PUBLIC;
+ RuntimeVersion.validateProtobufGencodeDomain(gencodeDomain);
+ }
+
+ @Test
+ public void versionValidation_mismatchingMajorDisallowed() {
+ int gencodeMajor = 1;
+ RuntimeVersion.ProtobufRuntimeVersionException thrown =
+ assertThrows(
+ RuntimeVersion.ProtobufRuntimeVersionException.class,
+ () ->
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN,
+ gencodeMajor,
+ RuntimeVersion.MINOR,
+ RuntimeVersion.PATCH,
+ RuntimeVersion.SUFFIX));
+ assertThat(thrown)
+ .hasMessageThat()
+ .contains("Mismatched Protobuf Gencode/Runtime major versions");
+ }
+
+ @Test
+ public void versionValidation_versionNumbersAllTheSameAllowed() {
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN,
+ RuntimeVersion.MAJOR,
+ RuntimeVersion.MINOR,
+ RuntimeVersion.PATCH,
+ RuntimeVersion.SUFFIX);
+ }
+
+ @Test
+ public void versionValidation_NewerRuntimeVersionAllowed() {
+ int gencodeMinor = RuntimeVersion.MINOR - 1;
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN,
+ RuntimeVersion.MAJOR,
+ gencodeMinor,
+ RuntimeVersion.PATCH,
+ RuntimeVersion.SUFFIX);
+ }
+
+ @Test
+ public void versionValidation_OlderRuntimeVersionDisallowed() {
+ int gencodeMinor = RuntimeVersion.MINOR + 1;
+ RuntimeVersion.ProtobufRuntimeVersionException thrown =
+ assertThrows(
+ RuntimeVersion.ProtobufRuntimeVersionException.class,
+ () ->
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN,
+ RuntimeVersion.MAJOR,
+ gencodeMinor,
+ RuntimeVersion.PATCH,
+ RuntimeVersion.SUFFIX));
+ assertThat(thrown)
+ .hasMessageThat()
+ .contains("Protobuf Java runtime version cannot be older than the gencode version");
+
+ int gencodePatch = RuntimeVersion.PATCH + 1;
+ thrown =
+ assertThrows(
+ RuntimeVersion.ProtobufRuntimeVersionException.class,
+ () ->
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN,
+ RuntimeVersion.MAJOR,
+ RuntimeVersion.MINOR,
+ gencodePatch,
+ RuntimeVersion.SUFFIX));
+ assertThat(thrown)
+ .hasMessageThat()
+ .contains("Protobuf Java runtime version cannot be older than the gencode version");
+ }
+
+ @Test
+ public void versionValidation_differentVesionSuffixDisallowed() {
+ String gencodeSuffix = "-test";
+ RuntimeVersion.ProtobufRuntimeVersionException thrown =
+ assertThrows(
+ RuntimeVersion.ProtobufRuntimeVersionException.class,
+ () ->
+ RuntimeVersion.validateProtobufGencodeVersion(
+ RuntimeVersion.DOMAIN,
+ RuntimeVersion.MAJOR,
+ RuntimeVersion.MINOR,
+ RuntimeVersion.PATCH,
+ gencodeSuffix));
+ assertThat(thrown)
+ .hasMessageThat()
+ .contains("Mismatched Protobuf Gencode/Runtime version suffixes");
+ }
+}
diff --git a/java/core/src/test/java/com/google/protobuf/TextFormatTest.java b/java/core/src/test/java/com/google/protobuf/TextFormatTest.java
index d95ed4c..695e3f5 100644
--- a/java/core/src/test/java/com/google/protobuf/TextFormatTest.java
+++ b/java/core/src/test/java/com/google/protobuf/TextFormatTest.java
@@ -11,6 +11,7 @@
import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.protobuf.TestUtil.TEST_REQUIRED_INITIALIZED;
import static com.google.protobuf.TestUtil.TEST_REQUIRED_UNINITIALIZED;
+import static protobuf_unittest.UnittestProto.optionalInt32Extension;
import static org.junit.Assert.assertThrows;
import com.google.protobuf.DescriptorProtos.DescriptorProto;
@@ -624,6 +625,83 @@
}
@Test
+ public void testPrintAny_anyWithDynamicMessageContainingExtensionTreatedAsUnknown()
+ throws Exception {
+ Descriptor descriptor =
+ createDescriptorForAny(
+ FieldDescriptorProto.newBuilder()
+ .setName("type_url")
+ .setNumber(1)
+ .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL)
+ .setType(FieldDescriptorProto.Type.TYPE_STRING)
+ .build(),
+ FieldDescriptorProto.newBuilder()
+ .setName("value")
+ .setNumber(2)
+ .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL)
+ .setType(FieldDescriptorProto.Type.TYPE_BYTES)
+ .build());
+ DynamicMessage testAny =
+ DynamicMessage.newBuilder(descriptor)
+ .setField(
+ descriptor.findFieldByNumber(1),
+ "type.googleapis.com/" + TestAllExtensions.getDescriptor().getFullName())
+ .setField(
+ descriptor.findFieldByNumber(2),
+ TestAllExtensions.newBuilder()
+ .setExtension(optionalInt32Extension, 12345)
+ .build()
+ .toByteString())
+ .build();
+ String actual =
+ TextFormat.printer()
+ .usingTypeRegistry(TypeRegistry.newBuilder().add(TestAllTypes.getDescriptor()).build())
+ .printToString(testAny);
+ String expected = "[type.googleapis.com/protobuf_unittest.TestAllExtensions] {\n 1: 12345\n}\n";
+ assertThat(actual).isEqualTo(expected);
+ }
+
+ @Test
+ public void testPrintAny_anyWithDynamicMessageContainingExtensionWithRegistry() throws Exception {
+ Descriptor descriptor =
+ createDescriptorForAny(
+ FieldDescriptorProto.newBuilder()
+ .setName("type_url")
+ .setNumber(1)
+ .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL)
+ .setType(FieldDescriptorProto.Type.TYPE_STRING)
+ .build(),
+ FieldDescriptorProto.newBuilder()
+ .setName("value")
+ .setNumber(2)
+ .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL)
+ .setType(FieldDescriptorProto.Type.TYPE_BYTES)
+ .build());
+ DynamicMessage testAny =
+ DynamicMessage.newBuilder(descriptor)
+ .setField(
+ descriptor.findFieldByNumber(1),
+ "type.googleapis.com/" + TestAllExtensions.getDescriptor().getFullName())
+ .setField(
+ descriptor.findFieldByNumber(2),
+ TestAllExtensions.newBuilder()
+ .setExtension(optionalInt32Extension, 12345)
+ .build()
+ .toByteString())
+ .build();
+ String actual =
+ TextFormat.printer()
+ .usingTypeRegistry(TypeRegistry.newBuilder().add(TestAllTypes.getDescriptor()).build())
+ .usingExtensionRegistry(TestUtil.getFullExtensionRegistry())
+ .printToString(testAny);
+ String expected =
+ "[type.googleapis.com/protobuf_unittest.TestAllExtensions] {\n"
+ + " [protobuf_unittest.optional_int32_extension]: 12345\n"
+ + "}\n";
+ assertThat(actual).isEqualTo(expected);
+ }
+
+ @Test
public void testPrintAny_anyFromWithNoValueField() throws Exception {
Descriptor descriptor =
createDescriptorForAny(
diff --git a/java/core/src/test/java/com/google/protobuf/Utf8Test.java b/java/core/src/test/java/com/google/protobuf/Utf8Test.java
index 986702d..2a53e82 100644
--- a/java/core/src/test/java/com/google/protobuf/Utf8Test.java
+++ b/java/core/src/test/java/com/google/protobuf/Utf8Test.java
@@ -194,7 +194,7 @@
private static byte[] encodeToByteArray(String message, int length, Utf8.Processor processor) {
byte[] output = new byte[length];
- processor.encodeUtf8(message, output, 0, output.length);
+ int unused = processor.encodeUtf8(message, output, 0, output.length);
return output;
}
diff --git a/java/core/src/test/java/com/google/protobuf/WireFormatTest.java b/java/core/src/test/java/com/google/protobuf/WireFormatTest.java
index 4afeff8..bbf8d0c 100644
--- a/java/core/src/test/java/com/google/protobuf/WireFormatTest.java
+++ b/java/core/src/test/java/com/google/protobuf/WireFormatTest.java
@@ -12,7 +12,6 @@
import protobuf_unittest.UnittestMset.RawMessageSet;
import protobuf_unittest.UnittestMset.TestMessageSetExtension1;
import protobuf_unittest.UnittestMset.TestMessageSetExtension2;
-import protobuf_unittest.UnittestMset.TestMessageSetExtension3;
import protobuf_unittest.UnittestProto;
import protobuf_unittest.UnittestProto.TestAllExtensions;
import protobuf_unittest.UnittestProto.TestAllTypes;
@@ -506,73 +505,6 @@
.isEqualTo(123);
}
- @Test
- public void testParseAndUpdateMessageSetExtensionEagerly() throws Exception {
- testParseAndUpdateMessageSetExtensionEagerlyWithFlag(true);
- }
-
- @Test
- public void testParseAndUpdateMessageSetExtensionNotEagerly() throws Exception {
- testParseAndUpdateMessageSetExtensionEagerlyWithFlag(false);
- }
-
- private void testParseAndUpdateMessageSetExtensionEagerlyWithFlag(boolean eagerParsing)
- throws Exception {
- ExtensionRegistryLite.setEagerlyParseMessageSets(eagerParsing);
- ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance();
- extensionRegistry.add(TestMessageSetExtension1.messageSetExtension);
- extensionRegistry.add(TestMessageSetExtension2.messageSetExtension);
- extensionRegistry.add(TestMessageSetExtension3.messageSetExtension);
-
- // Set up a RawMessageSet with 2 extensions
- RawMessageSet raw =
- RawMessageSet.newBuilder()
- .addItem(
- RawMessageSet.Item.newBuilder()
- .setTypeId(TYPE_ID_1)
- .setMessage(
- TestMessageSetExtension1.newBuilder().setI(123).build().toByteString())
- .build())
- .addItem(
- RawMessageSet.Item.newBuilder()
- .setTypeId(TYPE_ID_2)
- .setMessage(
- TestMessageSetExtension2.newBuilder().setStr("foo").build().toByteString())
- .build())
- .build();
-
- ByteString data = raw.toByteString();
-
- // Parse as a TestMessageSet.
- TestMessageSet messageSet = TestMessageSet.parseFrom(data, extensionRegistry);
-
- // Update one extension and add a new one.
- TestMessageSet.Builder builder = messageSet.toBuilder();
- builder.setExtension(
- TestMessageSetExtension2.messageSetExtension,
- TestMessageSetExtension2.newBuilder().setStr("bar").build());
- builder.setExtension(
- TestMessageSetExtension3.messageSetExtension,
- TestMessageSetExtension3.newBuilder().setRequiredInt(666).build());
-
- TestMessageSet updatedMessageSet = builder.build();
- // Check all 3 extensions
- assertThat(updatedMessageSet.getExtension(TestMessageSetExtension1.messageSetExtension).getI())
- .isEqualTo(123);
- assertThat(
- updatedMessageSet.getExtension(TestMessageSetExtension2.messageSetExtension).getStr())
- .isEqualTo("bar");
- assertThat(
- updatedMessageSet
- .getExtension(TestMessageSetExtension3.messageSetExtension)
- .getRequiredInt())
- .isEqualTo(666);
-
- // Serialize and re-parse, and make sure we get the same message back
- assertThat(TestMessageSet.parseFrom(updatedMessageSet.toByteString(), extensionRegistry))
- .isEqualTo(updatedMessageSet);
- }
-
// ================================================================
// oneof
@Test
diff --git a/java/internal/testing.bzl b/java/internal/testing.bzl
index b2a781b..ee8f80f 100644
--- a/java/internal/testing.bzl
+++ b/java/internal/testing.bzl
@@ -52,7 +52,7 @@
if test_prefix:
test_name = "%s%s" % (test_prefix, test_name)
test_names = test_names + [test_name]
- suite_name = prefix + '_' + test_name
+ suite_name = prefix + "_" + test_name
_gen_suite(
name = suite_name,
srcs = [src],
diff --git a/java/lite/pom.xml b/java/lite/pom.xml
index 3f9e389..38621da 100644
--- a/java/lite/pom.xml
+++ b/java/lite/pom.xml
@@ -161,6 +161,7 @@
<include>RawMessageInfo.java</include>
<include>Reader.java</include>
<include>RopeByteString.java</include>
+ <include>RuntimeVersion.java</include>
<include>Schema.java</include>
<include>SchemaFactory.java</include>
<include>SchemaUtil.java</include>
@@ -224,6 +225,7 @@
<exclude>Proto2SchemaTest.java</exclude>
<exclude>Proto2UnknownEnumValueTest.java</exclude>
<exclude>RepeatedFieldBuilderV3Test.java</exclude>
+ <exclude>RuntimeVersionTest.java</exclude>
<exclude>ServiceTest.java</exclude>
<exclude>SingleFieldBuilderV3Test.java</exclude>
<exclude>TestBadIdentifiers.java</exclude>
diff --git a/java/util/src/main/java/com/google/protobuf/util/Durations.java b/java/util/src/main/java/com/google/protobuf/util/Durations.java
index a73ab9f..05e0e21 100644
--- a/java/util/src/main/java/com/google/protobuf/util/Durations.java
+++ b/java/util/src/main/java/com/google/protobuf/util/Durations.java
@@ -426,13 +426,13 @@
* Add two durations.
*
* <!-- MOE:begin_intracomment_strip -->
- * <p>Do not use this method for new code. Instead, convert to {@link java.time.Duration} using
- * {@link com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the arithmetic there,
- * and convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoDuration}.
- *
- * <p>This method will be deprecated once most uses have been eliminated.
+ * @deprecated Do not use this method for new code. Instead, convert to {@link java.time.Duration}
+ * using {@link com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the
+ * arithmetic there, and convert back using {@link
+ * com.google.protobuf.util.JavaTimeConversions#toProtoDuration}.
* <!-- MOE:end_intracomment_strip -->
*/
+ @Deprecated // MOE:strip_line
public static Duration add(Duration d1, Duration d2) {
checkValid(d1);
checkValid(d2);
@@ -444,13 +444,13 @@
* Subtract a duration from another.
*
* <!-- MOE:begin_intracomment_strip -->
- * <p>Do not use this method for new code. Instead, convert to {@link java.time.Duration} using
- * {@link com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the arithmetic there,
- * and convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoDuration}.
- *
- * <p>This method will be deprecated once most uses have been eliminated.
+ * @deprecated Do not use this method for new code. Instead, convert to {@link java.time.Duration}
+ * using {@link com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the
+ * arithmetic there, and convert back using {@link
+ * com.google.protobuf.util.JavaTimeConversions#toProtoDuration}.
* <!-- MOE:end_intracomment_strip -->
*/
+ @Deprecated // MOE:strip_line
public static Duration subtract(Duration d1, Duration d2) {
checkValid(d1);
checkValid(d2);
diff --git a/java/util/src/main/java/com/google/protobuf/util/Timestamps.java b/java/util/src/main/java/com/google/protobuf/util/Timestamps.java
index 99daeb3..cdd8027 100644
--- a/java/util/src/main/java/com/google/protobuf/util/Timestamps.java
+++ b/java/util/src/main/java/com/google/protobuf/util/Timestamps.java
@@ -431,13 +431,13 @@
* Calculate the difference between two timestamps.
*
* <!-- MOE:begin_intracomment_strip -->
- * <p>Do not use this method for new code. Instead, convert to {@link java.time.Instant} using
- * {@link com.google.protobuf.util.JavaTimeConversions#toJavaInstant}, do the arithmetic there,
- * and convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoDuration}.
- *
- * <p>This method will be deprecated once most uses have been eliminated.
+ * @deprecated Do not use this method for new code. Instead, convert to {@link java.time.Instant}
+ * using {@link com.google.protobuf.util.JavaTimeConversions#toJavaInstant}, do the arithmetic
+ * there, and convert back using {@link
+ * com.google.protobuf.util.JavaTimeConversions#toProtoDuration}.
* <!-- MOE:end_intracomment_strip -->
*/
+ @Deprecated // MOE:strip_line
public static Duration between(Timestamp from, Timestamp to) {
checkValid(from);
checkValid(to);
@@ -450,15 +450,14 @@
* Add a duration to a timestamp.
*
* <!-- MOE:begin_intracomment_strip -->
- * <p>Do not use this method for new code. Instead, convert to {@link java.time.Instant} and
- * {@link java.time.Duration} using {@link
- * com.google.protobuf.util.JavaTimeConversions#toJavaInstant} and {@link
- * com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the arithmetic there, and
- * convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoTimestamp}.
- *
- * <p>This method will be deprecated once most uses have been eliminated.
+ * @deprecated Do not use this method for new code. Instead, convert to {@link java.time.Instant}
+ * and {@link java.time.Duration} using {@link
+ * com.google.protobuf.util.JavaTimeConversions#toJavaInstant} and {@link
+ * com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the arithmetic there, and
+ * convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoTimestamp}.
* <!-- MOE:end_intracomment_strip -->
*/
+ @Deprecated // MOE:strip_line
public static Timestamp add(Timestamp start, Duration length) {
checkValid(start);
Durations.checkValid(length);
@@ -471,15 +470,14 @@
* Subtract a duration from a timestamp.
*
* <!-- MOE:begin_intracomment_strip -->
- * <p>Do not use this method for new code. Instead, convert to {@link java.time.Instant} and
- * {@link java.time.Duration} using {@link
- * com.google.protobuf.util.JavaTimeConversions#toJavaInstant} and {@link
- * com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the arithmetic there, and
- * convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoTimestamp}.
- *
- * <p>This method will be deprecated once most uses have been eliminated.
+ * @deprecated Do not use this method for new code. Instead, convert to {@link java.time.Instant}
+ * and {@link java.time.Duration} using {@link
+ * com.google.protobuf.util.JavaTimeConversions#toJavaInstant} and {@link
+ * com.google.protobuf.util.JavaTimeConversions#toJavaDuration}, do the arithmetic there, and
+ * convert back using {@link com.google.protobuf.util.JavaTimeConversions#toProtoTimestamp}.
* <!-- MOE:end_intracomment_strip -->
*/
+ @Deprecated // MOE:strip_line
public static Timestamp subtract(Timestamp start, Duration length) {
checkValid(start);
Durations.checkValid(length);
diff --git a/lua/def.c b/lua/def.c
index 9affe52..1f9ee12 100644
--- a/lua/def.c
+++ b/lua/def.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/reflection/def.h"
diff --git a/lua/lua_proto_library.bzl b/lua/lua_proto_library.bzl
index 579eca1..0f80f81 100644
--- a/lua/lua_proto_library.bzl
+++ b/lua/lua_proto_library.bzl
@@ -1,4 +1,4 @@
-# Copyright (c) 2009-2021, Google LLC
+# Copyright (c) 2023, Google LLC
# All rights reserved.
#
# Use of this source code is governed by a BSD-style
diff --git a/lua/main.c b/lua/main.c
index 7f32209..8df1a85 100644
--- a/lua/main.c
+++ b/lua/main.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include <lauxlib.h>
#include <lua.h>
diff --git a/lua/msg.c b/lua/msg.c
index 7c0e0e7..c82dd86 100644
--- a/lua/msg.c
+++ b/lua/msg.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
/*
* lupb_Message -- Message/Array/Map objects in Lua/C that wrap upb
diff --git a/lua/test.proto b/lua/test.proto
index 92bcd1c..b7a20e1 100644
--- a/lua/test.proto
+++ b/lua/test.proto
@@ -1,39 +1,16 @@
-// Protocol Buffers - Google's data interchange format
+/// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
syntax = "proto2";
-import "google/protobuf/timestamp.proto";
-
package upb_lua_test;
+import "google/protobuf/timestamp.proto";
+
message MapTest {
map<string, double> map_string_double = 1;
}
diff --git a/lua/test_upb.lua b/lua/test_upb.lua
index 8ebf82b..14e00a8 100644
--- a/lua/test_upb.lua
+++ b/lua/test_upb.lua
@@ -2,33 +2,10 @@
Protocol Buffers - Google's data interchange format
Copyright 2023 Google LLC. All rights reserved.
-https://developers.google.com/protocol-buffers/
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google LLC nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Use of this source code is governed by a BSD-style
+license that can be found in the LICENSE file or at
+https://developers.google.com/open-source/licenses/bsd
--]]--------------------------------------------------------------------------
diff --git a/lua/upb.c b/lua/upb.c
index 4500fb4..e1e4061 100644
--- a/lua/upb.c
+++ b/lua/upb.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
/*
* require("lua") -- A Lua extension for upb.
diff --git a/lua/upb.h b/lua/upb.h
index 46ec911..adb1c82 100644
--- a/lua/upb.h
+++ b/lua/upb.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
/*
* Shared definitions for upb Lua modules.
diff --git a/lua/upb.lua b/lua/upb.lua
index 3533309..8b3baca 100644
--- a/lua/upb.lua
+++ b/lua/upb.lua
@@ -1,29 +1,11 @@
--[[--------------------------------------------------------------------------
- Copyright (c) 2009-2021, Google LLC
- All rights reserved.
+Protocol Buffers - Google's data interchange format
+Copyright 2023 Google LLC. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Google LLC nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Use of this source code is governed by a BSD-style
+license that can be found in the LICENSE file or at
+https://developers.google.com/open-source/licenses/bsd
--]]--------------------------------------------------------------------------
diff --git a/lua/upbc.cc b/lua/upbc.cc
index 4a274f2..bce4b7d 100644
--- a/lua/upbc.cc
+++ b/lua/upbc.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "google/protobuf/descriptor.pb.h"
#include "absl/strings/str_replace.h"
diff --git a/objectivec/BUILD.bazel b/objectivec/BUILD.bazel
index cb0d7c8..d9e18ee 100644
--- a/objectivec/BUILD.bazel
+++ b/objectivec/BUILD.bazel
@@ -160,6 +160,7 @@
conformance_test(
name = "conformance_test",
failure_list = "//conformance:failure_list_objc.txt",
+ maximum_edition = "2023",
target_compatible_with = ["@platforms//os:macos"],
testee = "//conformance:conformance_objc",
)
diff --git a/objectivec/GPBAny.pbobjc.h b/objectivec/GPBAny.pbobjc.h
index c0d389f..a9ae0c5 100644
--- a/objectivec/GPBAny.pbobjc.h
+++ b/objectivec/GPBAny.pbobjc.h
@@ -168,6 +168,9 @@
/** Must be a valid serialized protocol buffer of the above specified type. */
@property(nonatomic, readwrite, copy, null_resettable) NSData *value;
+// NOTE: There are some Objective-C specific methods/properties in
+// GPBWellKnownTypes.h that will likey be useful.
+
@end
NS_ASSUME_NONNULL_END
diff --git a/objectivec/GPBAny.pbobjc.m b/objectivec/GPBAny.pbobjc.m
index be6ce4e..65207e8 100644
--- a/objectivec/GPBAny.pbobjc.m
+++ b/objectivec/GPBAny.pbobjc.m
@@ -3,6 +3,7 @@
// source: google/protobuf/any.proto
#import "GPBProtocolBuffers_RuntimeSupport.h"
+#import "GPBWellKnownTypes.h"
#import "GPBAny.pbobjc.h"
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
@@ -39,6 +40,13 @@
.syntax = GPBFileSyntaxProto3
};
+// This is to help make sure that the GPBWellKnownTypes.* categories get linked and
+// developers do not have to use the `-ObjC` linker flag. More information
+// here: https://medium.com/ios-os-x-development/categories-in-static-libraries-78e41f8ddb96
+__attribute__((used)) static NSString* any_importCategories () {
+ return GPBWellKnownTypesErrorDomain;
+}
+
#pragma mark - GPBAny
@implementation GPBAny
diff --git a/objectivec/GPBDuration.pbobjc.h b/objectivec/GPBDuration.pbobjc.h
index 9e67afc..c5e27e4 100644
--- a/objectivec/GPBDuration.pbobjc.h
+++ b/objectivec/GPBDuration.pbobjc.h
@@ -123,6 +123,9 @@
**/
@property(nonatomic, readwrite) int32_t nanos;
+// NOTE: There are some Objective-C specific methods/properties in
+// GPBWellKnownTypes.h that will likey be useful.
+
@end
NS_ASSUME_NONNULL_END
diff --git a/objectivec/GPBDuration.pbobjc.m b/objectivec/GPBDuration.pbobjc.m
index f53c022..124342f 100644
--- a/objectivec/GPBDuration.pbobjc.m
+++ b/objectivec/GPBDuration.pbobjc.m
@@ -3,6 +3,7 @@
// source: google/protobuf/duration.proto
#import "GPBProtocolBuffers_RuntimeSupport.h"
+#import "GPBWellKnownTypes.h"
#import "GPBDuration.pbobjc.h"
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
@@ -39,6 +40,13 @@
.syntax = GPBFileSyntaxProto3
};
+// This is to help make sure that the GPBWellKnownTypes.* categories get linked and
+// developers do not have to use the `-ObjC` linker flag. More information
+// here: https://medium.com/ios-os-x-development/categories-in-static-libraries-78e41f8ddb96
+__attribute__((used)) static NSString* duration_importCategories () {
+ return GPBWellKnownTypesErrorDomain;
+}
+
#pragma mark - GPBDuration
@implementation GPBDuration
diff --git a/objectivec/GPBTimestamp.pbobjc.h b/objectivec/GPBTimestamp.pbobjc.h
index 510ecc0..bdf8ee4 100644
--- a/objectivec/GPBTimestamp.pbobjc.h
+++ b/objectivec/GPBTimestamp.pbobjc.h
@@ -152,6 +152,9 @@
**/
@property(nonatomic, readwrite) int32_t nanos;
+// NOTE: There are some Objective-C specific methods/properties in
+// GPBWellKnownTypes.h that will likey be useful.
+
@end
NS_ASSUME_NONNULL_END
diff --git a/objectivec/GPBTimestamp.pbobjc.m b/objectivec/GPBTimestamp.pbobjc.m
index f2b44fd..faf2015 100644
--- a/objectivec/GPBTimestamp.pbobjc.m
+++ b/objectivec/GPBTimestamp.pbobjc.m
@@ -3,6 +3,7 @@
// source: google/protobuf/timestamp.proto
#import "GPBProtocolBuffers_RuntimeSupport.h"
+#import "GPBWellKnownTypes.h"
#import "GPBTimestamp.pbobjc.h"
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
@@ -39,6 +40,13 @@
.syntax = GPBFileSyntaxProto3
};
+// This is to help make sure that the GPBWellKnownTypes.* categories get linked and
+// developers do not have to use the `-ObjC` linker flag. More information
+// here: https://medium.com/ios-os-x-development/categories-in-static-libraries-78e41f8ddb96
+__attribute__((used)) static NSString* timestamp_importCategories () {
+ return GPBWellKnownTypesErrorDomain;
+}
+
#pragma mark - GPBTimestamp
@implementation GPBTimestamp
diff --git a/objectivec/GPBWellKnownTypes.h b/objectivec/GPBWellKnownTypes.h
index 732cafb..4cf5bcf 100644
--- a/objectivec/GPBWellKnownTypes.h
+++ b/objectivec/GPBWellKnownTypes.h
@@ -201,6 +201,24 @@
*/
- (nullable GPBMessage *)unpackMessageClass:(Class)messageClass error:(NSError **)errorPtr;
+/**
+ * Unpacks the serialized message as if it was an instance of the given class.
+ *
+ * @note When checking type_url, the base URL is not checked, only the fully
+ * qualified name.
+ *
+ * @param messageClass The class to use to deserialize the contained message.
+ * @param extensionRegistry The extension registry to use to look up extensions.
+ * @param errorPtr Pointer to an error that will be populated if something
+ * goes wrong.
+ *
+ * @return An instance of the given class populated with the contained data, or
+ * nil on failure.
+ */
+- (nullable GPBMessage *)unpackMessageClass:(Class)messageClass
+ extensionRegistry:(nullable id<GPBExtensionRegistry>)extensionRegistry
+ error:(NSError **)errorPtr;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/objectivec/GPBWellKnownTypes.m b/objectivec/GPBWellKnownTypes.m
index 097c5ca..b212813 100644
--- a/objectivec/GPBWellKnownTypes.m
+++ b/objectivec/GPBWellKnownTypes.m
@@ -195,6 +195,12 @@
}
- (GPBMessage *)unpackMessageClass:(Class)messageClass error:(NSError **)errorPtr {
+ return [self unpackMessageClass:messageClass extensionRegistry:nil error:errorPtr];
+}
+
+- (nullable GPBMessage *)unpackMessageClass:(Class)messageClass
+ extensionRegistry:(nullable id<GPBExtensionRegistry>)extensionRegistry
+ error:(NSError **)errorPtr {
NSString *fullName = [messageClass descriptor].fullName;
if (fullName.length == 0) {
if (errorPtr) {
@@ -215,10 +221,7 @@
return nil;
}
- // Any is proto3, which means no extensions, so this assumes anything put
- // within an any also won't need extensions. A second helper could be added
- // if needed.
- return [messageClass parseFromData:self.value error:errorPtr];
+ return [messageClass parseFromData:self.value extensionRegistry:extensionRegistry error:errorPtr];
}
@end
diff --git a/php/ext/google/protobuf/config.m4 b/php/ext/google/protobuf/config.m4
index c5a665b..5e5fbf6 100644
--- a/php/ext/google/protobuf/config.m4
+++ b/php/ext/google/protobuf/config.m4
@@ -4,7 +4,7 @@
PHP_NEW_EXTENSION(
protobuf,
- arena.c array.c convert.c def.c map.c message.c names.c php-upb.c protobuf.c third_party/utf8_range/naive.c third_party/utf8_range/range2-neon.c third_party/utf8_range/range2-sse.c,
+ arena.c array.c convert.c def.c map.c message.c names.c php-upb.c protobuf.c third_party/utf8_range/utf8_range.c,
$ext_shared, , -std=gnu99 -I@ext_srcdir@/third_party/utf8_range)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/utf8_range)
diff --git a/php/ext/google/protobuf/message.c b/php/ext/google/protobuf/message.c
index af7cfc6..15461bf 100644
--- a/php/ext/google/protobuf/message.c
+++ b/php/ext/google/protobuf/message.c
@@ -400,11 +400,8 @@
static zend_object* Message_clone_obj(zend_object* object) {
Message* intern = (Message*)object;
const upb_MiniTable* t = upb_MessageDef_MiniTable(intern->desc->msgdef);
- upb_Message* clone = upb_Message_New(t, Arena_Get(&intern->arena));
-
- // TODO: copy unknown fields?
- // TODO: use official upb msg copy function
- memcpy(clone, intern->msg, t->size);
+ upb_Message* clone =
+ upb_Message_ShallowClone(intern->msg, t, Arena_Get(&intern->arena));
zval ret;
Message_GetPhpWrapper(&ret, intern->desc, clone, &intern->arena);
return Z_OBJ_P(&ret);
@@ -685,7 +682,6 @@
PHP_METHOD(Message, mergeFromString) {
Message* intern = (Message*)Z_OBJ_P(getThis());
char* data = NULL;
- char* data_copy = NULL;
zend_long data_len;
const upb_MiniTable* l = upb_MessageDef_MiniTable(intern->desc->msgdef);
upb_Arena* arena = Arena_Get(&intern->arena);
@@ -695,11 +691,7 @@
return;
}
- // TODO: avoid this copy when we can make the decoder copy.
- data_copy = upb_Arena_Malloc(arena, data_len);
- memcpy(data_copy, data, data_len);
-
- if (upb_Decode(data_copy, data_len, intern->msg, l, NULL, 0, arena) !=
+ if (upb_Decode(data, data_len, intern->msg, l, NULL, 0, arena) !=
kUpb_DecodeStatus_Ok) {
zend_throw_exception_ex(NULL, 0, "Error occurred during parsing");
return;
@@ -742,7 +734,6 @@
PHP_METHOD(Message, mergeFromJsonString) {
Message* intern = (Message*)Z_OBJ_P(getThis());
char* data = NULL;
- char* data_copy = NULL;
zend_long data_len;
upb_Arena* arena = Arena_Get(&intern->arena);
upb_Status status;
@@ -754,17 +745,12 @@
return;
}
- // TODO: avoid this copy when we can make the decoder copy.
- data_copy = upb_Arena_Malloc(arena, data_len + 1);
- memcpy(data_copy, data, data_len);
- data_copy[data_len] = '\0';
-
if (ignore_json_unknown) {
options |= upb_JsonDecode_IgnoreUnknown;
}
upb_Status_Clear(&status);
- if (!upb_JsonDecode(data_copy, data_len, intern->msg, intern->desc->msgdef,
+ if (!upb_JsonDecode(data, data_len, intern->msg, intern->desc->msgdef,
DescriptorPool_GetSymbolTable(), options, arena,
&status)) {
zend_throw_exception_ex(NULL, 0, "Error occurred during parsing: %s",
diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c
index 7ec2c57..2874f54 100644
--- a/php/ext/google/protobuf/php-upb.c
+++ b/php/ext/google/protobuf/php-upb.c
@@ -95,6 +95,13 @@
#define UPB_ALIGN_OF(type) offsetof (struct { char c; type member; }, member)
#endif
+#ifdef _MSC_VER
+// Some versions of our Windows compiler don't support the C11 syntax.
+#define UPB_ALIGN_AS(x) __declspec(align(x))
+#else
+#define UPB_ALIGN_AS(x) _Alignas(x)
+#endif
+
// Hints to the compiler about likely/unlikely branches.
#if defined (__GNUC__) || defined(__clang__)
#define UPB_LIKELY(x) __builtin_expect((bool)(x), 1)
@@ -181,6 +188,12 @@
#define UPB_PRIVATE(x) x##_dont_copy_me__upb_internal_use_only
+#ifdef UPB_ALLOW_PRIVATE_ACCESS__FOR_BITS_ONLY
+#define UPB_ONLYBITS(x) x
+#else
+#define UPB_ONLYBITS(x) UPB_PRIVATE(x)
+#endif
+
/* Configure whether fasttable is switched on or not. *************************/
#ifdef __has_attribute
@@ -392,7 +405,7 @@
// Must be last.
static const upb_MiniTableSub google_protobuf_FileDescriptorSet_submsgs[1] = {
- {.submsg = &google__protobuf__FileDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FileDescriptorProto_msg_init},
};
static const upb_MiniTableField google_protobuf_FileDescriptorSet__fields[1] = {
@@ -410,13 +423,13 @@
};
static const upb_MiniTableSub google_protobuf_FileDescriptorProto_submsgs[7] = {
- {.submsg = &google__protobuf__DescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto_msg_init},
- {.submsg = &google__protobuf__ServiceDescriptorProto_msg_init},
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__FileOptions_msg_init},
- {.submsg = &google__protobuf__SourceCodeInfo_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ServiceDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FileOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__SourceCodeInfo_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FileDescriptorProto__fields[13] = {
@@ -460,14 +473,14 @@
};
static const upb_MiniTableSub google_protobuf_DescriptorProto_submsgs[8] = {
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto__ExtensionRange_msg_init},
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__MessageOptions_msg_init},
- {.submsg = &google__protobuf__OneofDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto__ReservedRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto__ExtensionRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MessageOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__OneofDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto__ReservedRange_msg_init},
};
static const upb_MiniTableField google_protobuf_DescriptorProto__fields[10] = {
@@ -508,7 +521,7 @@
};
static const upb_MiniTableSub google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = {
- {.submsg = &google__protobuf__ExtensionRangeOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ExtensionRangeOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_DescriptorProto_ExtensionRange__fields[3] = {
@@ -547,10 +560,10 @@
};
static const upb_MiniTableSub google_protobuf_ExtensionRangeOptions_submsgs[4] = {
- {.submsg = &google__protobuf__ExtensionRangeOptions__Declaration_msg_init},
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_ExtensionRangeOptions_VerificationState_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ExtensionRangeOptions__Declaration_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_ExtensionRangeOptions_VerificationState_enum_init},
};
static const upb_MiniTableField google_protobuf_ExtensionRangeOptions__fields[4] = {
@@ -625,9 +638,9 @@
};
static const upb_MiniTableSub google_protobuf_FieldDescriptorProto_submsgs[3] = {
- {.submsg = &google__protobuf__FieldOptions_msg_init},
- {.subenum = &google_protobuf_FieldDescriptorProto_Label_enum_init},
- {.subenum = &google_protobuf_FieldDescriptorProto_Type_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldOptions_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldDescriptorProto_Label_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldDescriptorProto_Type_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldDescriptorProto__fields[11] = {
@@ -685,7 +698,7 @@
};
static const upb_MiniTableSub google_protobuf_OneofDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__OneofOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__OneofOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_OneofDescriptorProto__fields[2] = {
@@ -706,9 +719,9 @@
};
static const upb_MiniTableSub google_protobuf_EnumDescriptorProto_submsgs[3] = {
- {.submsg = &google__protobuf__EnumValueDescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumOptions_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumValueDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumDescriptorProto__fields[5] = {
@@ -753,7 +766,7 @@
};
static const upb_MiniTableSub google_protobuf_EnumValueDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__EnumValueOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumValueOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumValueDescriptorProto__fields[3] = {
@@ -775,8 +788,8 @@
};
static const upb_MiniTableSub google_protobuf_ServiceDescriptorProto_submsgs[2] = {
- {.submsg = &google__protobuf__MethodDescriptorProto_msg_init},
- {.submsg = &google__protobuf__ServiceOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MethodDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ServiceOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_ServiceDescriptorProto__fields[3] = {
@@ -798,7 +811,7 @@
};
static const upb_MiniTableSub google_protobuf_MethodDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__MethodOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MethodOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_MethodDescriptorProto__fields[6] = {
@@ -827,17 +840,17 @@
};
static const upb_MiniTableSub google_protobuf_FileOptions_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_FileOptions_OptimizeMode_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FileOptions_OptimizeMode_enum_init},
};
-static const upb_MiniTableField google_protobuf_FileOptions__fields[22] = {
- {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+static const upb_MiniTableField google_protobuf_FileOptions__fields[21] = {
+ {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
{9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)},
{10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
{16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
@@ -845,35 +858,34 @@
{23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
- {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
+ {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
+ {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
};
const upb_MiniTable google__protobuf__FileOptions_msg_init = {
&google_protobuf_FileOptions_submsgs[0],
&google_protobuf_FileOptions__fields[0],
- UPB_SIZE(112, 200), 22, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(248), 0,
+ UPB_SIZE(104, 192), 21, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(248), 0,
UPB_FASTTABLE_INIT({
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
- {0x001800000100000a, &upb_pss_1bt},
+ {0x001000000100000a, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
- {0x0028000002000042, &upb_pss_1bt},
+ {0x0020000002000042, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0008000004000050, &upb_psb1_1bt},
- {0x003800000500005a, &upb_pss_1bt},
+ {0x003000000500005a, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
@@ -883,23 +895,23 @@
{0x000b000008000190, &upb_psb1_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000c0000090001a0, &upb_psb1_2bt},
- {0x005800000e0002aa, &upb_pss_2bt},
+ {0x005000000e0002aa, &upb_pss_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000d00000a0001b8, &upb_psb1_2bt},
- {0x00780000100002c2, &upb_pss_2bt},
- {0x00880000110002ca, &upb_pss_2bt},
- {0x00100000120002d0, &upb_psb1_2bt},
+ {0x00700000100002c2, &upb_pss_2bt},
+ {0x00800000110002ca, &upb_pss_2bt},
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000e00000b0001d8, &upb_psb1_2bt},
- {0x00980000130002e2, &upb_pss_2bt},
- {0x00a80000140002ea, &upb_pss_2bt},
+ {0x00900000120002e2, &upb_pss_2bt},
+ {0x00a00000130002ea, &upb_pss_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000f00000c0001f8, &upb_psb1_2bt},
})
};
static const upb_MiniTableSub google_protobuf_MessageOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_MessageOptions__fields[7] = {
@@ -953,13 +965,13 @@
};
static const upb_MiniTableSub google_protobuf_FieldOptions_submsgs[7] = {
- {.submsg = &google__protobuf__FieldOptions__EditionDefault_msg_init},
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_FieldOptions_CType_enum_init},
- {.subenum = &google_protobuf_FieldOptions_JSType_enum_init},
- {.subenum = &google_protobuf_FieldOptions_OptionRetention_enum_init},
- {.subenum = &google_protobuf_FieldOptions_OptionTargetType_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldOptions__EditionDefault_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_CType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_JSType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_OptionRetention_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_OptionTargetType_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldOptions__fields[13] = {
@@ -1019,7 +1031,7 @@
};
static const upb_MiniTableSub google_protobuf_FieldOptions_EditionDefault_submsgs[1] = {
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldOptions_EditionDefault__fields[2] = {
@@ -1040,8 +1052,8 @@
};
static const upb_MiniTableSub google_protobuf_OneofOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_OneofOptions__fields[2] = {
@@ -1090,8 +1102,8 @@
};
static const upb_MiniTableSub google_protobuf_EnumOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumOptions__fields[5] = {
@@ -1143,8 +1155,8 @@
};
static const upb_MiniTableSub google_protobuf_EnumValueOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumValueOptions__fields[4] = {
@@ -1195,8 +1207,8 @@
};
static const upb_MiniTableSub google_protobuf_ServiceOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_ServiceOptions__fields[3] = {
@@ -1246,9 +1258,9 @@
};
static const upb_MiniTableSub google_protobuf_MethodOptions_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_MethodOptions_IdempotencyLevel_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_MethodOptions_IdempotencyLevel_enum_init},
};
static const upb_MiniTableField google_protobuf_MethodOptions__fields[4] = {
@@ -1299,7 +1311,7 @@
};
static const upb_MiniTableSub google_protobuf_UninterpretedOption_submsgs[1] = {
- {.submsg = &google__protobuf__UninterpretedOption__NamePart_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption__NamePart_msg_init},
};
static const upb_MiniTableField google_protobuf_UninterpretedOption__fields[7] = {
@@ -1354,12 +1366,12 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSet_submsgs[6] = {
- {.subenum = &google_protobuf_FeatureSet_FieldPresence_enum_init},
- {.subenum = &google_protobuf_FeatureSet_EnumType_enum_init},
- {.subenum = &google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init},
- {.subenum = &google_protobuf_FeatureSet_Utf8Validation_enum_init},
- {.subenum = &google_protobuf_FeatureSet_MessageEncoding_enum_init},
- {.subenum = &google_protobuf_FeatureSet_JsonFormat_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_FieldPresence_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_EnumType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_Utf8Validation_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_MessageEncoding_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_JsonFormat_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSet__fields[6] = {
@@ -1378,9 +1390,9 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSetDefaults_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSetDefaults__fields[3] = {
@@ -1400,8 +1412,8 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault__fields[2] = {
@@ -1422,7 +1434,7 @@
};
static const upb_MiniTableSub google_protobuf_SourceCodeInfo_submsgs[1] = {
- {.submsg = &google__protobuf__SourceCodeInfo__Location_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__SourceCodeInfo__Location_msg_init},
};
static const upb_MiniTableField google_protobuf_SourceCodeInfo__fields[1] = {
@@ -1464,7 +1476,7 @@
};
static const upb_MiniTableSub google_protobuf_GeneratedCodeInfo_submsgs[1] = {
- {.submsg = &google__protobuf__GeneratedCodeInfo__Annotation_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__GeneratedCodeInfo__Annotation_msg_init},
};
static const upb_MiniTableField google_protobuf_GeneratedCodeInfo__fields[1] = {
@@ -1482,7 +1494,7 @@
};
static const upb_MiniTableSub google_protobuf_GeneratedCodeInfo_Annotation_submsgs[1] = {
- {.subenum = &google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init},
};
static const upb_MiniTableField google_protobuf_GeneratedCodeInfo_Annotation__fields[5] = {
@@ -1546,7 +1558,7 @@
const upb_MiniTableEnum google_protobuf_Edition_enum_init = {
64,
- 6,
+ 7,
{
0x7,
0x0,
@@ -1556,6 +1568,7 @@
0x1869d,
0x1869e,
0x1869f,
+ 0x7fffffff,
},
};
@@ -1617,7 +1630,7 @@
64,
0,
{
- 0x7,
+ 0xd,
0x0,
},
};
@@ -1741,7 +1754,7 @@
* regenerated. */
-static const char descriptor[11620] = {'\n', ' ', 'g', 'o', 'o', 'g', 'l', 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '/', 'd', 'e', 's', 'c', 'r', 'i', 'p',
+static const char descriptor[11595] = {'\n', ' ', 'g', 'o', 'o', 'g', 'l', 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '/', 'd', 'e', 's', 'c', 'r', 'i', 'p',
't', 'o', 'r', '.', 'p', 'r', 'o', 't', 'o', '\022', '\017', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
'f', '\"', 'M', '\n', '\021', 'F', 'i', 'l', 'e', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'S', 'e', 't', '\022', '8', '\n',
'\004', 'f', 'i', 'l', 'e', '\030', '\001', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't',
@@ -1806,7 +1819,7 @@
'g', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\032', '7', '\n', '\r', 'R', 'e', 's',
'e', 'r', 'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', '\022', '\024', '\n', '\005', 's', 't', 'a', 'r', 't', '\030', '\001', ' ', '\001', '(', '\005',
'R', '\005', 's', 't', 'a', 'r', 't', '\022', '\020', '\n', '\003', 'e', 'n', 'd', '\030', '\002', ' ', '\001', '(', '\005', 'R', '\003', 'e', 'n', 'd',
-'\"', '\307', '\004', '\n', '\025', 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 'R', 'a', 'n', 'g', 'e', 'O', 'p', 't', 'i', 'o', 'n',
+'\"', '\314', '\004', '\n', '\025', 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 'R', 'a', 'n', 'g', 'e', 'O', 'p', 't', 'i', 'o', 'n',
's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n',
'\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f',
'.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i',
@@ -1816,391 +1829,390 @@
'n', 's', '.', 'D', 'e', 'c', 'l', 'a', 'r', 'a', 't', 'i', 'o', 'n', 'B', '\003', '\210', '\001', '\002', 'R', '\013', 'd', 'e', 'c', 'l',
'a', 'r', 'a', 't', 'i', 'o', 'n', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '2', ' ', '\001', '(', '\013',
'2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r',
-'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'h', '\n', '\014', 'v', 'e', 'r', 'i', 'f', 'i', 'c',
+'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'm', '\n', '\014', 'v', 'e', 'r', 'i', 'f', 'i', 'c',
'a', 't', 'i', 'o', 'n', '\030', '\003', ' ', '\001', '(', '\016', '2', '8', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't',
'o', 'b', 'u', 'f', '.', 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 'R', 'a', 'n', 'g', 'e', 'O', 'p', 't', 'i', 'o', 'n',
's', '.', 'V', 'e', 'r', 'i', 'f', 'i', 'c', 'a', 't', 'i', 'o', 'n', 'S', 't', 'a', 't', 'e', ':', '\n', 'U', 'N', 'V', 'E',
-'R', 'I', 'F', 'I', 'E', 'D', 'R', '\014', 'v', 'e', 'r', 'i', 'f', 'i', 'c', 'a', 't', 'i', 'o', 'n', '\032', '\224', '\001', '\n', '\013',
-'D', 'e', 'c', 'l', 'a', 'r', 'a', 't', 'i', 'o', 'n', '\022', '\026', '\n', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\030', '\001', ' ', '\001',
-'(', '\005', 'R', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\022', '\033', '\n', '\t', 'f', 'u', 'l', 'l', '_', 'n', 'a', 'm', 'e', '\030', '\002',
-' ', '\001', '(', '\t', 'R', '\010', 'f', 'u', 'l', 'l', 'N', 'a', 'm', 'e', '\022', '\022', '\n', '\004', 't', 'y', 'p', 'e', '\030', '\003', ' ',
-'\001', '(', '\t', 'R', '\004', 't', 'y', 'p', 'e', '\022', '\032', '\n', '\010', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', '\030', '\005', ' ', '\001',
-'(', '\010', 'R', '\010', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', '\022', '\032', '\n', '\010', 'r', 'e', 'p', 'e', 'a', 't', 'e', 'd', '\030',
-'\006', ' ', '\001', '(', '\010', 'R', '\010', 'r', 'e', 'p', 'e', 'a', 't', 'e', 'd', 'J', '\004', '\010', '\004', '\020', '\005', '\"', '4', '\n', '\021',
-'V', 'e', 'r', 'i', 'f', 'i', 'c', 'a', 't', 'i', 'o', 'n', 'S', 't', 'a', 't', 'e', '\022', '\017', '\n', '\013', 'D', 'E', 'C', 'L',
-'A', 'R', 'A', 'T', 'I', 'O', 'N', '\020', '\000', '\022', '\016', '\n', '\n', 'U', 'N', 'V', 'E', 'R', 'I', 'F', 'I', 'E', 'D', '\020', '\001',
-'*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\301', '\006', '\n', '\024', 'F', 'i', 'e', 'l', 'd', 'D', 'e', 's', 'c',
-'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t',
-'R', '\004', 'n', 'a', 'm', 'e', '\022', '\026', '\n', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\030', '\003', ' ', '\001', '(', '\005', 'R', '\006', 'n',
-'u', 'm', 'b', 'e', 'r', '\022', 'A', '\n', '\005', 'l', 'a', 'b', 'e', 'l', '\030', '\004', ' ', '\001', '(', '\016', '2', '+', '.', 'g', 'o',
-'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'D', 'e', 's', 'c', 'r', 'i',
-'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '.', 'L', 'a', 'b', 'e', 'l', 'R', '\005', 'l', 'a', 'b', 'e', 'l', '\022', '>', '\n',
-'\004', 't', 'y', 'p', 'e', '\030', '\005', ' ', '\001', '(', '\016', '2', '*', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't',
-'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o',
-'.', 'T', 'y', 'p', 'e', 'R', '\004', 't', 'y', 'p', 'e', '\022', '\033', '\n', '\t', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e', '\030',
-'\006', ' ', '\001', '(', '\t', 'R', '\010', 't', 'y', 'p', 'e', 'N', 'a', 'm', 'e', '\022', '\032', '\n', '\010', 'e', 'x', 't', 'e', 'n', 'd',
-'e', 'e', '\030', '\002', ' ', '\001', '(', '\t', 'R', '\010', 'e', 'x', 't', 'e', 'n', 'd', 'e', 'e', '\022', '#', '\n', '\r', 'd', 'e', 'f',
-'a', 'u', 'l', 't', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\007', ' ', '\001', '(', '\t', 'R', '\014', 'd', 'e', 'f', 'a', 'u', 'l', 't',
-'V', 'a', 'l', 'u', 'e', '\022', '\037', '\n', '\013', 'o', 'n', 'e', 'o', 'f', '_', 'i', 'n', 'd', 'e', 'x', '\030', '\t', ' ', '\001', '(',
-'\005', 'R', '\n', 'o', 'n', 'e', 'o', 'f', 'I', 'n', 'd', 'e', 'x', '\022', '\033', '\n', '\t', 'j', 's', 'o', 'n', '_', 'n', 'a', 'm',
-'e', '\030', '\n', ' ', '\001', '(', '\t', 'R', '\010', 'j', 's', 'o', 'n', 'N', 'a', 'm', 'e', '\022', '7', '\n', '\007', 'o', 'p', 't', 'i',
-'o', 'n', 's', '\030', '\010', ' ', '\001', '(', '\013', '2', '\035', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b',
-'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\022',
-'\'', '\n', '\017', 'p', 'r', 'o', 't', 'o', '3', '_', 'o', 'p', 't', 'i', 'o', 'n', 'a', 'l', '\030', '\021', ' ', '\001', '(', '\010', 'R',
-'\016', 'p', 'r', 'o', 't', 'o', '3', 'O', 'p', 't', 'i', 'o', 'n', 'a', 'l', '\"', '\266', '\002', '\n', '\004', 'T', 'y', 'p', 'e', '\022',
-'\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'D', 'O', 'U', 'B', 'L', 'E', '\020', '\001', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_',
-'F', 'L', 'O', 'A', 'T', '\020', '\002', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'I', 'N', 'T', '6', '4', '\020', '\003', '\022', '\017',
-'\n', '\013', 'T', 'Y', 'P', 'E', '_', 'U', 'I', 'N', 'T', '6', '4', '\020', '\004', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'I',
-'N', 'T', '3', '2', '\020', '\005', '\022', '\020', '\n', '\014', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'X', 'E', 'D', '6', '4', '\020', '\006', '\022',
-'\020', '\n', '\014', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'X', 'E', 'D', '3', '2', '\020', '\007', '\022', '\r', '\n', '\t', 'T', 'Y', 'P', 'E',
-'_', 'B', 'O', 'O', 'L', '\020', '\010', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'S', 'T', 'R', 'I', 'N', 'G', '\020', '\t', '\022',
-'\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'G', 'R', 'O', 'U', 'P', '\020', '\n', '\022', '\020', '\n', '\014', 'T', 'Y', 'P', 'E', '_', 'M',
-'E', 'S', 'S', 'A', 'G', 'E', '\020', '\013', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'B', 'Y', 'T', 'E', 'S', '\020', '\014', '\022',
-'\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'U', 'I', 'N', 'T', '3', '2', '\020', '\r', '\022', '\r', '\n', '\t', 'T', 'Y', 'P', 'E', '_',
-'E', 'N', 'U', 'M', '\020', '\016', '\022', '\021', '\n', '\r', 'T', 'Y', 'P', 'E', '_', 'S', 'F', 'I', 'X', 'E', 'D', '3', '2', '\020', '\017',
-'\022', '\021', '\n', '\r', 'T', 'Y', 'P', 'E', '_', 'S', 'F', 'I', 'X', 'E', 'D', '6', '4', '\020', '\020', '\022', '\017', '\n', '\013', 'T', 'Y',
-'P', 'E', '_', 'S', 'I', 'N', 'T', '3', '2', '\020', '\021', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'S', 'I', 'N', 'T', '6',
-'4', '\020', '\022', '\"', 'C', '\n', '\005', 'L', 'a', 'b', 'e', 'l', '\022', '\022', '\n', '\016', 'L', 'A', 'B', 'E', 'L', '_', 'O', 'P', 'T',
-'I', 'O', 'N', 'A', 'L', '\020', '\001', '\022', '\022', '\n', '\016', 'L', 'A', 'B', 'E', 'L', '_', 'R', 'E', 'P', 'E', 'A', 'T', 'E', 'D',
-'\020', '\003', '\022', '\022', '\n', '\016', 'L', 'A', 'B', 'E', 'L', '_', 'R', 'E', 'Q', 'U', 'I', 'R', 'E', 'D', '\020', '\002', '\"', 'c', '\n',
-'\024', 'O', 'n', 'e', 'o', 'f', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004',
-'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '7', '\n', '\007', 'o', 'p', 't', 'i', 'o',
-'n', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '\035', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
-'f', '.', 'O', 'n', 'e', 'o', 'f', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\"', '\343',
-'\002', '\n', '\023', 'E', 'n', 'u', 'm', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n',
-'\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '?', '\n', '\005', 'v', 'a', 'l', 'u',
-'e', '\030', '\002', ' ', '\003', '(', '\013', '2', ')', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f',
-'.', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o',
-'R', '\005', 'v', 'a', 'l', 'u', 'e', '\022', '6', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(', '\013', '2',
-'\034', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'n', 'u', 'm', 'O', 'p', 't',
-'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\022', ']', '\n', '\016', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd',
-'_', 'r', 'a', 'n', 'g', 'e', '\030', '\004', ' ', '\003', '(', '\013', '2', '6', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o',
-'t', 'o', 'b', 'u', 'f', '.', 'E', 'n', 'u', 'm', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o',
-'.', 'E', 'n', 'u', 'm', 'R', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', 'R', '\r', 'r', 'e', 's', 'e', 'r',
-'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', '\022', '#', '\n', '\r', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', '_', 'n', 'a', 'm', 'e',
-'\030', '\005', ' ', '\003', '(', '\t', 'R', '\014', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'N', 'a', 'm', 'e', '\032', ';', '\n', '\021', 'E',
-'n', 'u', 'm', 'R', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', '\022', '\024', '\n', '\005', 's', 't', 'a', 'r', 't',
-'\030', '\001', ' ', '\001', '(', '\005', 'R', '\005', 's', 't', 'a', 'r', 't', '\022', '\020', '\n', '\003', 'e', 'n', 'd', '\030', '\002', ' ', '\001', '(',
-'\005', 'R', '\003', 'e', 'n', 'd', '\"', '\203', '\001', '\n', '\030', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e', 'D', 'e', 's', 'c', 'r',
-'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R',
-'\004', 'n', 'a', 'm', 'e', '\022', '\026', '\n', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\030', '\002', ' ', '\001', '(', '\005', 'R', '\006', 'n', 'u',
-'m', 'b', 'e', 'r', '\022', ';', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(', '\013', '2', '!', '.', 'g',
-'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e', 'O',
-'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\"', '\247', '\001', '\n', '\026', 'S', 'e', 'r', 'v', 'i',
-'c', 'e', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e',
-'\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '>', '\n', '\006', 'm', 'e', 't', 'h', 'o', 'd', '\030', '\002', ' ',
-'\003', '(', '\013', '2', '&', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'M', 'e', 't',
-'h', 'o', 'd', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', 'R', '\006', 'm', 'e', 't', 'h', 'o',
-'d', '\022', '9', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(', '\013', '2', '\037', '.', 'g', 'o', 'o', 'g',
-'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 'O', 'p', 't', 'i', 'o', 'n',
-'s', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\"', '\211', '\002', '\n', '\025', 'M', 'e', 't', 'h', 'o', 'd', 'D', 'e', 's', 'c',
-'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t',
-'R', '\004', 'n', 'a', 'm', 'e', '\022', '\035', '\n', '\n', 'i', 'n', 'p', 'u', 't', '_', 't', 'y', 'p', 'e', '\030', '\002', ' ', '\001', '(',
-'\t', 'R', '\t', 'i', 'n', 'p', 'u', 't', 'T', 'y', 'p', 'e', '\022', '\037', '\n', '\013', 'o', 'u', 't', 'p', 'u', 't', '_', 't', 'y',
-'p', 'e', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\n', 'o', 'u', 't', 'p', 'u', 't', 'T', 'y', 'p', 'e', '\022', '8', '\n', '\007', 'o',
-'p', 't', 'i', 'o', 'n', 's', '\030', '\004', ' ', '\001', '(', '\013', '2', '\036', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o',
-'t', 'o', 'b', 'u', 'f', '.', 'M', 'e', 't', 'h', 'o', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i',
-'o', 'n', 's', '\022', '0', '\n', '\020', 'c', 'l', 'i', 'e', 'n', 't', '_', 's', 't', 'r', 'e', 'a', 'm', 'i', 'n', 'g', '\030', '\005',
-' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\017', 'c', 'l', 'i', 'e', 'n', 't', 'S', 't', 'r', 'e', 'a', 'm',
-'i', 'n', 'g', '\022', '0', '\n', '\020', 's', 'e', 'r', 'v', 'e', 'r', '_', 's', 't', 'r', 'e', 'a', 'm', 'i', 'n', 'g', '\030', '\006',
-' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\017', 's', 'e', 'r', 'v', 'e', 'r', 'S', 't', 'r', 'e', 'a', 'm',
-'i', 'n', 'g', '\"', '\312', '\t', '\n', '\013', 'F', 'i', 'l', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '!', '\n', '\014', 'j', 'a',
-'v', 'a', '_', 'p', 'a', 'c', 'k', 'a', 'g', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\013', 'j', 'a', 'v', 'a', 'P', 'a', 'c',
-'k', 'a', 'g', 'e', '\022', '0', '\n', '\024', 'j', 'a', 'v', 'a', '_', 'o', 'u', 't', 'e', 'r', '_', 'c', 'l', 'a', 's', 's', 'n',
-'a', 'm', 'e', '\030', '\010', ' ', '\001', '(', '\t', 'R', '\022', 'j', 'a', 'v', 'a', 'O', 'u', 't', 'e', 'r', 'C', 'l', 'a', 's', 's',
-'n', 'a', 'm', 'e', '\022', '5', '\n', '\023', 'j', 'a', 'v', 'a', '_', 'm', 'u', 'l', 't', 'i', 'p', 'l', 'e', '_', 'f', 'i', 'l',
-'e', 's', '\030', '\n', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\021', 'j', 'a', 'v', 'a', 'M', 'u', 'l', 't',
-'i', 'p', 'l', 'e', 'F', 'i', 'l', 'e', 's', '\022', 'D', '\n', '\035', 'j', 'a', 'v', 'a', '_', 'g', 'e', 'n', 'e', 'r', 'a', 't',
-'e', '_', 'e', 'q', 'u', 'a', 'l', 's', '_', 'a', 'n', 'd', '_', 'h', 'a', 's', 'h', '\030', '\024', ' ', '\001', '(', '\010', 'B', '\002',
-'\030', '\001', 'R', '\031', 'j', 'a', 'v', 'a', 'G', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'E', 'q', 'u', 'a', 'l', 's', 'A', 'n', 'd',
-'H', 'a', 's', 'h', '\022', ':', '\n', '\026', 'j', 'a', 'v', 'a', '_', 's', 't', 'r', 'i', 'n', 'g', '_', 'c', 'h', 'e', 'c', 'k',
-'_', 'u', 't', 'f', '8', '\030', '\033', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\023', 'j', 'a', 'v', 'a', 'S',
-'t', 'r', 'i', 'n', 'g', 'C', 'h', 'e', 'c', 'k', 'U', 't', 'f', '8', '\022', 'S', '\n', '\014', 'o', 'p', 't', 'i', 'm', 'i', 'z',
-'e', '_', 'f', 'o', 'r', '\030', '\t', ' ', '\001', '(', '\016', '2', ')', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't',
-'o', 'b', 'u', 'f', '.', 'F', 'i', 'l', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'O', 'p', 't', 'i', 'm', 'i', 'z', 'e',
-'M', 'o', 'd', 'e', ':', '\005', 'S', 'P', 'E', 'E', 'D', 'R', '\013', 'o', 'p', 't', 'i', 'm', 'i', 'z', 'e', 'F', 'o', 'r', '\022',
-'\035', '\n', '\n', 'g', 'o', '_', 'p', 'a', 'c', 'k', 'a', 'g', 'e', '\030', '\013', ' ', '\001', '(', '\t', 'R', '\t', 'g', 'o', 'P', 'a',
-'c', 'k', 'a', 'g', 'e', '\022', '5', '\n', '\023', 'c', 'c', '_', 'g', 'e', 'n', 'e', 'r', 'i', 'c', '_', 's', 'e', 'r', 'v', 'i',
-'c', 'e', 's', '\030', '\020', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\021', 'c', 'c', 'G', 'e', 'n', 'e', 'r',
-'i', 'c', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\022', '9', '\n', '\025', 'j', 'a', 'v', 'a', '_', 'g', 'e', 'n', 'e', 'r', 'i',
-'c', '_', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\030', '\021', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\023',
-'j', 'a', 'v', 'a', 'G', 'e', 'n', 'e', 'r', 'i', 'c', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\022', '5', '\n', '\023', 'p', 'y',
-'_', 'g', 'e', 'n', 'e', 'r', 'i', 'c', '_', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\030', '\022', ' ', '\001', '(', '\010', ':', '\005',
-'f', 'a', 'l', 's', 'e', 'R', '\021', 'p', 'y', 'G', 'e', 'n', 'e', 'r', 'i', 'c', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\022',
-'7', '\n', '\024', 'p', 'h', 'p', '_', 'g', 'e', 'n', 'e', 'r', 'i', 'c', '_', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\030', '*',
-' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\022', 'p', 'h', 'p', 'G', 'e', 'n', 'e', 'r', 'i', 'c', 'S', 'e',
-'r', 'v', 'i', 'c', 'e', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '\027', ' ', '\001', '(',
-'\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', '.', '\n', '\020', 'c',
-'c', '_', 'e', 'n', 'a', 'b', 'l', 'e', '_', 'a', 'r', 'e', 'n', 'a', 's', '\030', '\037', ' ', '\001', '(', '\010', ':', '\004', 't', 'r',
-'u', 'e', 'R', '\016', 'c', 'c', 'E', 'n', 'a', 'b', 'l', 'e', 'A', 'r', 'e', 'n', 'a', 's', '\022', '*', '\n', '\021', 'o', 'b', 'j',
-'c', '_', 'c', 'l', 'a', 's', 's', '_', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '$', ' ', '\001', '(', '\t', 'R', '\017', 'o', 'b', 'j',
-'c', 'C', 'l', 'a', 's', 's', 'P', 'r', 'e', 'f', 'i', 'x', '\022', ')', '\n', '\020', 'c', 's', 'h', 'a', 'r', 'p', '_', 'n', 'a',
-'m', 'e', 's', 'p', 'a', 'c', 'e', '\030', '%', ' ', '\001', '(', '\t', 'R', '\017', 'c', 's', 'h', 'a', 'r', 'p', 'N', 'a', 'm', 'e',
-'s', 'p', 'a', 'c', 'e', '\022', '!', '\n', '\014', 's', 'w', 'i', 'f', 't', '_', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '\'', ' ', '\001',
-'(', '\t', 'R', '\013', 's', 'w', 'i', 'f', 't', 'P', 'r', 'e', 'f', 'i', 'x', '\022', '(', '\n', '\020', 'p', 'h', 'p', '_', 'c', 'l',
-'a', 's', 's', '_', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '(', ' ', '\001', '(', '\t', 'R', '\016', 'p', 'h', 'p', 'C', 'l', 'a', 's',
-'s', 'P', 'r', 'e', 'f', 'i', 'x', '\022', '#', '\n', '\r', 'p', 'h', 'p', '_', 'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\030',
-')', ' ', '\001', '(', '\t', 'R', '\014', 'p', 'h', 'p', 'N', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\022', '4', '\n', '\026', 'p', 'h',
-'p', '_', 'm', 'e', 't', 'a', 'd', 'a', 't', 'a', '_', 'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\030', ',', ' ', '\001', '(',
-'\t', 'R', '\024', 'p', 'h', 'p', 'M', 'e', 't', 'a', 'd', 'a', 't', 'a', 'N', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\022', '!',
-'\n', '\014', 'r', 'u', 'b', 'y', '_', 'p', 'a', 'c', 'k', 'a', 'g', 'e', '\030', '-', ' ', '\001', '(', '\t', 'R', '\013', 'r', 'u', 'b',
-'y', 'P', 'a', 'c', 'k', 'a', 'g', 'e', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '2', ' ', '\001', '(',
-'\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u',
-'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e',
-'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g',
-'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e',
-'t', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O',
-'p', 't', 'i', 'o', 'n', '\"', ':', '\n', '\014', 'O', 'p', 't', 'i', 'm', 'i', 'z', 'e', 'M', 'o', 'd', 'e', '\022', '\t', '\n', '\005',
-'S', 'P', 'E', 'E', 'D', '\020', '\001', '\022', '\r', '\n', '\t', 'C', 'O', 'D', 'E', '_', 'S', 'I', 'Z', 'E', '\020', '\002', '\022', '\020', '\n',
-'\014', 'L', 'I', 'T', 'E', '_', 'R', 'U', 'N', 'T', 'I', 'M', 'E', '\020', '\003', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200',
-'\002', 'J', '\004', '\010', '&', '\020', '\'', '\"', '\364', '\003', '\n', '\016', 'M', 'e', 's', 's', 'a', 'g', 'e', 'O', 'p', 't', 'i', 'o', 'n',
-'s', '\022', '<', '\n', '\027', 'm', 'e', 's', 's', 'a', 'g', 'e', '_', 's', 'e', 't', '_', 'w', 'i', 'r', 'e', '_', 'f', 'o', 'r',
-'m', 'a', 't', '\030', '\001', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\024', 'm', 'e', 's', 's', 'a', 'g', 'e',
-'S', 'e', 't', 'W', 'i', 'r', 'e', 'F', 'o', 'r', 'm', 'a', 't', '\022', 'L', '\n', '\037', 'n', 'o', '_', 's', 't', 'a', 'n', 'd',
-'a', 'r', 'd', '_', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', '_', 'a', 'c', 'c', 'e', 's', 's', 'o', 'r', '\030', '\002',
-' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\034', 'n', 'o', 'S', 't', 'a', 'n', 'd', 'a', 'r', 'd', 'D', 'e',
-'s', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'A', 'c', 'c', 'e', 's', 's', 'o', 'r', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e',
+'R', 'I', 'F', 'I', 'E', 'D', 'B', '\003', '\210', '\001', '\002', 'R', '\014', 'v', 'e', 'r', 'i', 'f', 'i', 'c', 'a', 't', 'i', 'o', 'n',
+'\032', '\224', '\001', '\n', '\013', 'D', 'e', 'c', 'l', 'a', 'r', 'a', 't', 'i', 'o', 'n', '\022', '\026', '\n', '\006', 'n', 'u', 'm', 'b', 'e',
+'r', '\030', '\001', ' ', '\001', '(', '\005', 'R', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\022', '\033', '\n', '\t', 'f', 'u', 'l', 'l', '_', 'n',
+'a', 'm', 'e', '\030', '\002', ' ', '\001', '(', '\t', 'R', '\010', 'f', 'u', 'l', 'l', 'N', 'a', 'm', 'e', '\022', '\022', '\n', '\004', 't', 'y',
+'p', 'e', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\004', 't', 'y', 'p', 'e', '\022', '\032', '\n', '\010', 'r', 'e', 's', 'e', 'r', 'v', 'e',
+'d', '\030', '\005', ' ', '\001', '(', '\010', 'R', '\010', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', '\022', '\032', '\n', '\010', 'r', 'e', 'p', 'e',
+'a', 't', 'e', 'd', '\030', '\006', ' ', '\001', '(', '\010', 'R', '\010', 'r', 'e', 'p', 'e', 'a', 't', 'e', 'd', 'J', '\004', '\010', '\004', '\020',
+'\005', '\"', '4', '\n', '\021', 'V', 'e', 'r', 'i', 'f', 'i', 'c', 'a', 't', 'i', 'o', 'n', 'S', 't', 'a', 't', 'e', '\022', '\017', '\n',
+'\013', 'D', 'E', 'C', 'L', 'A', 'R', 'A', 'T', 'I', 'O', 'N', '\020', '\000', '\022', '\016', '\n', '\n', 'U', 'N', 'V', 'E', 'R', 'I', 'F',
+'I', 'E', 'D', '\020', '\001', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\301', '\006', '\n', '\024', 'F', 'i', 'e', 'l',
+'d', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030',
+'\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '\026', '\n', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\030', '\003', ' ', '\001',
+'(', '\005', 'R', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\022', 'A', '\n', '\005', 'l', 'a', 'b', 'e', 'l', '\030', '\004', ' ', '\001', '(', '\016',
+'2', '+', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'D',
+'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '.', 'L', 'a', 'b', 'e', 'l', 'R', '\005', 'l', 'a', 'b',
+'e', 'l', '\022', '>', '\n', '\004', 't', 'y', 'p', 'e', '\030', '\005', ' ', '\001', '(', '\016', '2', '*', '.', 'g', 'o', 'o', 'g', 'l', 'e',
+'.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r',
+'P', 'r', 'o', 't', 'o', '.', 'T', 'y', 'p', 'e', 'R', '\004', 't', 'y', 'p', 'e', '\022', '\033', '\n', '\t', 't', 'y', 'p', 'e', '_',
+'n', 'a', 'm', 'e', '\030', '\006', ' ', '\001', '(', '\t', 'R', '\010', 't', 'y', 'p', 'e', 'N', 'a', 'm', 'e', '\022', '\032', '\n', '\010', 'e',
+'x', 't', 'e', 'n', 'd', 'e', 'e', '\030', '\002', ' ', '\001', '(', '\t', 'R', '\010', 'e', 'x', 't', 'e', 'n', 'd', 'e', 'e', '\022', '#',
+'\n', '\r', 'd', 'e', 'f', 'a', 'u', 'l', 't', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\007', ' ', '\001', '(', '\t', 'R', '\014', 'd', 'e',
+'f', 'a', 'u', 'l', 't', 'V', 'a', 'l', 'u', 'e', '\022', '\037', '\n', '\013', 'o', 'n', 'e', 'o', 'f', '_', 'i', 'n', 'd', 'e', 'x',
+'\030', '\t', ' ', '\001', '(', '\005', 'R', '\n', 'o', 'n', 'e', 'o', 'f', 'I', 'n', 'd', 'e', 'x', '\022', '\033', '\n', '\t', 'j', 's', 'o',
+'n', '_', 'n', 'a', 'm', 'e', '\030', '\n', ' ', '\001', '(', '\t', 'R', '\010', 'j', 's', 'o', 'n', 'N', 'a', 'm', 'e', '\022', '7', '\n',
+'\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\010', ' ', '\001', '(', '\013', '2', '\035', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p',
+'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't',
+'i', 'o', 'n', 's', '\022', '\'', '\n', '\017', 'p', 'r', 'o', 't', 'o', '3', '_', 'o', 'p', 't', 'i', 'o', 'n', 'a', 'l', '\030', '\021',
+' ', '\001', '(', '\010', 'R', '\016', 'p', 'r', 'o', 't', 'o', '3', 'O', 'p', 't', 'i', 'o', 'n', 'a', 'l', '\"', '\266', '\002', '\n', '\004',
+'T', 'y', 'p', 'e', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'D', 'O', 'U', 'B', 'L', 'E', '\020', '\001', '\022', '\016', '\n', '\n',
+'T', 'Y', 'P', 'E', '_', 'F', 'L', 'O', 'A', 'T', '\020', '\002', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'I', 'N', 'T', '6',
+'4', '\020', '\003', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'U', 'I', 'N', 'T', '6', '4', '\020', '\004', '\022', '\016', '\n', '\n', 'T',
+'Y', 'P', 'E', '_', 'I', 'N', 'T', '3', '2', '\020', '\005', '\022', '\020', '\n', '\014', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'X', 'E', 'D',
+'6', '4', '\020', '\006', '\022', '\020', '\n', '\014', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'X', 'E', 'D', '3', '2', '\020', '\007', '\022', '\r', '\n',
+'\t', 'T', 'Y', 'P', 'E', '_', 'B', 'O', 'O', 'L', '\020', '\010', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'S', 'T', 'R', 'I',
+'N', 'G', '\020', '\t', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'G', 'R', 'O', 'U', 'P', '\020', '\n', '\022', '\020', '\n', '\014', 'T',
+'Y', 'P', 'E', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\020', '\013', '\022', '\016', '\n', '\n', 'T', 'Y', 'P', 'E', '_', 'B', 'Y', 'T',
+'E', 'S', '\020', '\014', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'U', 'I', 'N', 'T', '3', '2', '\020', '\r', '\022', '\r', '\n', '\t',
+'T', 'Y', 'P', 'E', '_', 'E', 'N', 'U', 'M', '\020', '\016', '\022', '\021', '\n', '\r', 'T', 'Y', 'P', 'E', '_', 'S', 'F', 'I', 'X', 'E',
+'D', '3', '2', '\020', '\017', '\022', '\021', '\n', '\r', 'T', 'Y', 'P', 'E', '_', 'S', 'F', 'I', 'X', 'E', 'D', '6', '4', '\020', '\020', '\022',
+'\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_', 'S', 'I', 'N', 'T', '3', '2', '\020', '\021', '\022', '\017', '\n', '\013', 'T', 'Y', 'P', 'E', '_',
+'S', 'I', 'N', 'T', '6', '4', '\020', '\022', '\"', 'C', '\n', '\005', 'L', 'a', 'b', 'e', 'l', '\022', '\022', '\n', '\016', 'L', 'A', 'B', 'E',
+'L', '_', 'O', 'P', 'T', 'I', 'O', 'N', 'A', 'L', '\020', '\001', '\022', '\022', '\n', '\016', 'L', 'A', 'B', 'E', 'L', '_', 'R', 'E', 'P',
+'E', 'A', 'T', 'E', 'D', '\020', '\003', '\022', '\022', '\n', '\016', 'L', 'A', 'B', 'E', 'L', '_', 'R', 'E', 'Q', 'U', 'I', 'R', 'E', 'D',
+'\020', '\002', '\"', 'c', '\n', '\024', 'O', 'n', 'e', 'o', 'f', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't',
+'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '7', '\n', '\007',
+'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '\035', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r',
+'o', 't', 'o', 'b', 'u', 'f', '.', 'O', 'n', 'e', 'o', 'f', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i',
+'o', 'n', 's', '\"', '\343', '\002', '\n', '\023', 'E', 'n', 'u', 'm', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o',
+'t', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '?', '\n',
+'\005', 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', '\003', '(', '\013', '2', ')', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o',
+'t', 'o', 'b', 'u', 'f', '.', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r',
+'P', 'r', 'o', 't', 'o', 'R', '\005', 'v', 'a', 'l', 'u', 'e', '\022', '6', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003',
+' ', '\001', '(', '\013', '2', '\034', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'n',
+'u', 'm', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\022', ']', '\n', '\016', 'r', 'e', 's',
+'e', 'r', 'v', 'e', 'd', '_', 'r', 'a', 'n', 'g', 'e', '\030', '\004', ' ', '\003', '(', '\013', '2', '6', '.', 'g', 'o', 'o', 'g', 'l',
+'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'n', 'u', 'm', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r',
+'P', 'r', 'o', 't', 'o', '.', 'E', 'n', 'u', 'm', 'R', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', 'R', '\r',
+'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', '\022', '#', '\n', '\r', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd',
+'_', 'n', 'a', 'm', 'e', '\030', '\005', ' ', '\003', '(', '\t', 'R', '\014', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'N', 'a', 'm', 'e',
+'\032', ';', '\n', '\021', 'E', 'n', 'u', 'm', 'R', 'e', 's', 'e', 'r', 'v', 'e', 'd', 'R', 'a', 'n', 'g', 'e', '\022', '\024', '\n', '\005',
+'s', 't', 'a', 'r', 't', '\030', '\001', ' ', '\001', '(', '\005', 'R', '\005', 's', 't', 'a', 'r', 't', '\022', '\020', '\n', '\003', 'e', 'n', 'd',
+'\030', '\002', ' ', '\001', '(', '\005', 'R', '\003', 'e', 'n', 'd', '\"', '\203', '\001', '\n', '\030', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e',
+'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001',
+' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '\026', '\n', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\030', '\002', ' ', '\001', '(',
+'\005', 'R', '\006', 'n', 'u', 'm', 'b', 'e', 'r', '\022', ';', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(',
+'\013', '2', '!', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'n', 'u', 'm', 'V',
+'a', 'l', 'u', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\"', '\247', '\001', '\n', '\026',
+'S', 'e', 'r', 'v', 'i', 'c', 'e', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n',
+'\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '>', '\n', '\006', 'm', 'e', 't', 'h',
+'o', 'd', '\030', '\002', ' ', '\003', '(', '\013', '2', '&', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
+'f', '.', 'M', 'e', 't', 'h', 'o', 'd', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', 'R', '\006',
+'m', 'e', 't', 'h', 'o', 'd', '\022', '9', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(', '\013', '2', '\037',
+'.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 'O',
+'p', 't', 'i', 'o', 'n', 's', 'R', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\"', '\211', '\002', '\n', '\025', 'M', 'e', 't', 'h', 'o',
+'d', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'P', 'r', 'o', 't', 'o', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030',
+'\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '\035', '\n', '\n', 'i', 'n', 'p', 'u', 't', '_', 't', 'y', 'p', 'e',
+'\030', '\002', ' ', '\001', '(', '\t', 'R', '\t', 'i', 'n', 'p', 'u', 't', 'T', 'y', 'p', 'e', '\022', '\037', '\n', '\013', 'o', 'u', 't', 'p',
+'u', 't', '_', 't', 'y', 'p', 'e', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\n', 'o', 'u', 't', 'p', 'u', 't', 'T', 'y', 'p', 'e',
+'\022', '8', '\n', '\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\004', ' ', '\001', '(', '\013', '2', '\036', '.', 'g', 'o', 'o', 'g', 'l',
+'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'M', 'e', 't', 'h', 'o', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R',
+'\007', 'o', 'p', 't', 'i', 'o', 'n', 's', '\022', '0', '\n', '\020', 'c', 'l', 'i', 'e', 'n', 't', '_', 's', 't', 'r', 'e', 'a', 'm',
+'i', 'n', 'g', '\030', '\005', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\017', 'c', 'l', 'i', 'e', 'n', 't', 'S',
+'t', 'r', 'e', 'a', 'm', 'i', 'n', 'g', '\022', '0', '\n', '\020', 's', 'e', 'r', 'v', 'e', 'r', '_', 's', 't', 'r', 'e', 'a', 'm',
+'i', 'n', 'g', '\030', '\006', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\017', 's', 'e', 'r', 'v', 'e', 'r', 'S',
+'t', 'r', 'e', 'a', 'm', 'i', 'n', 'g', '\"', '\227', '\t', '\n', '\013', 'F', 'i', 'l', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022',
+'!', '\n', '\014', 'j', 'a', 'v', 'a', '_', 'p', 'a', 'c', 'k', 'a', 'g', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\013', 'j', 'a',
+'v', 'a', 'P', 'a', 'c', 'k', 'a', 'g', 'e', '\022', '0', '\n', '\024', 'j', 'a', 'v', 'a', '_', 'o', 'u', 't', 'e', 'r', '_', 'c',
+'l', 'a', 's', 's', 'n', 'a', 'm', 'e', '\030', '\010', ' ', '\001', '(', '\t', 'R', '\022', 'j', 'a', 'v', 'a', 'O', 'u', 't', 'e', 'r',
+'C', 'l', 'a', 's', 's', 'n', 'a', 'm', 'e', '\022', '5', '\n', '\023', 'j', 'a', 'v', 'a', '_', 'm', 'u', 'l', 't', 'i', 'p', 'l',
+'e', '_', 'f', 'i', 'l', 'e', 's', '\030', '\n', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\021', 'j', 'a', 'v',
+'a', 'M', 'u', 'l', 't', 'i', 'p', 'l', 'e', 'F', 'i', 'l', 'e', 's', '\022', 'D', '\n', '\035', 'j', 'a', 'v', 'a', '_', 'g', 'e',
+'n', 'e', 'r', 'a', 't', 'e', '_', 'e', 'q', 'u', 'a', 'l', 's', '_', 'a', 'n', 'd', '_', 'h', 'a', 's', 'h', '\030', '\024', ' ',
+'\001', '(', '\010', 'B', '\002', '\030', '\001', 'R', '\031', 'j', 'a', 'v', 'a', 'G', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'E', 'q', 'u', 'a',
+'l', 's', 'A', 'n', 'd', 'H', 'a', 's', 'h', '\022', ':', '\n', '\026', 'j', 'a', 'v', 'a', '_', 's', 't', 'r', 'i', 'n', 'g', '_',
+'c', 'h', 'e', 'c', 'k', '_', 'u', 't', 'f', '8', '\030', '\033', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\023',
+'j', 'a', 'v', 'a', 'S', 't', 'r', 'i', 'n', 'g', 'C', 'h', 'e', 'c', 'k', 'U', 't', 'f', '8', '\022', 'S', '\n', '\014', 'o', 'p',
+'t', 'i', 'm', 'i', 'z', 'e', '_', 'f', 'o', 'r', '\030', '\t', ' ', '\001', '(', '\016', '2', ')', '.', 'g', 'o', 'o', 'g', 'l', 'e',
+'.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'l', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'O', 'p', 't',
+'i', 'm', 'i', 'z', 'e', 'M', 'o', 'd', 'e', ':', '\005', 'S', 'P', 'E', 'E', 'D', 'R', '\013', 'o', 'p', 't', 'i', 'm', 'i', 'z',
+'e', 'F', 'o', 'r', '\022', '\035', '\n', '\n', 'g', 'o', '_', 'p', 'a', 'c', 'k', 'a', 'g', 'e', '\030', '\013', ' ', '\001', '(', '\t', 'R',
+'\t', 'g', 'o', 'P', 'a', 'c', 'k', 'a', 'g', 'e', '\022', '5', '\n', '\023', 'c', 'c', '_', 'g', 'e', 'n', 'e', 'r', 'i', 'c', '_',
+'s', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\030', '\020', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\021', 'c', 'c',
+'G', 'e', 'n', 'e', 'r', 'i', 'c', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\022', '9', '\n', '\025', 'j', 'a', 'v', 'a', '_', 'g',
+'e', 'n', 'e', 'r', 'i', 'c', '_', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\030', '\021', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a',
+'l', 's', 'e', 'R', '\023', 'j', 'a', 'v', 'a', 'G', 'e', 'n', 'e', 'r', 'i', 'c', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\022',
+'5', '\n', '\023', 'p', 'y', '_', 'g', 'e', 'n', 'e', 'r', 'i', 'c', '_', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\030', '\022', ' ',
+'\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\021', 'p', 'y', 'G', 'e', 'n', 'e', 'r', 'i', 'c', 'S', 'e', 'r', 'v',
+'i', 'c', 'e', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '\027', ' ', '\001', '(', '\010', ':',
+'\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', '.', '\n', '\020', 'c', 'c', '_',
+'e', 'n', 'a', 'b', 'l', 'e', '_', 'a', 'r', 'e', 'n', 'a', 's', '\030', '\037', ' ', '\001', '(', '\010', ':', '\004', 't', 'r', 'u', 'e',
+'R', '\016', 'c', 'c', 'E', 'n', 'a', 'b', 'l', 'e', 'A', 'r', 'e', 'n', 'a', 's', '\022', '*', '\n', '\021', 'o', 'b', 'j', 'c', '_',
+'c', 'l', 'a', 's', 's', '_', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '$', ' ', '\001', '(', '\t', 'R', '\017', 'o', 'b', 'j', 'c', 'C',
+'l', 'a', 's', 's', 'P', 'r', 'e', 'f', 'i', 'x', '\022', ')', '\n', '\020', 'c', 's', 'h', 'a', 'r', 'p', '_', 'n', 'a', 'm', 'e',
+'s', 'p', 'a', 'c', 'e', '\030', '%', ' ', '\001', '(', '\t', 'R', '\017', 'c', 's', 'h', 'a', 'r', 'p', 'N', 'a', 'm', 'e', 's', 'p',
+'a', 'c', 'e', '\022', '!', '\n', '\014', 's', 'w', 'i', 'f', 't', '_', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '\'', ' ', '\001', '(', '\t',
+'R', '\013', 's', 'w', 'i', 'f', 't', 'P', 'r', 'e', 'f', 'i', 'x', '\022', '(', '\n', '\020', 'p', 'h', 'p', '_', 'c', 'l', 'a', 's',
+'s', '_', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '(', ' ', '\001', '(', '\t', 'R', '\016', 'p', 'h', 'p', 'C', 'l', 'a', 's', 's', 'P',
+'r', 'e', 'f', 'i', 'x', '\022', '#', '\n', '\r', 'p', 'h', 'p', '_', 'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\030', ')', ' ',
+'\001', '(', '\t', 'R', '\014', 'p', 'h', 'p', 'N', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\022', '4', '\n', '\026', 'p', 'h', 'p', '_',
+'m', 'e', 't', 'a', 'd', 'a', 't', 'a', '_', 'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\030', ',', ' ', '\001', '(', '\t', 'R',
+'\024', 'p', 'h', 'p', 'M', 'e', 't', 'a', 'd', 'a', 't', 'a', 'N', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\022', '!', '\n', '\014',
+'r', 'u', 'b', 'y', '_', 'p', 'a', 'c', 'k', 'a', 'g', 'e', '\030', '-', ' ', '\001', '(', '\t', 'R', '\013', 'r', 'u', 'b', 'y', 'P',
+'a', 'c', 'k', 'a', 'g', 'e', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '2', ' ', '\001', '(', '\013', '2',
+'\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e',
+'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p',
+'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o',
+'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e',
+'d', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't',
+'i', 'o', 'n', '\"', ':', '\n', '\014', 'O', 'p', 't', 'i', 'm', 'i', 'z', 'e', 'M', 'o', 'd', 'e', '\022', '\t', '\n', '\005', 'S', 'P',
+'E', 'E', 'D', '\020', '\001', '\022', '\r', '\n', '\t', 'C', 'O', 'D', 'E', '_', 'S', 'I', 'Z', 'E', '\020', '\002', '\022', '\020', '\n', '\014', 'L',
+'I', 'T', 'E', '_', 'R', 'U', 'N', 'T', 'I', 'M', 'E', '\020', '\003', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', 'J',
+'\004', '\010', '*', '\020', '+', 'J', '\004', '\010', '&', '\020', '\'', '\"', '\364', '\003', '\n', '\016', 'M', 'e', 's', 's', 'a', 'g', 'e', 'O', 'p',
+'t', 'i', 'o', 'n', 's', '\022', '<', '\n', '\027', 'm', 'e', 's', 's', 'a', 'g', 'e', '_', 's', 'e', 't', '_', 'w', 'i', 'r', 'e',
+'_', 'f', 'o', 'r', 'm', 'a', 't', '\030', '\001', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\024', 'm', 'e', 's',
+'s', 'a', 'g', 'e', 'S', 'e', 't', 'W', 'i', 'r', 'e', 'F', 'o', 'r', 'm', 'a', 't', '\022', 'L', '\n', '\037', 'n', 'o', '_', 's',
+'t', 'a', 'n', 'd', 'a', 'r', 'd', '_', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', '_', 'a', 'c', 'c', 'e', 's', 's',
+'o', 'r', '\030', '\002', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\034', 'n', 'o', 'S', 't', 'a', 'n', 'd', 'a',
+'r', 'd', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'A', 'c', 'c', 'e', 's', 's', 'o', 'r', '\022', '%', '\n', '\n', 'd',
+'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd',
+'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', '\033', '\n', '\t', 'm', 'a', 'p', '_', 'e', 'n', 't', 'r', 'y', '\030', '\007', ' ',
+'\001', '(', '\010', 'R', '\010', 'm', 'a', 'p', 'E', 'n', 't', 'r', 'y', '\022', 'V', '\n', '&', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't',
+'e', 'd', '_', 'l', 'e', 'g', 'a', 'c', 'y', '_', 'j', 's', 'o', 'n', '_', 'f', 'i', 'e', 'l', 'd', '_', 'c', 'o', 'n', 'f',
+'l', 'i', 'c', 't', 's', '\030', '\013', ' ', '\001', '(', '\010', 'B', '\002', '\030', '\001', 'R', '\"', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't',
+'e', 'd', 'L', 'e', 'g', 'a', 'c', 'y', 'J', 's', 'o', 'n', 'F', 'i', 'e', 'l', 'd', 'C', 'o', 'n', 'f', 'l', 'i', 'c', 't',
+'s', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\014', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o',
+'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010',
+'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd',
+'_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p',
+'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i',
+'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '*', '\t',
+'\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', 'J', '\004', '\010', '\004', '\020', '\005', 'J', '\004', '\010', '\005', '\020', '\006', 'J', '\004', '\010', '\006',
+'\020', '\007', 'J', '\004', '\010', '\010', '\020', '\t', 'J', '\004', '\010', '\t', '\020', '\n', '\"', '\255', '\n', '\n', '\014', 'F', 'i', 'e', 'l', 'd', 'O',
+'p', 't', 'i', 'o', 'n', 's', '\022', 'A', '\n', '\005', 'c', 't', 'y', 'p', 'e', '\030', '\001', ' ', '\001', '(', '\016', '2', '#', '.', 'g',
+'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o',
+'n', 's', '.', 'C', 'T', 'y', 'p', 'e', ':', '\006', 'S', 'T', 'R', 'I', 'N', 'G', 'R', '\005', 'c', 't', 'y', 'p', 'e', '\022', '\026',
+'\n', '\006', 'p', 'a', 'c', 'k', 'e', 'd', '\030', '\002', ' ', '\001', '(', '\010', 'R', '\006', 'p', 'a', 'c', 'k', 'e', 'd', '\022', 'G', '\n',
+'\006', 'j', 's', 't', 'y', 'p', 'e', '\030', '\006', ' ', '\001', '(', '\016', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r',
+'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'J', 'S', 'T', 'y', 'p',
+'e', ':', '\t', 'J', 'S', '_', 'N', 'O', 'R', 'M', 'A', 'L', 'R', '\006', 'j', 's', 't', 'y', 'p', 'e', '\022', '\031', '\n', '\004', 'l',
+'a', 'z', 'y', '\030', '\005', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\004', 'l', 'a', 'z', 'y', '\022', '.', '\n',
+'\017', 'u', 'n', 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', '_', 'l', 'a', 'z', 'y', '\030', '\017', ' ', '\001', '(', '\010', ':', '\005', 'f',
+'a', 'l', 's', 'e', 'R', '\016', 'u', 'n', 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'L', 'a', 'z', 'y', '\022', '%', '\n', '\n', 'd',
+'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd',
+'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', '\031', '\n', '\004', 'w', 'e', 'a', 'k', '\030', '\n', ' ', '\001', '(', '\010', ':', '\005',
+'f', 'a', 'l', 's', 'e', 'R', '\004', 'w', 'e', 'a', 'k', '\022', '(', '\n', '\014', 'd', 'e', 'b', 'u', 'g', '_', 'r', 'e', 'd', 'a',
+'c', 't', '\030', '\020', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\013', 'd', 'e', 'b', 'u', 'g', 'R', 'e', 'd',
+'a', 'c', 't', '\022', 'K', '\n', '\t', 'r', 'e', 't', 'e', 'n', 't', 'i', 'o', 'n', '\030', '\021', ' ', '\001', '(', '\016', '2', '-', '.',
+'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i',
+'o', 'n', 's', '.', 'O', 'p', 't', 'i', 'o', 'n', 'R', 'e', 't', 'e', 'n', 't', 'i', 'o', 'n', 'R', '\t', 'r', 'e', 't', 'e',
+'n', 't', 'i', 'o', 'n', '\022', 'H', '\n', '\007', 't', 'a', 'r', 'g', 'e', 't', 's', '\030', '\023', ' ', '\003', '(', '\016', '2', '.', '.',
+'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i',
+'o', 'n', 's', '.', 'O', 'p', 't', 'i', 'o', 'n', 'T', 'a', 'r', 'g', 'e', 't', 'T', 'y', 'p', 'e', 'R', '\007', 't', 'a', 'r',
+'g', 'e', 't', 's', '\022', 'W', '\n', '\020', 'e', 'd', 'i', 't', 'i', 'o', 'n', '_', 'd', 'e', 'f', 'a', 'u', 'l', 't', 's', '\030',
+'\024', ' ', '\003', '(', '\013', '2', ',', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F',
+'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l',
+'t', 'R', '\017', 'e', 'd', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a',
+'t', 'u', 'r', 'e', 's', '\030', '\025', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't',
+'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's',
+'\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030',
+'\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.',
+'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n',
+'t', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '\032', 'Z', '\n', '\016', 'E', 'd', 'i', 't', 'i', 'o',
+'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', '\022', '2', '\n', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\003', ' ', '\001', '(', '\016',
+'2', '\030', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i', 'o',
+'n', 'R', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\022', '\024', '\n', '\005', 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\t',
+'R', '\005', 'v', 'a', 'l', 'u', 'e', '\"', '/', '\n', '\005', 'C', 'T', 'y', 'p', 'e', '\022', '\n', '\n', '\006', 'S', 'T', 'R', 'I', 'N',
+'G', '\020', '\000', '\022', '\010', '\n', '\004', 'C', 'O', 'R', 'D', '\020', '\001', '\022', '\020', '\n', '\014', 'S', 'T', 'R', 'I', 'N', 'G', '_', 'P',
+'I', 'E', 'C', 'E', '\020', '\002', '\"', '5', '\n', '\006', 'J', 'S', 'T', 'y', 'p', 'e', '\022', '\r', '\n', '\t', 'J', 'S', '_', 'N', 'O',
+'R', 'M', 'A', 'L', '\020', '\000', '\022', '\r', '\n', '\t', 'J', 'S', '_', 'S', 'T', 'R', 'I', 'N', 'G', '\020', '\001', '\022', '\r', '\n', '\t',
+'J', 'S', '_', 'N', 'U', 'M', 'B', 'E', 'R', '\020', '\002', '\"', 'U', '\n', '\017', 'O', 'p', 't', 'i', 'o', 'n', 'R', 'e', 't', 'e',
+'n', 't', 'i', 'o', 'n', '\022', '\025', '\n', '\021', 'R', 'E', 'T', 'E', 'N', 'T', 'I', 'O', 'N', '_', 'U', 'N', 'K', 'N', 'O', 'W',
+'N', '\020', '\000', '\022', '\025', '\n', '\021', 'R', 'E', 'T', 'E', 'N', 'T', 'I', 'O', 'N', '_', 'R', 'U', 'N', 'T', 'I', 'M', 'E', '\020',
+'\001', '\022', '\024', '\n', '\020', 'R', 'E', 'T', 'E', 'N', 'T', 'I', 'O', 'N', '_', 'S', 'O', 'U', 'R', 'C', 'E', '\020', '\002', '\"', '\214',
+'\002', '\n', '\020', 'O', 'p', 't', 'i', 'o', 'n', 'T', 'a', 'r', 'g', 'e', 't', 'T', 'y', 'p', 'e', '\022', '\027', '\n', '\023', 'T', 'A',
+'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\024', '\n', '\020', 'T', 'A',
+'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'L', 'E', '\020', '\001', '\022', '\037', '\n', '\033', 'T', 'A', 'R', 'G', 'E',
+'T', '_', 'T', 'Y', 'P', 'E', '_', 'E', 'X', 'T', 'E', 'N', 'S', 'I', 'O', 'N', '_', 'R', 'A', 'N', 'G', 'E', '\020', '\002', '\022',
+'\027', '\n', '\023', 'T', 'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\020', '\003', '\022',
+'\025', '\n', '\021', 'T', 'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'E', 'L', 'D', '\020', '\004', '\022', '\025', '\n',
+'\021', 'T', 'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'O', 'N', 'E', 'O', 'F', '\020', '\005', '\022', '\024', '\n', '\020', 'T',
+'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'E', 'N', 'U', 'M', '\020', '\006', '\022', '\032', '\n', '\026', 'T', 'A', 'R', 'G',
+'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'E', 'N', 'U', 'M', '_', 'E', 'N', 'T', 'R', 'Y', '\020', '\007', '\022', '\027', '\n', '\023', 'T',
+'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'S', 'E', 'R', 'V', 'I', 'C', 'E', '\020', '\010', '\022', '\026', '\n', '\022', 'T',
+'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'M', 'E', 'T', 'H', 'O', 'D', '\020', '\t', '*', '\t', '\010', '\350', '\007', '\020',
+'\200', '\200', '\200', '\200', '\002', 'J', '\004', '\010', '\004', '\020', '\005', 'J', '\004', '\010', '\022', '\020', '\023', '\"', '\254', '\001', '\n', '\014', 'O', 'n', 'e',
+'o', 'f', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\001', ' ', '\001',
+'(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't',
+'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't',
+'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.',
+'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r',
+'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd',
+'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\321', '\002', '\n', '\013', 'E', 'n', 'u',
+'m', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '\037', '\n', '\013', 'a', 'l', 'l', 'o', 'w', '_', 'a', 'l', 'i', 'a', 's', '\030', '\002',
+' ', '\001', '(', '\010', 'R', '\n', 'a', 'l', 'l', 'o', 'w', 'A', 'l', 'i', 'a', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e',
'c', 'a', 't', 'e', 'd', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e',
-'c', 'a', 't', 'e', 'd', '\022', '\033', '\n', '\t', 'm', 'a', 'p', '_', 'e', 'n', 't', 'r', 'y', '\030', '\007', ' ', '\001', '(', '\010', 'R',
-'\010', 'm', 'a', 'p', 'E', 'n', 't', 'r', 'y', '\022', 'V', '\n', '&', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '_', 'l',
-'e', 'g', 'a', 'c', 'y', '_', 'j', 's', 'o', 'n', '_', 'f', 'i', 'e', 'l', 'd', '_', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't',
-'s', '\030', '\013', ' ', '\001', '(', '\010', 'B', '\002', '\030', '\001', 'R', '\"', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', 'L', 'e',
-'g', 'a', 'c', 'y', 'J', 's', 'o', 'n', 'F', 'i', 'e', 'l', 'd', 'C', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', '\022', '7', '\n',
-'\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\014', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.',
-'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't',
-'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't',
-'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o',
-'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023',
-'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010', '\350', '\007', '\020',
-'\200', '\200', '\200', '\200', '\002', 'J', '\004', '\010', '\004', '\020', '\005', 'J', '\004', '\010', '\005', '\020', '\006', 'J', '\004', '\010', '\006', '\020', '\007', 'J', '\004',
-'\010', '\010', '\020', '\t', 'J', '\004', '\010', '\t', '\020', '\n', '\"', '\255', '\n', '\n', '\014', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o',
-'n', 's', '\022', 'A', '\n', '\005', 'c', 't', 'y', 'p', 'e', '\030', '\001', ' ', '\001', '(', '\016', '2', '#', '.', 'g', 'o', 'o', 'g', 'l',
-'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'C',
-'T', 'y', 'p', 'e', ':', '\006', 'S', 'T', 'R', 'I', 'N', 'G', 'R', '\005', 'c', 't', 'y', 'p', 'e', '\022', '\026', '\n', '\006', 'p', 'a',
-'c', 'k', 'e', 'd', '\030', '\002', ' ', '\001', '(', '\010', 'R', '\006', 'p', 'a', 'c', 'k', 'e', 'd', '\022', 'G', '\n', '\006', 'j', 's', 't',
-'y', 'p', 'e', '\030', '\006', ' ', '\001', '(', '\016', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b',
-'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'J', 'S', 'T', 'y', 'p', 'e', ':', '\t', 'J',
-'S', '_', 'N', 'O', 'R', 'M', 'A', 'L', 'R', '\006', 'j', 's', 't', 'y', 'p', 'e', '\022', '\031', '\n', '\004', 'l', 'a', 'z', 'y', '\030',
-'\005', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\004', 'l', 'a', 'z', 'y', '\022', '.', '\n', '\017', 'u', 'n', 'v',
-'e', 'r', 'i', 'f', 'i', 'e', 'd', '_', 'l', 'a', 'z', 'y', '\030', '\017', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e',
-'R', '\016', 'u', 'n', 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'L', 'a', 'z', 'y', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e',
-'c', 'a', 't', 'e', 'd', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e',
-'c', 'a', 't', 'e', 'd', '\022', '\031', '\n', '\004', 'w', 'e', 'a', 'k', '\030', '\n', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's',
-'e', 'R', '\004', 'w', 'e', 'a', 'k', '\022', '(', '\n', '\014', 'd', 'e', 'b', 'u', 'g', '_', 'r', 'e', 'd', 'a', 'c', 't', '\030', '\020',
-' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\013', 'd', 'e', 'b', 'u', 'g', 'R', 'e', 'd', 'a', 'c', 't', '\022',
-'K', '\n', '\t', 'r', 'e', 't', 'e', 'n', 't', 'i', 'o', 'n', '\030', '\021', ' ', '\001', '(', '\016', '2', '-', '.', 'g', 'o', 'o', 'g',
-'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.',
-'O', 'p', 't', 'i', 'o', 'n', 'R', 'e', 't', 'e', 'n', 't', 'i', 'o', 'n', 'R', '\t', 'r', 'e', 't', 'e', 'n', 't', 'i', 'o',
-'n', '\022', 'H', '\n', '\007', 't', 'a', 'r', 'g', 'e', 't', 's', '\030', '\023', ' ', '\003', '(', '\016', '2', '.', '.', 'g', 'o', 'o', 'g',
-'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.',
-'O', 'p', 't', 'i', 'o', 'n', 'T', 'a', 'r', 'g', 'e', 't', 'T', 'y', 'p', 'e', 'R', '\007', 't', 'a', 'r', 'g', 'e', 't', 's',
-'\022', 'W', '\n', '\020', 'e', 'd', 'i', 't', 'i', 'o', 'n', '_', 'd', 'e', 'f', 'a', 'u', 'l', 't', 's', '\030', '\024', ' ', '\003', '(',
-'\013', '2', ',', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd',
-'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', 'R', '\017', 'e',
-'d', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e',
-'s', '\030', '\025', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f',
-'.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024',
-'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003',
-'(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n',
-'t', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p',
-'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '\032', 'Z', '\n', '\016', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f',
-'a', 'u', 'l', 't', '\022', '2', '\n', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\003', ' ', '\001', '(', '\016', '2', '\030', '.', 'g',
-'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'R', '\007', 'e',
-'d', 'i', 't', 'i', 'o', 'n', '\022', '\024', '\n', '\005', 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\t', 'R', '\005', 'v', 'a',
-'l', 'u', 'e', '\"', '/', '\n', '\005', 'C', 'T', 'y', 'p', 'e', '\022', '\n', '\n', '\006', 'S', 'T', 'R', 'I', 'N', 'G', '\020', '\000', '\022',
-'\010', '\n', '\004', 'C', 'O', 'R', 'D', '\020', '\001', '\022', '\020', '\n', '\014', 'S', 'T', 'R', 'I', 'N', 'G', '_', 'P', 'I', 'E', 'C', 'E',
-'\020', '\002', '\"', '5', '\n', '\006', 'J', 'S', 'T', 'y', 'p', 'e', '\022', '\r', '\n', '\t', 'J', 'S', '_', 'N', 'O', 'R', 'M', 'A', 'L',
-'\020', '\000', '\022', '\r', '\n', '\t', 'J', 'S', '_', 'S', 'T', 'R', 'I', 'N', 'G', '\020', '\001', '\022', '\r', '\n', '\t', 'J', 'S', '_', 'N',
-'U', 'M', 'B', 'E', 'R', '\020', '\002', '\"', 'U', '\n', '\017', 'O', 'p', 't', 'i', 'o', 'n', 'R', 'e', 't', 'e', 'n', 't', 'i', 'o',
-'n', '\022', '\025', '\n', '\021', 'R', 'E', 'T', 'E', 'N', 'T', 'I', 'O', 'N', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022',
-'\025', '\n', '\021', 'R', 'E', 'T', 'E', 'N', 'T', 'I', 'O', 'N', '_', 'R', 'U', 'N', 'T', 'I', 'M', 'E', '\020', '\001', '\022', '\024', '\n',
-'\020', 'R', 'E', 'T', 'E', 'N', 'T', 'I', 'O', 'N', '_', 'S', 'O', 'U', 'R', 'C', 'E', '\020', '\002', '\"', '\214', '\002', '\n', '\020', 'O',
-'p', 't', 'i', 'o', 'n', 'T', 'a', 'r', 'g', 'e', 't', 'T', 'y', 'p', 'e', '\022', '\027', '\n', '\023', 'T', 'A', 'R', 'G', 'E', 'T',
-'_', 'T', 'Y', 'P', 'E', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\024', '\n', '\020', 'T', 'A', 'R', 'G', 'E', 'T',
-'_', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'L', 'E', '\020', '\001', '\022', '\037', '\n', '\033', 'T', 'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y',
-'P', 'E', '_', 'E', 'X', 'T', 'E', 'N', 'S', 'I', 'O', 'N', '_', 'R', 'A', 'N', 'G', 'E', '\020', '\002', '\022', '\027', '\n', '\023', 'T',
-'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\020', '\003', '\022', '\025', '\n', '\021', 'T',
-'A', 'R', 'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'F', 'I', 'E', 'L', 'D', '\020', '\004', '\022', '\025', '\n', '\021', 'T', 'A', 'R',
-'G', 'E', 'T', '_', 'T', 'Y', 'P', 'E', '_', 'O', 'N', 'E', 'O', 'F', '\020', '\005', '\022', '\024', '\n', '\020', 'T', 'A', 'R', 'G', 'E',
-'T', '_', 'T', 'Y', 'P', 'E', '_', 'E', 'N', 'U', 'M', '\020', '\006', '\022', '\032', '\n', '\026', 'T', 'A', 'R', 'G', 'E', 'T', '_', 'T',
-'Y', 'P', 'E', '_', 'E', 'N', 'U', 'M', '_', 'E', 'N', 'T', 'R', 'Y', '\020', '\007', '\022', '\027', '\n', '\023', 'T', 'A', 'R', 'G', 'E',
-'T', '_', 'T', 'Y', 'P', 'E', '_', 'S', 'E', 'R', 'V', 'I', 'C', 'E', '\020', '\010', '\022', '\026', '\n', '\022', 'T', 'A', 'R', 'G', 'E',
-'T', '_', 'T', 'Y', 'P', 'E', '_', 'M', 'E', 'T', 'H', 'O', 'D', '\020', '\t', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200',
-'\002', 'J', '\004', '\010', '\004', '\020', '\005', 'J', '\004', '\010', '\022', '\020', '\023', '\"', '\254', '\001', '\n', '\014', 'O', 'n', 'e', 'o', 'f', 'O', 'p',
-'t', 'i', 'o', 'n', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\001', ' ', '\001', '(', '\013', '2', '\033',
+'c', 'a', 't', 'e', 'd', '\022', 'V', '\n', '&', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '_', 'l', 'e', 'g', 'a', 'c',
+'y', '_', 'j', 's', 'o', 'n', '_', 'f', 'i', 'e', 'l', 'd', '_', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', '\030', '\006', ' ',
+'\001', '(', '\010', 'B', '\002', '\030', '\001', 'R', '\"', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', 'L', 'e', 'g', 'a', 'c', 'y',
+'J', 's', 'o', 'n', 'F', 'i', 'e', 'l', 'd', 'C', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a',
+'t', 'u', 'r', 'e', 's', '\030', '\007', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't',
+'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's',
+'\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030',
+'\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.',
+'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n',
+'t', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200',
+'\002', 'J', '\004', '\010', '\005', '\020', '\006', '\"', '\201', '\002', '\n', '\020', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e', 'O', 'p', 't', 'i',
+'o', 'n', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '\001', ' ', '\001', '(', '\010', ':', '\005',
+'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't',
+'u', 'r', 'e', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o',
+'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022',
+'(', '\n', '\014', 'd', 'e', 'b', 'u', 'g', '_', 'r', 'e', 'd', 'a', 'c', 't', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a',
+'l', 's', 'e', 'R', '\013', 'd', 'e', 'b', 'u', 'g', 'R', 'e', 'd', 'a', 'c', 't', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't',
+'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.',
+'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r',
+'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd',
+'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\325', '\001', '\n', '\016', 'S', 'e', 'r',
+'v', 'i', 'c', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\"',
+' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e',
+'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p',
+'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '!', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p',
+'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_',
+'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r',
+'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o',
+'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010',
+'\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\231', '\003', '\n', '\r', 'M', 'e', 't', 'h', 'o', 'd', 'O', 'p', 't', 'i', 'o', 'n',
+'s', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '!', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a',
+'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', 'q', '\n', '\021', 'i', 'd', 'e', 'm', 'p', 'o',
+'t', 'e', 'n', 'c', 'y', '_', 'l', 'e', 'v', 'e', 'l', '\030', '\"', ' ', '\001', '(', '\016', '2', '/', '.', 'g', 'o', 'o', 'g', 'l',
+'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'M', 'e', 't', 'h', 'o', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.',
+'I', 'd', 'e', 'm', 'p', 'o', 't', 'e', 'n', 'c', 'y', 'L', 'e', 'v', 'e', 'l', ':', '\023', 'I', 'D', 'E', 'M', 'P', 'O', 'T',
+'E', 'N', 'C', 'Y', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', 'R', '\020', 'i', 'd', 'e', 'm', 'p', 'o', 't', 'e', 'n', 'c', 'y',
+'L', 'e', 'v', 'e', 'l', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '#', ' ', '\001', '(', '\013', '2', '\033',
'.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S',
'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r',
'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g',
'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd',
'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i',
-'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\321', '\002', '\n', '\013', 'E', 'n', 'u', 'm', 'O', 'p', 't',
-'i', 'o', 'n', 's', '\022', '\037', '\n', '\013', 'a', 'l', 'l', 'o', 'w', '_', 'a', 'l', 'i', 'a', 's', '\030', '\002', ' ', '\001', '(', '\010',
-'R', '\n', 'a', 'l', 'l', 'o', 'w', 'A', 'l', 'i', 'a', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e',
-'d', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e',
-'d', '\022', 'V', '\n', '&', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '_', 'l', 'e', 'g', 'a', 'c', 'y', '_', 'j', 's',
-'o', 'n', '_', 'f', 'i', 'e', 'l', 'd', '_', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', '\030', '\006', ' ', '\001', '(', '\010', 'B',
-'\002', '\030', '\001', 'R', '\"', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', 'L', 'e', 'g', 'a', 'c', 'y', 'J', 's', 'o', 'n',
-'F', 'i', 'e', 'l', 'd', 'C', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e',
-'s', '\030', '\007', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f',
-'.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024',
-'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003',
-'(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n',
-'t', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p',
-'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', 'J', '\004', '\010',
-'\005', '\020', '\006', '\"', '\201', '\002', '\n', '\020', 'E', 'n', 'u', 'm', 'V', 'a', 'l', 'u', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022',
-'%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '\001', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's',
-'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's',
-'\030', '\002', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.',
-'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', '(', '\n', '\014', 'd',
-'e', 'b', 'u', 'g', '_', 'r', 'e', 'd', 'a', 'c', 't', '\030', '\003', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R',
-'\013', 'd', 'e', 'b', 'u', 'g', 'R', 'e', 'd', 'a', 'c', 't', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r',
-'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g',
-'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd',
-'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i',
-'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\325', '\001', '\n', '\016', 'S', 'e', 'r', 'v', 'i', 'c', 'e',
-'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\"', ' ', '\001', '(', '\013',
-'2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r',
-'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', '%', '\n', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a',
-'t', 'e', 'd', '\030', '!', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R', '\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a',
-'t', 'e', 'd', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', '_', 'o', 'p', 't', 'i',
-'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b',
-'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', 'R', '\023', 'u',
-'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '*', '\t', '\010', '\350', '\007', '\020', '\200',
-'\200', '\200', '\200', '\002', '\"', '\231', '\003', '\n', '\r', 'M', 'e', 't', 'h', 'o', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '%', '\n',
-'\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\030', '!', ' ', '\001', '(', '\010', ':', '\005', 'f', 'a', 'l', 's', 'e', 'R',
-'\n', 'd', 'e', 'p', 'r', 'e', 'c', 'a', 't', 'e', 'd', '\022', 'q', '\n', '\021', 'i', 'd', 'e', 'm', 'p', 'o', 't', 'e', 'n', 'c',
-'y', '_', 'l', 'e', 'v', 'e', 'l', '\030', '\"', ' ', '\001', '(', '\016', '2', '/', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r',
-'o', 't', 'o', 'b', 'u', 'f', '.', 'M', 'e', 't', 'h', 'o', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'I', 'd', 'e', 'm',
-'p', 'o', 't', 'e', 'n', 'c', 'y', 'L', 'e', 'v', 'e', 'l', ':', '\023', 'I', 'D', 'E', 'M', 'P', 'O', 'T', 'E', 'N', 'C', 'Y',
-'_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', 'R', '\020', 'i', 'd', 'e', 'm', 'p', 'o', 't', 'e', 'n', 'c', 'y', 'L', 'e', 'v', 'e',
-'l', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '#', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o',
-'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010',
-'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\022', 'X', '\n', '\024', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd',
-'_', 'o', 'p', 't', 'i', 'o', 'n', '\030', '\347', '\007', ' ', '\003', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p',
-'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i',
-'o', 'n', 'R', '\023', 'u', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '\"', 'P',
-'\n', '\020', 'I', 'd', 'e', 'm', 'p', 'o', 't', 'e', 'n', 'c', 'y', 'L', 'e', 'v', 'e', 'l', '\022', '\027', '\n', '\023', 'I', 'D', 'E',
-'M', 'P', 'O', 'T', 'E', 'N', 'C', 'Y', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\023', '\n', '\017', 'N', 'O', '_',
-'S', 'I', 'D', 'E', '_', 'E', 'F', 'F', 'E', 'C', 'T', 'S', '\020', '\001', '\022', '\016', '\n', '\n', 'I', 'D', 'E', 'M', 'P', 'O', 'T',
-'E', 'N', 'T', '\020', '\002', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\232', '\003', '\n', '\023', 'U', 'n', 'i', 'n',
-'t', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '\022', 'A', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\002',
-' ', '\003', '(', '\013', '2', '-', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'U', 'n',
-'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '.', 'N', 'a', 'm', 'e', 'P', 'a', 'r',
-'t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', ')', '\n', '\020', 'i', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', '_', 'v', 'a', 'l',
-'u', 'e', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\017', 'i', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', 'V', 'a', 'l', 'u', 'e',
-'\022', ',', '\n', '\022', 'p', 'o', 's', 'i', 't', 'i', 'v', 'e', '_', 'i', 'n', 't', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\004', ' ',
-'\001', '(', '\004', 'R', '\020', 'p', 'o', 's', 'i', 't', 'i', 'v', 'e', 'I', 'n', 't', 'V', 'a', 'l', 'u', 'e', '\022', ',', '\n', '\022',
-'n', 'e', 'g', 'a', 't', 'i', 'v', 'e', '_', 'i', 'n', 't', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\005', ' ', '\001', '(', '\003', 'R',
-'\020', 'n', 'e', 'g', 'a', 't', 'i', 'v', 'e', 'I', 'n', 't', 'V', 'a', 'l', 'u', 'e', '\022', '!', '\n', '\014', 'd', 'o', 'u', 'b',
-'l', 'e', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\006', ' ', '\001', '(', '\001', 'R', '\013', 'd', 'o', 'u', 'b', 'l', 'e', 'V', 'a', 'l',
-'u', 'e', '\022', '!', '\n', '\014', 's', 't', 'r', 'i', 'n', 'g', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\007', ' ', '\001', '(', '\014', 'R',
-'\013', 's', 't', 'r', 'i', 'n', 'g', 'V', 'a', 'l', 'u', 'e', '\022', '\'', '\n', '\017', 'a', 'g', 'g', 'r', 'e', 'g', 'a', 't', 'e',
-'_', 'v', 'a', 'l', 'u', 'e', '\030', '\010', ' ', '\001', '(', '\t', 'R', '\016', 'a', 'g', 'g', 'r', 'e', 'g', 'a', 't', 'e', 'V', 'a',
-'l', 'u', 'e', '\032', 'J', '\n', '\010', 'N', 'a', 'm', 'e', 'P', 'a', 'r', 't', '\022', '\033', '\n', '\t', 'n', 'a', 'm', 'e', '_', 'p',
-'a', 'r', 't', '\030', '\001', ' ', '\002', '(', '\t', 'R', '\010', 'n', 'a', 'm', 'e', 'P', 'a', 'r', 't', '\022', '!', '\n', '\014', 'i', 's',
-'_', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', '\030', '\002', ' ', '\002', '(', '\010', 'R', '\013', 'i', 's', 'E', 'x', 't', 'e', 'n',
-'s', 'i', 'o', 'n', '\"', '\374', '\t', '\n', '\n', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '\022', '\213', '\001', '\n', '\016', 'f',
-'i', 'e', 'l', 'd', '_', 'p', 'r', 'e', 's', 'e', 'n', 'c', 'e', '\030', '\001', ' ', '\001', '(', '\016', '2', ')', '.', 'g', 'o', 'o',
-'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'F',
-'i', 'e', 'l', 'd', 'P', 'r', 'e', 's', 'e', 'n', 'c', 'e', 'B', '9', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001',
-'\r', '\022', '\010', 'E', 'X', 'P', 'L', 'I', 'C', 'I', 'T', '\030', '\346', '\007', '\242', '\001', '\r', '\022', '\010', 'I', 'M', 'P', 'L', 'I', 'C',
-'I', 'T', '\030', '\347', '\007', '\242', '\001', '\r', '\022', '\010', 'E', 'X', 'P', 'L', 'I', 'C', 'I', 'T', '\030', '\350', '\007', 'R', '\r', 'f', 'i',
-'e', 'l', 'd', 'P', 'r', 'e', 's', 'e', 'n', 'c', 'e', '\022', 'f', '\n', '\t', 'e', 'n', 'u', 'm', '_', 't', 'y', 'p', 'e', '\030',
-'\002', ' ', '\001', '(', '\016', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F',
-'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'E', 'n', 'u', 'm', 'T', 'y', 'p', 'e', 'B', '#', '\210', '\001', '\001', '\230', '\001',
-'\006', '\230', '\001', '\001', '\242', '\001', '\013', '\022', '\006', 'C', 'L', 'O', 'S', 'E', 'D', '\030', '\346', '\007', '\242', '\001', '\t', '\022', '\004', 'O', 'P',
-'E', 'N', '\030', '\347', '\007', 'R', '\010', 'e', 'n', 'u', 'm', 'T', 'y', 'p', 'e', '\022', '\222', '\001', '\n', '\027', 'r', 'e', 'p', 'e', 'a',
-'t', 'e', 'd', '_', 'f', 'i', 'e', 'l', 'd', '_', 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\030', '\003', ' ', '\001', '(', '\016', '2',
-'1', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e',
-'S', 'e', 't', '.', 'R', 'e', 'p', 'e', 'a', 't', 'e', 'd', 'F', 'i', 'e', 'l', 'd', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g',
-'B', '\'', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001', '\r', '\022', '\010', 'E', 'X', 'P', 'A', 'N', 'D', 'E', 'D', '\030',
-'\346', '\007', '\242', '\001', '\013', '\022', '\006', 'P', 'A', 'C', 'K', 'E', 'D', '\030', '\347', '\007', 'R', '\025', 'r', 'e', 'p', 'e', 'a', 't', 'e',
-'d', 'F', 'i', 'e', 'l', 'd', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', 'x', '\n', '\017', 'u', 't', 'f', '8', '_', 'v', 'a',
-'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '\030', '\004', ' ', '\001', '(', '\016', '2', '*', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p',
-'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'U', 't', 'f', '8', 'V', 'a',
-'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', 'B', '#', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001', '\t', '\022', '\004', 'N',
-'O', 'N', 'E', '\030', '\346', '\007', '\242', '\001', '\013', '\022', '\006', 'V', 'E', 'R', 'I', 'F', 'Y', '\030', '\347', '\007', 'R', '\016', 'u', 't', 'f',
-'8', 'V', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '\022', 'x', '\n', '\020', 'm', 'e', 's', 's', 'a', 'g', 'e', '_', 'e', 'n',
-'c', 'o', 'd', 'i', 'n', 'g', '\030', '\005', ' ', '\001', '(', '\016', '2', '+', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o',
-'t', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'M', 'e', 's', 's', 'a', 'g', 'e', 'E',
-'n', 'c', 'o', 'd', 'i', 'n', 'g', 'B', ' ', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001', '\024', '\022', '\017', 'L', 'E',
-'N', 'G', 'T', 'H', '_', 'P', 'R', 'E', 'F', 'I', 'X', 'E', 'D', '\030', '\346', '\007', 'R', '\017', 'm', 'e', 's', 's', 'a', 'g', 'e',
-'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', '|', '\n', '\013', 'j', 's', 'o', 'n', '_', 'f', 'o', 'r', 'm', 'a', 't', '\030', '\006',
-' ', '\001', '(', '\016', '2', '&', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e',
-'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'J', 's', 'o', 'n', 'F', 'o', 'r', 'm', 'a', 't', 'B', '3', '\210', '\001', '\001', '\230',
-'\001', '\003', '\230', '\001', '\006', '\230', '\001', '\001', '\242', '\001', '\027', '\022', '\022', 'L', 'E', 'G', 'A', 'C', 'Y', '_', 'B', 'E', 'S', 'T', '_',
-'E', 'F', 'F', 'O', 'R', 'T', '\030', '\346', '\007', '\242', '\001', '\n', '\022', '\005', 'A', 'L', 'L', 'O', 'W', '\030', '\347', '\007', 'R', '\n', 'j',
-'s', 'o', 'n', 'F', 'o', 'r', 'm', 'a', 't', '\"', '\\', '\n', '\r', 'F', 'i', 'e', 'l', 'd', 'P', 'r', 'e', 's', 'e', 'n', 'c',
-'e', '\022', '\032', '\n', '\026', 'F', 'I', 'E', 'L', 'D', '_', 'P', 'R', 'E', 'S', 'E', 'N', 'C', 'E', '_', 'U', 'N', 'K', 'N', 'O',
-'W', 'N', '\020', '\000', '\022', '\014', '\n', '\010', 'E', 'X', 'P', 'L', 'I', 'C', 'I', 'T', '\020', '\001', '\022', '\014', '\n', '\010', 'I', 'M', 'P',
-'L', 'I', 'C', 'I', 'T', '\020', '\002', '\022', '\023', '\n', '\017', 'L', 'E', 'G', 'A', 'C', 'Y', '_', 'R', 'E', 'Q', 'U', 'I', 'R', 'E',
-'D', '\020', '\003', '\"', '7', '\n', '\010', 'E', 'n', 'u', 'm', 'T', 'y', 'p', 'e', '\022', '\025', '\n', '\021', 'E', 'N', 'U', 'M', '_', 'T',
-'Y', 'P', 'E', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\010', '\n', '\004', 'O', 'P', 'E', 'N', '\020', '\001', '\022', '\n',
-'\n', '\006', 'C', 'L', 'O', 'S', 'E', 'D', '\020', '\002', '\"', 'V', '\n', '\025', 'R', 'e', 'p', 'e', 'a', 't', 'e', 'd', 'F', 'i', 'e',
-'l', 'd', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', '#', '\n', '\037', 'R', 'E', 'P', 'E', 'A', 'T', 'E', 'D', '_', 'F', 'I',
-'E', 'L', 'D', '_', 'E', 'N', 'C', 'O', 'D', 'I', 'N', 'G', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\n', '\n',
-'\006', 'P', 'A', 'C', 'K', 'E', 'D', '\020', '\001', '\022', '\014', '\n', '\010', 'E', 'X', 'P', 'A', 'N', 'D', 'E', 'D', '\020', '\002', '\"', 'C',
-'\n', '\016', 'U', 't', 'f', '8', 'V', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '\022', '\033', '\n', '\027', 'U', 'T', 'F', '8', '_',
-'V', 'A', 'L', 'I', 'D', 'A', 'T', 'I', 'O', 'N', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\010', '\n', '\004', 'N',
-'O', 'N', 'E', '\020', '\001', '\022', '\n', '\n', '\006', 'V', 'E', 'R', 'I', 'F', 'Y', '\020', '\002', '\"', 'S', '\n', '\017', 'M', 'e', 's', 's',
-'a', 'g', 'e', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', '\034', '\n', '\030', 'M', 'E', 'S', 'S', 'A', 'G', 'E', '_', 'E', 'N',
-'C', 'O', 'D', 'I', 'N', 'G', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\023', '\n', '\017', 'L', 'E', 'N', 'G', 'T',
-'H', '_', 'P', 'R', 'E', 'F', 'I', 'X', 'E', 'D', '\020', '\001', '\022', '\r', '\n', '\t', 'D', 'E', 'L', 'I', 'M', 'I', 'T', 'E', 'D',
-'\020', '\002', '\"', 'H', '\n', '\n', 'J', 's', 'o', 'n', 'F', 'o', 'r', 'm', 'a', 't', '\022', '\027', '\n', '\023', 'J', 'S', 'O', 'N', '_',
-'F', 'O', 'R', 'M', 'A', 'T', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\t', '\n', '\005', 'A', 'L', 'L', 'O', 'W',
-'\020', '\001', '\022', '\026', '\n', '\022', 'L', 'E', 'G', 'A', 'C', 'Y', '_', 'B', 'E', 'S', 'T', '_', 'E', 'F', 'F', 'O', 'R', 'T', '\020',
-'\002', '*', '\006', '\010', '\350', '\007', '\020', '\351', '\007', '*', '\006', '\010', '\351', '\007', '\020', '\352', '\007', '*', '\006', '\010', '\213', 'N', '\020', '\220', 'N',
-'J', '\006', '\010', '\347', '\007', '\020', '\350', '\007', '\"', '\376', '\002', '\n', '\022', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'D', 'e',
-'f', 'a', 'u', 'l', 't', 's', '\022', 'X', '\n', '\010', 'd', 'e', 'f', 'a', 'u', 'l', 't', 's', '\030', '\001', ' ', '\003', '(', '\013', '2',
-'<', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e',
-'S', 'e', 't', 'D', 'e', 'f', 'a', 'u', 'l', 't', 's', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'E', 'd', 'i',
-'t', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', 'R', '\010', 'd', 'e', 'f', 'a', 'u', 'l', 't', 's', '\022', 'A', '\n', '\017',
-'m', 'i', 'n', 'i', 'm', 'u', 'm', '_', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\004', ' ', '\001', '(', '\016', '2', '\030', '.', 'g',
-'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'R', '\016', 'm',
-'i', 'n', 'i', 'm', 'u', 'm', 'E', 'd', 'i', 't', 'i', 'o', 'n', '\022', 'A', '\n', '\017', 'm', 'a', 'x', 'i', 'm', 'u', 'm', '_',
-'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\005', ' ', '\001', '(', '\016', '2', '\030', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r',
-'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'R', '\016', 'm', 'a', 'x', 'i', 'm', 'u', 'm', 'E', 'd',
-'i', 't', 'i', 'o', 'n', '\032', '\207', '\001', '\n', '\030', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'E', 'd', 'i', 't', 'i',
-'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', '\022', '2', '\n', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\003', ' ', '\001', '(',
-'\016', '2', '\030', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i',
-'o', 'n', 'R', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\030', '\002',
-' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e',
-'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\"', '\247', '\002', '\n', '\016', 'S', 'o',
-'u', 'r', 'c', 'e', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '\022', 'D', '\n', '\010', 'l', 'o', 'c', 'a', 't', 'i', 'o', 'n', '\030',
-'\001', ' ', '\003', '(', '\013', '2', '(', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'S',
-'o', 'u', 'r', 'c', 'e', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '.', 'L', 'o', 'c', 'a', 't', 'i', 'o', 'n', 'R', '\010', 'l',
-'o', 'c', 'a', 't', 'i', 'o', 'n', '\032', '\316', '\001', '\n', '\010', 'L', 'o', 'c', 'a', 't', 'i', 'o', 'n', '\022', '\026', '\n', '\004', 'p',
-'a', 't', 'h', '\030', '\001', ' ', '\003', '(', '\005', 'B', '\002', '\020', '\001', 'R', '\004', 'p', 'a', 't', 'h', '\022', '\026', '\n', '\004', 's', 'p',
-'a', 'n', '\030', '\002', ' ', '\003', '(', '\005', 'B', '\002', '\020', '\001', 'R', '\004', 's', 'p', 'a', 'n', '\022', ')', '\n', '\020', 'l', 'e', 'a',
-'d', 'i', 'n', 'g', '_', 'c', 'o', 'm', 'm', 'e', 'n', 't', 's', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\017', 'l', 'e', 'a', 'd',
-'i', 'n', 'g', 'C', 'o', 'm', 'm', 'e', 'n', 't', 's', '\022', '+', '\n', '\021', 't', 'r', 'a', 'i', 'l', 'i', 'n', 'g', '_', 'c',
-'o', 'm', 'm', 'e', 'n', 't', 's', '\030', '\004', ' ', '\001', '(', '\t', 'R', '\020', 't', 'r', 'a', 'i', 'l', 'i', 'n', 'g', 'C', 'o',
-'m', 'm', 'e', 'n', 't', 's', '\022', ':', '\n', '\031', 'l', 'e', 'a', 'd', 'i', 'n', 'g', '_', 'd', 'e', 't', 'a', 'c', 'h', 'e',
-'d', '_', 'c', 'o', 'm', 'm', 'e', 'n', 't', 's', '\030', '\006', ' ', '\003', '(', '\t', 'R', '\027', 'l', 'e', 'a', 'd', 'i', 'n', 'g',
-'D', 'e', 't', 'a', 'c', 'h', 'e', 'd', 'C', 'o', 'm', 'm', 'e', 'n', 't', 's', '\"', '\320', '\002', '\n', '\021', 'G', 'e', 'n', 'e',
-'r', 'a', 't', 'e', 'd', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '\022', 'M', '\n', '\n', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i',
-'o', 'n', '\030', '\001', ' ', '\003', '(', '\013', '2', '-', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
-'f', '.', 'G', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'd', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '.', 'A', 'n', 'n', 'o', 't',
-'a', 't', 'i', 'o', 'n', 'R', '\n', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', '\032', '\353', '\001', '\n', '\n', 'A', 'n', 'n',
-'o', 't', 'a', 't', 'i', 'o', 'n', '\022', '\026', '\n', '\004', 'p', 'a', 't', 'h', '\030', '\001', ' ', '\003', '(', '\005', 'B', '\002', '\020', '\001',
-'R', '\004', 'p', 'a', 't', 'h', '\022', '\037', '\n', '\013', 's', 'o', 'u', 'r', 'c', 'e', '_', 'f', 'i', 'l', 'e', '\030', '\002', ' ', '\001',
-'(', '\t', 'R', '\n', 's', 'o', 'u', 'r', 'c', 'e', 'F', 'i', 'l', 'e', '\022', '\024', '\n', '\005', 'b', 'e', 'g', 'i', 'n', '\030', '\003',
-' ', '\001', '(', '\005', 'R', '\005', 'b', 'e', 'g', 'i', 'n', '\022', '\020', '\n', '\003', 'e', 'n', 'd', '\030', '\004', ' ', '\001', '(', '\005', 'R',
-'\003', 'e', 'n', 'd', '\022', 'R', '\n', '\010', 's', 'e', 'm', 'a', 'n', 't', 'i', 'c', '\030', '\005', ' ', '\001', '(', '\016', '2', '6', '.',
-'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'G', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'd',
-'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '.', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', '.', 'S', 'e', 'm', 'a', 'n',
-'t', 'i', 'c', 'R', '\010', 's', 'e', 'm', 'a', 'n', 't', 'i', 'c', '\"', '(', '\n', '\010', 'S', 'e', 'm', 'a', 'n', 't', 'i', 'c',
-'\022', '\010', '\n', '\004', 'N', 'O', 'N', 'E', '\020', '\000', '\022', '\007', '\n', '\003', 'S', 'E', 'T', '\020', '\001', '\022', '\t', '\n', '\005', 'A', 'L',
-'I', 'A', 'S', '\020', '\002', '*', '\352', '\001', '\n', '\007', 'E', 'd', 'i', 't', 'i', 'o', 'n', '\022', '\023', '\n', '\017', 'E', 'D', 'I', 'T',
-'I', 'O', 'N', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\023', '\n', '\016', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_',
-'P', 'R', 'O', 'T', 'O', '2', '\020', '\346', '\007', '\022', '\023', '\n', '\016', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', 'P', 'R', 'O', 'T',
-'O', '3', '\020', '\347', '\007', '\022', '\021', '\n', '\014', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '2', '0', '2', '3', '\020', '\350', '\007', '\022',
-'\027', '\n', '\023', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '1', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L', 'Y', '\020', '\001', '\022',
-'\027', '\n', '\023', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '2', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L', 'Y', '\020', '\002', '\022',
-'\035', '\n', '\027', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '9', '9', '9', '9', '7', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L',
-'Y', '\020', '\235', '\215', '\006', '\022', '\035', '\n', '\027', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '9', '9', '9', '9', '8', '_', 'T', 'E',
-'S', 'T', '_', 'O', 'N', 'L', 'Y', '\020', '\236', '\215', '\006', '\022', '\035', '\n', '\027', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '9', '9',
-'9', '9', '9', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L', 'Y', '\020', '\237', '\215', '\006', 'B', '~', '\n', '\023', 'c', 'o', 'm', '.',
+'o', 'n', '\"', 'P', '\n', '\020', 'I', 'd', 'e', 'm', 'p', 'o', 't', 'e', 'n', 'c', 'y', 'L', 'e', 'v', 'e', 'l', '\022', '\027', '\n',
+'\023', 'I', 'D', 'E', 'M', 'P', 'O', 'T', 'E', 'N', 'C', 'Y', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\023', '\n',
+'\017', 'N', 'O', '_', 'S', 'I', 'D', 'E', '_', 'E', 'F', 'F', 'E', 'C', 'T', 'S', '\020', '\001', '\022', '\016', '\n', '\n', 'I', 'D', 'E',
+'M', 'P', 'O', 'T', 'E', 'N', 'T', '\020', '\002', '*', '\t', '\010', '\350', '\007', '\020', '\200', '\200', '\200', '\200', '\002', '\"', '\232', '\003', '\n', '\023',
+'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '\022', 'A', '\n', '\004', 'n', 'a',
+'m', 'e', '\030', '\002', ' ', '\003', '(', '\013', '2', '-', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
+'f', '.', 'U', 'n', 'i', 'n', 't', 'e', 'r', 'p', 'r', 'e', 't', 'e', 'd', 'O', 'p', 't', 'i', 'o', 'n', '.', 'N', 'a', 'm',
+'e', 'P', 'a', 'r', 't', 'R', '\004', 'n', 'a', 'm', 'e', '\022', ')', '\n', '\020', 'i', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r',
+'_', 'v', 'a', 'l', 'u', 'e', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\017', 'i', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', 'V',
+'a', 'l', 'u', 'e', '\022', ',', '\n', '\022', 'p', 'o', 's', 'i', 't', 'i', 'v', 'e', '_', 'i', 'n', 't', '_', 'v', 'a', 'l', 'u',
+'e', '\030', '\004', ' ', '\001', '(', '\004', 'R', '\020', 'p', 'o', 's', 'i', 't', 'i', 'v', 'e', 'I', 'n', 't', 'V', 'a', 'l', 'u', 'e',
+'\022', ',', '\n', '\022', 'n', 'e', 'g', 'a', 't', 'i', 'v', 'e', '_', 'i', 'n', 't', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\005', ' ',
+'\001', '(', '\003', 'R', '\020', 'n', 'e', 'g', 'a', 't', 'i', 'v', 'e', 'I', 'n', 't', 'V', 'a', 'l', 'u', 'e', '\022', '!', '\n', '\014',
+'d', 'o', 'u', 'b', 'l', 'e', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\006', ' ', '\001', '(', '\001', 'R', '\013', 'd', 'o', 'u', 'b', 'l',
+'e', 'V', 'a', 'l', 'u', 'e', '\022', '!', '\n', '\014', 's', 't', 'r', 'i', 'n', 'g', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\007', ' ',
+'\001', '(', '\014', 'R', '\013', 's', 't', 'r', 'i', 'n', 'g', 'V', 'a', 'l', 'u', 'e', '\022', '\'', '\n', '\017', 'a', 'g', 'g', 'r', 'e',
+'g', 'a', 't', 'e', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\010', ' ', '\001', '(', '\t', 'R', '\016', 'a', 'g', 'g', 'r', 'e', 'g', 'a',
+'t', 'e', 'V', 'a', 'l', 'u', 'e', '\032', 'J', '\n', '\010', 'N', 'a', 'm', 'e', 'P', 'a', 'r', 't', '\022', '\033', '\n', '\t', 'n', 'a',
+'m', 'e', '_', 'p', 'a', 'r', 't', '\030', '\001', ' ', '\002', '(', '\t', 'R', '\010', 'n', 'a', 'm', 'e', 'P', 'a', 'r', 't', '\022', '!',
+'\n', '\014', 'i', 's', '_', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', '\030', '\002', ' ', '\002', '(', '\010', 'R', '\013', 'i', 's', 'E',
+'x', 't', 'e', 'n', 's', 'i', 'o', 'n', '\"', '\374', '\t', '\n', '\n', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '\022', '\213',
+'\001', '\n', '\016', 'f', 'i', 'e', 'l', 'd', '_', 'p', 'r', 'e', 's', 'e', 'n', 'c', 'e', '\030', '\001', ' ', '\001', '(', '\016', '2', ')',
+'.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S',
+'e', 't', '.', 'F', 'i', 'e', 'l', 'd', 'P', 'r', 'e', 's', 'e', 'n', 'c', 'e', 'B', '9', '\210', '\001', '\001', '\230', '\001', '\004', '\230',
+'\001', '\001', '\242', '\001', '\r', '\022', '\010', 'E', 'X', 'P', 'L', 'I', 'C', 'I', 'T', '\030', '\346', '\007', '\242', '\001', '\r', '\022', '\010', 'I', 'M',
+'P', 'L', 'I', 'C', 'I', 'T', '\030', '\347', '\007', '\242', '\001', '\r', '\022', '\010', 'E', 'X', 'P', 'L', 'I', 'C', 'I', 'T', '\030', '\350', '\007',
+'R', '\r', 'f', 'i', 'e', 'l', 'd', 'P', 'r', 'e', 's', 'e', 'n', 'c', 'e', '\022', 'f', '\n', '\t', 'e', 'n', 'u', 'm', '_', 't',
+'y', 'p', 'e', '\030', '\002', ' ', '\001', '(', '\016', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b',
+'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'E', 'n', 'u', 'm', 'T', 'y', 'p', 'e', 'B', '#', '\210',
+'\001', '\001', '\230', '\001', '\006', '\230', '\001', '\001', '\242', '\001', '\013', '\022', '\006', 'C', 'L', 'O', 'S', 'E', 'D', '\030', '\346', '\007', '\242', '\001', '\t',
+'\022', '\004', 'O', 'P', 'E', 'N', '\030', '\347', '\007', 'R', '\010', 'e', 'n', 'u', 'm', 'T', 'y', 'p', 'e', '\022', '\222', '\001', '\n', '\027', 'r',
+'e', 'p', 'e', 'a', 't', 'e', 'd', '_', 'f', 'i', 'e', 'l', 'd', '_', 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\030', '\003', ' ',
+'\001', '(', '\016', '2', '1', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a',
+'t', 'u', 'r', 'e', 'S', 'e', 't', '.', 'R', 'e', 'p', 'e', 'a', 't', 'e', 'd', 'F', 'i', 'e', 'l', 'd', 'E', 'n', 'c', 'o',
+'d', 'i', 'n', 'g', 'B', '\'', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001', '\r', '\022', '\010', 'E', 'X', 'P', 'A', 'N',
+'D', 'E', 'D', '\030', '\346', '\007', '\242', '\001', '\013', '\022', '\006', 'P', 'A', 'C', 'K', 'E', 'D', '\030', '\347', '\007', 'R', '\025', 'r', 'e', 'p',
+'e', 'a', 't', 'e', 'd', 'F', 'i', 'e', 'l', 'd', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', 'x', '\n', '\017', 'u', 't', 'f',
+'8', '_', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '\030', '\004', ' ', '\001', '(', '\016', '2', '*', '.', 'g', 'o', 'o', 'g',
+'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'U', 't',
+'f', '8', 'V', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', 'B', '#', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001',
+'\t', '\022', '\004', 'N', 'O', 'N', 'E', '\030', '\346', '\007', '\242', '\001', '\013', '\022', '\006', 'V', 'E', 'R', 'I', 'F', 'Y', '\030', '\347', '\007', 'R',
+'\016', 'u', 't', 'f', '8', 'V', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '\022', 'x', '\n', '\020', 'm', 'e', 's', 's', 'a', 'g',
+'e', '_', 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\030', '\005', ' ', '\001', '(', '\016', '2', '+', '.', 'g', 'o', 'o', 'g', 'l', 'e',
+'.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'M', 'e', 's', 's',
+'a', 'g', 'e', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', 'B', ' ', '\210', '\001', '\001', '\230', '\001', '\004', '\230', '\001', '\001', '\242', '\001', '\024',
+'\022', '\017', 'L', 'E', 'N', 'G', 'T', 'H', '_', 'P', 'R', 'E', 'F', 'I', 'X', 'E', 'D', '\030', '\346', '\007', 'R', '\017', 'm', 'e', 's',
+'s', 'a', 'g', 'e', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', '|', '\n', '\013', 'j', 's', 'o', 'n', '_', 'f', 'o', 'r', 'm',
+'a', 't', '\030', '\006', ' ', '\001', '(', '\016', '2', '&', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
+'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', '.', 'J', 's', 'o', 'n', 'F', 'o', 'r', 'm', 'a', 't', 'B', '3',
+'\210', '\001', '\001', '\230', '\001', '\003', '\230', '\001', '\006', '\230', '\001', '\001', '\242', '\001', '\027', '\022', '\022', 'L', 'E', 'G', 'A', 'C', 'Y', '_', 'B',
+'E', 'S', 'T', '_', 'E', 'F', 'F', 'O', 'R', 'T', '\030', '\346', '\007', '\242', '\001', '\n', '\022', '\005', 'A', 'L', 'L', 'O', 'W', '\030', '\347',
+'\007', 'R', '\n', 'j', 's', 'o', 'n', 'F', 'o', 'r', 'm', 'a', 't', '\"', '\\', '\n', '\r', 'F', 'i', 'e', 'l', 'd', 'P', 'r', 'e',
+'s', 'e', 'n', 'c', 'e', '\022', '\032', '\n', '\026', 'F', 'I', 'E', 'L', 'D', '_', 'P', 'R', 'E', 'S', 'E', 'N', 'C', 'E', '_', 'U',
+'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\014', '\n', '\010', 'E', 'X', 'P', 'L', 'I', 'C', 'I', 'T', '\020', '\001', '\022', '\014', '\n',
+'\010', 'I', 'M', 'P', 'L', 'I', 'C', 'I', 'T', '\020', '\002', '\022', '\023', '\n', '\017', 'L', 'E', 'G', 'A', 'C', 'Y', '_', 'R', 'E', 'Q',
+'U', 'I', 'R', 'E', 'D', '\020', '\003', '\"', '7', '\n', '\010', 'E', 'n', 'u', 'm', 'T', 'y', 'p', 'e', '\022', '\025', '\n', '\021', 'E', 'N',
+'U', 'M', '_', 'T', 'Y', 'P', 'E', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\010', '\n', '\004', 'O', 'P', 'E', 'N',
+'\020', '\001', '\022', '\n', '\n', '\006', 'C', 'L', 'O', 'S', 'E', 'D', '\020', '\002', '\"', 'V', '\n', '\025', 'R', 'e', 'p', 'e', 'a', 't', 'e',
+'d', 'F', 'i', 'e', 'l', 'd', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', '#', '\n', '\037', 'R', 'E', 'P', 'E', 'A', 'T', 'E',
+'D', '_', 'F', 'I', 'E', 'L', 'D', '_', 'E', 'N', 'C', 'O', 'D', 'I', 'N', 'G', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020',
+'\000', '\022', '\n', '\n', '\006', 'P', 'A', 'C', 'K', 'E', 'D', '\020', '\001', '\022', '\014', '\n', '\010', 'E', 'X', 'P', 'A', 'N', 'D', 'E', 'D',
+'\020', '\002', '\"', 'C', '\n', '\016', 'U', 't', 'f', '8', 'V', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '\022', '\033', '\n', '\027', 'U',
+'T', 'F', '8', '_', 'V', 'A', 'L', 'I', 'D', 'A', 'T', 'I', 'O', 'N', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022',
+'\n', '\n', '\006', 'V', 'E', 'R', 'I', 'F', 'Y', '\020', '\002', '\022', '\010', '\n', '\004', 'N', 'O', 'N', 'E', '\020', '\003', '\"', 'S', '\n', '\017',
+'M', 'e', 's', 's', 'a', 'g', 'e', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '\022', '\034', '\n', '\030', 'M', 'E', 'S', 'S', 'A', 'G',
+'E', '_', 'E', 'N', 'C', 'O', 'D', 'I', 'N', 'G', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\023', '\n', '\017', 'L',
+'E', 'N', 'G', 'T', 'H', '_', 'P', 'R', 'E', 'F', 'I', 'X', 'E', 'D', '\020', '\001', '\022', '\r', '\n', '\t', 'D', 'E', 'L', 'I', 'M',
+'I', 'T', 'E', 'D', '\020', '\002', '\"', 'H', '\n', '\n', 'J', 's', 'o', 'n', 'F', 'o', 'r', 'm', 'a', 't', '\022', '\027', '\n', '\023', 'J',
+'S', 'O', 'N', '_', 'F', 'O', 'R', 'M', 'A', 'T', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\t', '\n', '\005', 'A',
+'L', 'L', 'O', 'W', '\020', '\001', '\022', '\026', '\n', '\022', 'L', 'E', 'G', 'A', 'C', 'Y', '_', 'B', 'E', 'S', 'T', '_', 'E', 'F', 'F',
+'O', 'R', 'T', '\020', '\002', '*', '\006', '\010', '\350', '\007', '\020', '\351', '\007', '*', '\006', '\010', '\351', '\007', '\020', '\352', '\007', '*', '\006', '\010', '\213',
+'N', '\020', '\220', 'N', 'J', '\006', '\010', '\347', '\007', '\020', '\350', '\007', '\"', '\376', '\002', '\n', '\022', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S',
+'e', 't', 'D', 'e', 'f', 'a', 'u', 'l', 't', 's', '\022', 'X', '\n', '\010', 'd', 'e', 'f', 'a', 'u', 'l', 't', 's', '\030', '\001', ' ',
+'\003', '(', '\013', '2', '<', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'e', 'a',
+'t', 'u', 'r', 'e', 'S', 'e', 't', 'D', 'e', 'f', 'a', 'u', 'l', 't', 's', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e',
+'t', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', 'R', '\010', 'd', 'e', 'f', 'a', 'u', 'l', 't', 's',
+'\022', 'A', '\n', '\017', 'm', 'i', 'n', 'i', 'm', 'u', 'm', '_', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\004', ' ', '\001', '(', '\016',
+'2', '\030', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i', 'o',
+'n', 'R', '\016', 'm', 'i', 'n', 'i', 'm', 'u', 'm', 'E', 'd', 'i', 't', 'i', 'o', 'n', '\022', 'A', '\n', '\017', 'm', 'a', 'x', 'i',
+'m', 'u', 'm', '_', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030', '\005', ' ', '\001', '(', '\016', '2', '\030', '.', 'g', 'o', 'o', 'g', 'l',
+'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E', 'd', 'i', 't', 'i', 'o', 'n', 'R', '\016', 'm', 'a', 'x', 'i', 'm',
+'u', 'm', 'E', 'd', 'i', 't', 'i', 'o', 'n', '\032', '\207', '\001', '\n', '\030', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'E',
+'d', 'i', 't', 'i', 'o', 'n', 'D', 'e', 'f', 'a', 'u', 'l', 't', '\022', '2', '\n', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\030',
+'\003', ' ', '\001', '(', '\016', '2', '\030', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'E',
+'d', 'i', 't', 'i', 'o', 'n', 'R', '\007', 'e', 'd', 'i', 't', 'i', 'o', 'n', '\022', '7', '\n', '\010', 'f', 'e', 'a', 't', 'u', 'r',
+'e', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '\033', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u',
+'f', '.', 'F', 'e', 'a', 't', 'u', 'r', 'e', 'S', 'e', 't', 'R', '\010', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '\"', '\247', '\002',
+'\n', '\016', 'S', 'o', 'u', 'r', 'c', 'e', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '\022', 'D', '\n', '\010', 'l', 'o', 'c', 'a', 't',
+'i', 'o', 'n', '\030', '\001', ' ', '\003', '(', '\013', '2', '(', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b',
+'u', 'f', '.', 'S', 'o', 'u', 'r', 'c', 'e', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '.', 'L', 'o', 'c', 'a', 't', 'i', 'o',
+'n', 'R', '\010', 'l', 'o', 'c', 'a', 't', 'i', 'o', 'n', '\032', '\316', '\001', '\n', '\010', 'L', 'o', 'c', 'a', 't', 'i', 'o', 'n', '\022',
+'\026', '\n', '\004', 'p', 'a', 't', 'h', '\030', '\001', ' ', '\003', '(', '\005', 'B', '\002', '\020', '\001', 'R', '\004', 'p', 'a', 't', 'h', '\022', '\026',
+'\n', '\004', 's', 'p', 'a', 'n', '\030', '\002', ' ', '\003', '(', '\005', 'B', '\002', '\020', '\001', 'R', '\004', 's', 'p', 'a', 'n', '\022', ')', '\n',
+'\020', 'l', 'e', 'a', 'd', 'i', 'n', 'g', '_', 'c', 'o', 'm', 'm', 'e', 'n', 't', 's', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\017',
+'l', 'e', 'a', 'd', 'i', 'n', 'g', 'C', 'o', 'm', 'm', 'e', 'n', 't', 's', '\022', '+', '\n', '\021', 't', 'r', 'a', 'i', 'l', 'i',
+'n', 'g', '_', 'c', 'o', 'm', 'm', 'e', 'n', 't', 's', '\030', '\004', ' ', '\001', '(', '\t', 'R', '\020', 't', 'r', 'a', 'i', 'l', 'i',
+'n', 'g', 'C', 'o', 'm', 'm', 'e', 'n', 't', 's', '\022', ':', '\n', '\031', 'l', 'e', 'a', 'd', 'i', 'n', 'g', '_', 'd', 'e', 't',
+'a', 'c', 'h', 'e', 'd', '_', 'c', 'o', 'm', 'm', 'e', 'n', 't', 's', '\030', '\006', ' ', '\003', '(', '\t', 'R', '\027', 'l', 'e', 'a',
+'d', 'i', 'n', 'g', 'D', 'e', 't', 'a', 'c', 'h', 'e', 'd', 'C', 'o', 'm', 'm', 'e', 'n', 't', 's', '\"', '\320', '\002', '\n', '\021',
+'G', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'd', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '\022', 'M', '\n', '\n', 'a', 'n', 'n', 'o',
+'t', 'a', 't', 'i', 'o', 'n', '\030', '\001', ' ', '\003', '(', '\013', '2', '-', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o',
+'t', 'o', 'b', 'u', 'f', '.', 'G', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'd', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '.', 'A',
+'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 'R', '\n', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', '\032', '\353', '\001', '\n',
+'\n', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', '\022', '\026', '\n', '\004', 'p', 'a', 't', 'h', '\030', '\001', ' ', '\003', '(', '\005',
+'B', '\002', '\020', '\001', 'R', '\004', 'p', 'a', 't', 'h', '\022', '\037', '\n', '\013', 's', 'o', 'u', 'r', 'c', 'e', '_', 'f', 'i', 'l', 'e',
+'\030', '\002', ' ', '\001', '(', '\t', 'R', '\n', 's', 'o', 'u', 'r', 'c', 'e', 'F', 'i', 'l', 'e', '\022', '\024', '\n', '\005', 'b', 'e', 'g',
+'i', 'n', '\030', '\003', ' ', '\001', '(', '\005', 'R', '\005', 'b', 'e', 'g', 'i', 'n', '\022', '\020', '\n', '\003', 'e', 'n', 'd', '\030', '\004', ' ',
+'\001', '(', '\005', 'R', '\003', 'e', 'n', 'd', '\022', 'R', '\n', '\010', 's', 'e', 'm', 'a', 'n', 't', 'i', 'c', '\030', '\005', ' ', '\001', '(',
+'\016', '2', '6', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'G', 'e', 'n', 'e', 'r',
+'a', 't', 'e', 'd', 'C', 'o', 'd', 'e', 'I', 'n', 'f', 'o', '.', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', '.', 'S',
+'e', 'm', 'a', 'n', 't', 'i', 'c', 'R', '\010', 's', 'e', 'm', 'a', 'n', 't', 'i', 'c', '\"', '(', '\n', '\010', 'S', 'e', 'm', 'a',
+'n', 't', 'i', 'c', '\022', '\010', '\n', '\004', 'N', 'O', 'N', 'E', '\020', '\000', '\022', '\007', '\n', '\003', 'S', 'E', 'T', '\020', '\001', '\022', '\t',
+'\n', '\005', 'A', 'L', 'I', 'A', 'S', '\020', '\002', '*', '\377', '\001', '\n', '\007', 'E', 'd', 'i', 't', 'i', 'o', 'n', '\022', '\023', '\n', '\017',
+'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', 'U', 'N', 'K', 'N', 'O', 'W', 'N', '\020', '\000', '\022', '\023', '\n', '\016', 'E', 'D', 'I', 'T',
+'I', 'O', 'N', '_', 'P', 'R', 'O', 'T', 'O', '2', '\020', '\346', '\007', '\022', '\023', '\n', '\016', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_',
+'P', 'R', 'O', 'T', 'O', '3', '\020', '\347', '\007', '\022', '\021', '\n', '\014', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '2', '0', '2', '3',
+'\020', '\350', '\007', '\022', '\027', '\n', '\023', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '1', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L',
+'Y', '\020', '\001', '\022', '\027', '\n', '\023', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '2', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L',
+'Y', '\020', '\002', '\022', '\035', '\n', '\027', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '9', '9', '9', '9', '7', '_', 'T', 'E', 'S', 'T',
+'_', 'O', 'N', 'L', 'Y', '\020', '\235', '\215', '\006', '\022', '\035', '\n', '\027', 'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', '9', '9', '9', '9',
+'8', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L', 'Y', '\020', '\236', '\215', '\006', '\022', '\035', '\n', '\027', 'E', 'D', 'I', 'T', 'I', 'O',
+'N', '_', '9', '9', '9', '9', '9', '_', 'T', 'E', 'S', 'T', '_', 'O', 'N', 'L', 'Y', '\020', '\237', '\215', '\006', '\022', '\023', '\n', '\013',
+'E', 'D', 'I', 'T', 'I', 'O', 'N', '_', 'M', 'A', 'X', '\020', '\377', '\377', '\377', '\377', '\007', 'B', '~', '\n', '\023', 'c', 'o', 'm', '.',
'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', 'B', '\020', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't',
'o', 'r', 'P', 'r', 'o', 't', 'o', 's', 'H', '\001', 'Z', '-', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'g', 'o', 'l', 'a', 'n', 'g',
'.', 'o', 'r', 'g', '/', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '/', 't', 'y', 'p', 'e', 's', '/', 'd', 'e', 's', 'c', 'r',
@@ -2216,7 +2228,7 @@
deps,
&google_protobuf_descriptor_proto_upb_file_layout,
"google/protobuf/descriptor.proto",
- UPB_STRINGVIEW_INIT(descriptor, 11620)
+ UPB_STRINGVIEW_INIT(descriptor, 11595)
};
@@ -2232,832 +2244,6 @@
e, ptr, overrun, _upb_EpsCopyInputStream_NoOpCallback);
}
-/*
- * upb_table Implementation
- *
- * Implementation is heavily inspired by Lua's ltable.c.
- */
-
-#include <string.h>
-
-
-// Must be last.
-
-#define UPB_MAXARRSIZE 16 // 2**16 = 64k.
-
-// From Chromium.
-#define ARRAY_SIZE(x) \
- ((sizeof(x) / sizeof(0 [x])) / ((size_t)(!(sizeof(x) % sizeof(0 [x])))))
-
-static const double MAX_LOAD = 0.85;
-
-/* The minimum utilization of the array part of a mixed hash/array table. This
- * is a speed/memory-usage tradeoff (though it's not straightforward because of
- * cache effects). The lower this is, the more memory we'll use. */
-static const double MIN_DENSITY = 0.1;
-
-static bool is_pow2(uint64_t v) { return v == 0 || (v & (v - 1)) == 0; }
-
-static upb_value _upb_value_val(uint64_t val) {
- upb_value ret;
- _upb_value_setval(&ret, val);
- return ret;
-}
-
-static int log2ceil(uint64_t v) {
- int ret = 0;
- bool pow2 = is_pow2(v);
- while (v >>= 1) ret++;
- ret = pow2 ? ret : ret + 1; // Ceiling.
- return UPB_MIN(UPB_MAXARRSIZE, ret);
-}
-
-/* A type to represent the lookup key of either a strtable or an inttable. */
-typedef union {
- uintptr_t num;
- struct {
- const char* str;
- size_t len;
- } str;
-} lookupkey_t;
-
-static lookupkey_t strkey2(const char* str, size_t len) {
- lookupkey_t k;
- k.str.str = str;
- k.str.len = len;
- return k;
-}
-
-static lookupkey_t intkey(uintptr_t key) {
- lookupkey_t k;
- k.num = key;
- return k;
-}
-
-typedef uint32_t hashfunc_t(upb_tabkey key);
-typedef bool eqlfunc_t(upb_tabkey k1, lookupkey_t k2);
-
-/* Base table (shared code) ***************************************************/
-
-static uint32_t upb_inthash(uintptr_t key) { return (uint32_t)key; }
-
-static const upb_tabent* upb_getentry(const upb_table* t, uint32_t hash) {
- return t->entries + (hash & t->mask);
-}
-
-static bool upb_arrhas(upb_tabval key) { return key.val != (uint64_t)-1; }
-
-static bool isfull(upb_table* t) { return t->count == t->max_count; }
-
-static bool init(upb_table* t, uint8_t size_lg2, upb_Arena* a) {
- size_t bytes;
-
- t->count = 0;
- t->size_lg2 = size_lg2;
- t->mask = upb_table_size(t) ? upb_table_size(t) - 1 : 0;
- t->max_count = upb_table_size(t) * MAX_LOAD;
- bytes = upb_table_size(t) * sizeof(upb_tabent);
- if (bytes > 0) {
- t->entries = upb_Arena_Malloc(a, bytes);
- if (!t->entries) return false;
- memset(t->entries, 0, bytes);
- } else {
- t->entries = NULL;
- }
- return true;
-}
-
-static upb_tabent* emptyent(upb_table* t, upb_tabent* e) {
- upb_tabent* begin = t->entries;
- upb_tabent* end = begin + upb_table_size(t);
- for (e = e + 1; e < end; e++) {
- if (upb_tabent_isempty(e)) return e;
- }
- for (e = begin; e < end; e++) {
- if (upb_tabent_isempty(e)) return e;
- }
- UPB_ASSERT(false);
- return NULL;
-}
-
-static upb_tabent* getentry_mutable(upb_table* t, uint32_t hash) {
- return (upb_tabent*)upb_getentry(t, hash);
-}
-
-static const upb_tabent* findentry(const upb_table* t, lookupkey_t key,
- uint32_t hash, eqlfunc_t* eql) {
- const upb_tabent* e;
-
- if (t->size_lg2 == 0) return NULL;
- e = upb_getentry(t, hash);
- if (upb_tabent_isempty(e)) return NULL;
- while (1) {
- if (eql(e->key, key)) return e;
- if ((e = e->next) == NULL) return NULL;
- }
-}
-
-static upb_tabent* findentry_mutable(upb_table* t, lookupkey_t key,
- uint32_t hash, eqlfunc_t* eql) {
- return (upb_tabent*)findentry(t, key, hash, eql);
-}
-
-static bool lookup(const upb_table* t, lookupkey_t key, upb_value* v,
- uint32_t hash, eqlfunc_t* eql) {
- const upb_tabent* e = findentry(t, key, hash, eql);
- if (e) {
- if (v) {
- _upb_value_setval(v, e->val.val);
- }
- return true;
- } else {
- return false;
- }
-}
-
-/* The given key must not already exist in the table. */
-static void insert(upb_table* t, lookupkey_t key, upb_tabkey tabkey,
- upb_value val, uint32_t hash, hashfunc_t* hashfunc,
- eqlfunc_t* eql) {
- upb_tabent* mainpos_e;
- upb_tabent* our_e;
-
- UPB_ASSERT(findentry(t, key, hash, eql) == NULL);
-
- t->count++;
- mainpos_e = getentry_mutable(t, hash);
- our_e = mainpos_e;
-
- if (upb_tabent_isempty(mainpos_e)) {
- /* Our main position is empty; use it. */
- our_e->next = NULL;
- } else {
- /* Collision. */
- upb_tabent* new_e = emptyent(t, mainpos_e);
- /* Head of collider's chain. */
- upb_tabent* chain = getentry_mutable(t, hashfunc(mainpos_e->key));
- if (chain == mainpos_e) {
- /* Existing ent is in its main position (it has the same hash as us, and
- * is the head of our chain). Insert to new ent and append to this chain.
- */
- new_e->next = mainpos_e->next;
- mainpos_e->next = new_e;
- our_e = new_e;
- } else {
- /* Existing ent is not in its main position (it is a node in some other
- * chain). This implies that no existing ent in the table has our hash.
- * Evict it (updating its chain) and use its ent for head of our chain. */
- *new_e = *mainpos_e; /* copies next. */
- while (chain->next != mainpos_e) {
- chain = (upb_tabent*)chain->next;
- UPB_ASSERT(chain);
- }
- chain->next = new_e;
- our_e = mainpos_e;
- our_e->next = NULL;
- }
- }
- our_e->key = tabkey;
- our_e->val.val = val.val;
- UPB_ASSERT(findentry(t, key, hash, eql) == our_e);
-}
-
-static bool rm(upb_table* t, lookupkey_t key, upb_value* val,
- upb_tabkey* removed, uint32_t hash, eqlfunc_t* eql) {
- upb_tabent* chain = getentry_mutable(t, hash);
- if (upb_tabent_isempty(chain)) return false;
- if (eql(chain->key, key)) {
- /* Element to remove is at the head of its chain. */
- t->count--;
- if (val) _upb_value_setval(val, chain->val.val);
- if (removed) *removed = chain->key;
- if (chain->next) {
- upb_tabent* move = (upb_tabent*)chain->next;
- *chain = *move;
- move->key = 0; /* Make the slot empty. */
- } else {
- chain->key = 0; /* Make the slot empty. */
- }
- return true;
- } else {
- /* Element to remove is either in a non-head position or not in the
- * table. */
- while (chain->next && !eql(chain->next->key, key)) {
- chain = (upb_tabent*)chain->next;
- }
- if (chain->next) {
- /* Found element to remove. */
- upb_tabent* rm = (upb_tabent*)chain->next;
- t->count--;
- if (val) _upb_value_setval(val, chain->next->val.val);
- if (removed) *removed = rm->key;
- rm->key = 0; /* Make the slot empty. */
- chain->next = rm->next;
- return true;
- } else {
- /* Element to remove is not in the table. */
- return false;
- }
- }
-}
-
-static size_t next(const upb_table* t, size_t i) {
- do {
- if (++i >= upb_table_size(t)) return SIZE_MAX - 1; /* Distinct from -1. */
- } while (upb_tabent_isempty(&t->entries[i]));
-
- return i;
-}
-
-static size_t begin(const upb_table* t) { return next(t, -1); }
-
-/* upb_strtable ***************************************************************/
-
-/* A simple "subclass" of upb_table that only adds a hash function for strings.
- */
-
-static upb_tabkey strcopy(lookupkey_t k2, upb_Arena* a) {
- uint32_t len = (uint32_t)k2.str.len;
- char* str = upb_Arena_Malloc(a, k2.str.len + sizeof(uint32_t) + 1);
- if (str == NULL) return 0;
- memcpy(str, &len, sizeof(uint32_t));
- if (k2.str.len) memcpy(str + sizeof(uint32_t), k2.str.str, k2.str.len);
- str[sizeof(uint32_t) + k2.str.len] = '\0';
- return (uintptr_t)str;
-}
-
-/* Adapted from ABSL's wyhash. */
-
-static uint64_t UnalignedLoad64(const void* p) {
- uint64_t val;
- memcpy(&val, p, 8);
- return val;
-}
-
-static uint32_t UnalignedLoad32(const void* p) {
- uint32_t val;
- memcpy(&val, p, 4);
- return val;
-}
-
-#if defined(_MSC_VER) && defined(_M_X64)
-#include <intrin.h>
-#endif
-
-/* Computes a * b, returning the low 64 bits of the result and storing the high
- * 64 bits in |*high|. */
-static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) {
-#ifdef __SIZEOF_INT128__
- __uint128_t p = v0;
- p *= v1;
- *out_high = (uint64_t)(p >> 64);
- return (uint64_t)p;
-#elif defined(_MSC_VER) && defined(_M_X64)
- return _umul128(v0, v1, out_high);
-#else
- uint64_t a32 = v0 >> 32;
- uint64_t a00 = v0 & 0xffffffff;
- uint64_t b32 = v1 >> 32;
- uint64_t b00 = v1 & 0xffffffff;
- uint64_t high = a32 * b32;
- uint64_t low = a00 * b00;
- uint64_t mid1 = a32 * b00;
- uint64_t mid2 = a00 * b32;
- low += (mid1 << 32) + (mid2 << 32);
- // Omit carry bit, for mixing we do not care about exact numerical precision.
- high += (mid1 >> 32) + (mid2 >> 32);
- *out_high = high;
- return low;
-#endif
-}
-
-static uint64_t WyhashMix(uint64_t v0, uint64_t v1) {
- uint64_t high;
- uint64_t low = upb_umul128(v0, v1, &high);
- return low ^ high;
-}
-
-static uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
- const uint64_t salt[]) {
- const uint8_t* ptr = (const uint8_t*)data;
- uint64_t starting_length = (uint64_t)len;
- uint64_t current_state = seed ^ salt[0];
-
- if (len > 64) {
- // If we have more than 64 bytes, we're going to handle chunks of 64
- // bytes at a time. We're going to build up two separate hash states
- // which we will then hash together.
- uint64_t duplicated_state = current_state;
-
- do {
- uint64_t a = UnalignedLoad64(ptr);
- uint64_t b = UnalignedLoad64(ptr + 8);
- uint64_t c = UnalignedLoad64(ptr + 16);
- uint64_t d = UnalignedLoad64(ptr + 24);
- uint64_t e = UnalignedLoad64(ptr + 32);
- uint64_t f = UnalignedLoad64(ptr + 40);
- uint64_t g = UnalignedLoad64(ptr + 48);
- uint64_t h = UnalignedLoad64(ptr + 56);
-
- uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state);
- uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state);
- current_state = (cs0 ^ cs1);
-
- uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state);
- uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state);
- duplicated_state = (ds0 ^ ds1);
-
- ptr += 64;
- len -= 64;
- } while (len > 64);
-
- current_state = current_state ^ duplicated_state;
- }
-
- // We now have a data `ptr` with at most 64 bytes and the current state
- // of the hashing state machine stored in current_state.
- while (len > 16) {
- uint64_t a = UnalignedLoad64(ptr);
- uint64_t b = UnalignedLoad64(ptr + 8);
-
- current_state = WyhashMix(a ^ salt[1], b ^ current_state);
-
- ptr += 16;
- len -= 16;
- }
-
- // We now have a data `ptr` with at most 16 bytes.
- uint64_t a = 0;
- uint64_t b = 0;
- if (len > 8) {
- // When we have at least 9 and at most 16 bytes, set A to the first 64
- // bits of the input and B to the last 64 bits of the input. Yes, they will
- // overlap in the middle if we are working with less than the full 16
- // bytes.
- a = UnalignedLoad64(ptr);
- b = UnalignedLoad64(ptr + len - 8);
- } else if (len > 3) {
- // If we have at least 4 and at most 8 bytes, set A to the first 32
- // bits and B to the last 32 bits.
- a = UnalignedLoad32(ptr);
- b = UnalignedLoad32(ptr + len - 4);
- } else if (len > 0) {
- // If we have at least 1 and at most 3 bytes, read all of the provided
- // bits into A, with some adjustments.
- a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
- b = 0;
- } else {
- a = 0;
- b = 0;
- }
-
- uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state);
- uint64_t z = salt[1] ^ starting_length;
- return WyhashMix(w, z);
-}
-
-const uint64_t kWyhashSalt[5] = {
- 0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL,
- 0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL,
-};
-
-uint32_t _upb_Hash(const void* p, size_t n, uint64_t seed) {
- return Wyhash(p, n, seed, kWyhashSalt);
-}
-
-static uint32_t _upb_Hash_NoSeed(const char* p, size_t n) {
- return _upb_Hash(p, n, 0);
-}
-
-static uint32_t strhash(upb_tabkey key) {
- uint32_t len;
- char* str = upb_tabstr(key, &len);
- return _upb_Hash_NoSeed(str, len);
-}
-
-static bool streql(upb_tabkey k1, lookupkey_t k2) {
- uint32_t len;
- char* str = upb_tabstr(k1, &len);
- return len == k2.str.len && (len == 0 || memcmp(str, k2.str.str, len) == 0);
-}
-
-bool upb_strtable_init(upb_strtable* t, size_t expected_size, upb_Arena* a) {
- // Multiply by approximate reciprocal of MAX_LOAD (0.85), with pow2
- // denominator.
- size_t need_entries = (expected_size + 1) * 1204 / 1024;
- UPB_ASSERT(need_entries >= expected_size * 0.85);
- int size_lg2 = upb_Log2Ceiling(need_entries);
- return init(&t->t, size_lg2, a);
-}
-
-void upb_strtable_clear(upb_strtable* t) {
- size_t bytes = upb_table_size(&t->t) * sizeof(upb_tabent);
- t->t.count = 0;
- memset((char*)t->t.entries, 0, bytes);
-}
-
-bool upb_strtable_resize(upb_strtable* t, size_t size_lg2, upb_Arena* a) {
- upb_strtable new_table;
- if (!init(&new_table.t, size_lg2, a)) return false;
-
- intptr_t iter = UPB_STRTABLE_BEGIN;
- upb_StringView key;
- upb_value val;
- while (upb_strtable_next2(t, &key, &val, &iter)) {
- upb_strtable_insert(&new_table, key.data, key.size, val, a);
- }
- *t = new_table;
- return true;
-}
-
-bool upb_strtable_insert(upb_strtable* t, const char* k, size_t len,
- upb_value v, upb_Arena* a) {
- lookupkey_t key;
- upb_tabkey tabkey;
- uint32_t hash;
-
- if (isfull(&t->t)) {
- /* Need to resize. New table of double the size, add old elements to it. */
- if (!upb_strtable_resize(t, t->t.size_lg2 + 1, a)) {
- return false;
- }
- }
-
- key = strkey2(k, len);
- tabkey = strcopy(key, a);
- if (tabkey == 0) return false;
-
- hash = _upb_Hash_NoSeed(key.str.str, key.str.len);
- insert(&t->t, key, tabkey, v, hash, &strhash, &streql);
- return true;
-}
-
-bool upb_strtable_lookup2(const upb_strtable* t, const char* key, size_t len,
- upb_value* v) {
- uint32_t hash = _upb_Hash_NoSeed(key, len);
- return lookup(&t->t, strkey2(key, len), v, hash, &streql);
-}
-
-bool upb_strtable_remove2(upb_strtable* t, const char* key, size_t len,
- upb_value* val) {
- uint32_t hash = _upb_Hash_NoSeed(key, len);
- upb_tabkey tabkey;
- return rm(&t->t, strkey2(key, len), val, &tabkey, hash, &streql);
-}
-
-/* Iteration */
-
-void upb_strtable_begin(upb_strtable_iter* i, const upb_strtable* t) {
- i->t = t;
- i->index = begin(&t->t);
-}
-
-void upb_strtable_next(upb_strtable_iter* i) {
- i->index = next(&i->t->t, i->index);
-}
-
-bool upb_strtable_done(const upb_strtable_iter* i) {
- if (!i->t) return true;
- return i->index >= upb_table_size(&i->t->t) ||
- upb_tabent_isempty(str_tabent(i));
-}
-
-upb_StringView upb_strtable_iter_key(const upb_strtable_iter* i) {
- upb_StringView key;
- uint32_t len;
- UPB_ASSERT(!upb_strtable_done(i));
- key.data = upb_tabstr(str_tabent(i)->key, &len);
- key.size = len;
- return key;
-}
-
-upb_value upb_strtable_iter_value(const upb_strtable_iter* i) {
- UPB_ASSERT(!upb_strtable_done(i));
- return _upb_value_val(str_tabent(i)->val.val);
-}
-
-void upb_strtable_iter_setdone(upb_strtable_iter* i) {
- i->t = NULL;
- i->index = SIZE_MAX;
-}
-
-bool upb_strtable_iter_isequal(const upb_strtable_iter* i1,
- const upb_strtable_iter* i2) {
- if (upb_strtable_done(i1) && upb_strtable_done(i2)) return true;
- return i1->t == i2->t && i1->index == i2->index;
-}
-
-/* upb_inttable ***************************************************************/
-
-/* For inttables we use a hybrid structure where small keys are kept in an
- * array and large keys are put in the hash table. */
-
-static uint32_t inthash(upb_tabkey key) { return upb_inthash(key); }
-
-static bool inteql(upb_tabkey k1, lookupkey_t k2) { return k1 == k2.num; }
-
-static upb_tabval* mutable_array(upb_inttable* t) {
- return (upb_tabval*)t->array;
-}
-
-static upb_tabval* inttable_val(upb_inttable* t, uintptr_t key) {
- if (key < t->array_size) {
- return upb_arrhas(t->array[key]) ? &(mutable_array(t)[key]) : NULL;
- } else {
- upb_tabent* e =
- findentry_mutable(&t->t, intkey(key), upb_inthash(key), &inteql);
- return e ? &e->val : NULL;
- }
-}
-
-static const upb_tabval* inttable_val_const(const upb_inttable* t,
- uintptr_t key) {
- return inttable_val((upb_inttable*)t, key);
-}
-
-size_t upb_inttable_count(const upb_inttable* t) {
- return t->t.count + t->array_count;
-}
-
-static void check(upb_inttable* t) {
- UPB_UNUSED(t);
-#if defined(UPB_DEBUG_TABLE) && !defined(NDEBUG)
- {
- // This check is very expensive (makes inserts/deletes O(N)).
- size_t count = 0;
- intptr_t iter = UPB_INTTABLE_BEGIN;
- uintptr_t key;
- upb_value val;
- while (upb_inttable_next(t, &key, &val, &iter)) {
- UPB_ASSERT(upb_inttable_lookup(t, key, NULL));
- }
- UPB_ASSERT(count == upb_inttable_count(t));
- }
-#endif
-}
-
-bool upb_inttable_sizedinit(upb_inttable* t, size_t asize, int hsize_lg2,
- upb_Arena* a) {
- size_t array_bytes;
-
- if (!init(&t->t, hsize_lg2, a)) return false;
- /* Always make the array part at least 1 long, so that we know key 0
- * won't be in the hash part, which simplifies things. */
- t->array_size = UPB_MAX(1, asize);
- t->array_count = 0;
- array_bytes = t->array_size * sizeof(upb_value);
- t->array = upb_Arena_Malloc(a, array_bytes);
- if (!t->array) {
- return false;
- }
- memset(mutable_array(t), 0xff, array_bytes);
- check(t);
- return true;
-}
-
-bool upb_inttable_init(upb_inttable* t, upb_Arena* a) {
- return upb_inttable_sizedinit(t, 0, 4, a);
-}
-
-bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
- upb_Arena* a) {
- upb_tabval tabval;
- tabval.val = val.val;
- UPB_ASSERT(
- upb_arrhas(tabval)); /* This will reject (uint64_t)-1. Fix this. */
-
- if (key < t->array_size) {
- UPB_ASSERT(!upb_arrhas(t->array[key]));
- t->array_count++;
- mutable_array(t)[key].val = val.val;
- } else {
- if (isfull(&t->t)) {
- /* Need to resize the hash part, but we re-use the array part. */
- size_t i;
- upb_table new_table;
-
- if (!init(&new_table, t->t.size_lg2 + 1, a)) {
- return false;
- }
-
- for (i = begin(&t->t); i < upb_table_size(&t->t); i = next(&t->t, i)) {
- const upb_tabent* e = &t->t.entries[i];
- uint32_t hash;
- upb_value v;
-
- _upb_value_setval(&v, e->val.val);
- hash = upb_inthash(e->key);
- insert(&new_table, intkey(e->key), e->key, v, hash, &inthash, &inteql);
- }
-
- UPB_ASSERT(t->t.count == new_table.count);
-
- t->t = new_table;
- }
- insert(&t->t, intkey(key), key, val, upb_inthash(key), &inthash, &inteql);
- }
- check(t);
- return true;
-}
-
-bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v) {
- const upb_tabval* table_v = inttable_val_const(t, key);
- if (!table_v) return false;
- if (v) _upb_value_setval(v, table_v->val);
- return true;
-}
-
-bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val) {
- upb_tabval* table_v = inttable_val(t, key);
- if (!table_v) return false;
- table_v->val = val.val;
- return true;
-}
-
-bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val) {
- bool success;
- if (key < t->array_size) {
- if (upb_arrhas(t->array[key])) {
- upb_tabval empty = UPB_TABVALUE_EMPTY_INIT;
- t->array_count--;
- if (val) {
- _upb_value_setval(val, t->array[key].val);
- }
- mutable_array(t)[key] = empty;
- success = true;
- } else {
- success = false;
- }
- } else {
- success = rm(&t->t, intkey(key), val, NULL, upb_inthash(key), &inteql);
- }
- check(t);
- return success;
-}
-
-void upb_inttable_compact(upb_inttable* t, upb_Arena* a) {
- /* A power-of-two histogram of the table keys. */
- size_t counts[UPB_MAXARRSIZE + 1] = {0};
-
- /* The max key in each bucket. */
- uintptr_t max[UPB_MAXARRSIZE + 1] = {0};
-
- {
- intptr_t iter = UPB_INTTABLE_BEGIN;
- uintptr_t key;
- upb_value val;
- while (upb_inttable_next(t, &key, &val, &iter)) {
- int bucket = log2ceil(key);
- max[bucket] = UPB_MAX(max[bucket], key);
- counts[bucket]++;
- }
- }
-
- /* Find the largest power of two that satisfies the MIN_DENSITY
- * definition (while actually having some keys). */
- size_t arr_count = upb_inttable_count(t);
- int size_lg2;
- upb_inttable new_t;
-
- for (size_lg2 = ARRAY_SIZE(counts) - 1; size_lg2 > 0; size_lg2--) {
- if (counts[size_lg2] == 0) {
- /* We can halve again without losing any entries. */
- continue;
- } else if (arr_count >= (1 << size_lg2) * MIN_DENSITY) {
- break;
- }
-
- arr_count -= counts[size_lg2];
- }
-
- UPB_ASSERT(arr_count <= upb_inttable_count(t));
-
- {
- /* Insert all elements into new, perfectly-sized table. */
- size_t arr_size = max[size_lg2] + 1; /* +1 so arr[max] will fit. */
- size_t hash_count = upb_inttable_count(t) - arr_count;
- size_t hash_size = hash_count ? (hash_count / MAX_LOAD) + 1 : 0;
- int hashsize_lg2 = log2ceil(hash_size);
-
- upb_inttable_sizedinit(&new_t, arr_size, hashsize_lg2, a);
-
- {
- intptr_t iter = UPB_INTTABLE_BEGIN;
- uintptr_t key;
- upb_value val;
- while (upb_inttable_next(t, &key, &val, &iter)) {
- upb_inttable_insert(&new_t, key, val, a);
- }
- }
-
- UPB_ASSERT(new_t.array_size == arr_size);
- UPB_ASSERT(new_t.t.size_lg2 == hashsize_lg2);
- }
- *t = new_t;
-}
-
-// Iteration.
-
-bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
- intptr_t* iter) {
- intptr_t i = *iter;
- if ((size_t)(i + 1) <= t->array_size) {
- while ((size_t)++i < t->array_size) {
- upb_tabval ent = t->array[i];
- if (upb_arrhas(ent)) {
- *key = i;
- *val = _upb_value_val(ent.val);
- *iter = i;
- return true;
- }
- }
- i--; // Back up to exactly one position before the start of the table.
- }
-
- size_t tab_idx = next(&t->t, i - t->array_size);
- if (tab_idx < upb_table_size(&t->t)) {
- upb_tabent* ent = &t->t.entries[tab_idx];
- *key = ent->key;
- *val = _upb_value_val(ent->val.val);
- *iter = tab_idx + t->array_size;
- return true;
- }
-
- return false;
-}
-
-void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter) {
- intptr_t i = *iter;
- if ((size_t)i < t->array_size) {
- t->array_count--;
- mutable_array(t)[i].val = -1;
- } else {
- upb_tabent* ent = &t->t.entries[i - t->array_size];
- upb_tabent* prev = NULL;
-
- // Linear search, not great.
- upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
- for (upb_tabent* e = t->t.entries; e != end; e++) {
- if (e->next == ent) {
- prev = e;
- break;
- }
- }
-
- if (prev) {
- prev->next = ent->next;
- }
-
- t->t.count--;
- ent->key = 0;
- ent->next = NULL;
- }
-}
-
-bool upb_strtable_next2(const upb_strtable* t, upb_StringView* key,
- upb_value* val, intptr_t* iter) {
- size_t tab_idx = next(&t->t, *iter);
- if (tab_idx < upb_table_size(&t->t)) {
- upb_tabent* ent = &t->t.entries[tab_idx];
- uint32_t len;
- key->data = upb_tabstr(ent->key, &len);
- key->size = len;
- *val = _upb_value_val(ent->val.val);
- *iter = tab_idx;
- return true;
- }
-
- return false;
-}
-
-void upb_strtable_removeiter(upb_strtable* t, intptr_t* iter) {
- intptr_t i = *iter;
- upb_tabent* ent = &t->t.entries[i];
- upb_tabent* prev = NULL;
-
- // Linear search, not great.
- upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
- for (upb_tabent* e = t->t.entries; e != end; e++) {
- if (e->next == ent) {
- prev = e;
- break;
- }
- }
-
- if (prev) {
- prev->next = ent->next;
- }
-
- t->t.count--;
- ent->key = 0;
- ent->next = NULL;
-}
-
-void upb_strtable_setentryvalue(upb_strtable* t, intptr_t iter, upb_value v) {
- upb_tabent* ent = &t->t.entries[iter];
- ent->val.val = v.val;
-}
-
#include <errno.h>
#include <float.h>
@@ -3088,12 +2274,17 @@
const upb_FieldDef* debug_field;
} jsondec;
+typedef struct {
+ upb_MessageValue value;
+ bool ignore;
+} upb_JsonMessageValue;
+
enum { JD_OBJECT, JD_ARRAY, JD_STRING, JD_NUMBER, JD_TRUE, JD_FALSE, JD_NULL };
/* Forward declarations of mutually-recursive functions. */
static void jsondec_wellknown(jsondec* d, upb_Message* msg,
const upb_MessageDef* m);
-static upb_MessageValue jsondec_value(jsondec* d, const upb_FieldDef* f);
+static upb_JsonMessageValue jsondec_value(jsondec* d, const upb_FieldDef* f);
static void jsondec_wellknownvalue(jsondec* d, upb_Message* msg,
const upb_MessageDef* m);
static void jsondec_object(jsondec* d, upb_Message* msg,
@@ -3824,19 +3015,19 @@
return val;
}
-static upb_MessageValue jsondec_enum(jsondec* d, const upb_FieldDef* f) {
+static upb_JsonMessageValue jsondec_enum(jsondec* d, const upb_FieldDef* f) {
switch (jsondec_peek(d)) {
case JD_STRING: {
upb_StringView str = jsondec_string(d);
const upb_EnumDef* e = upb_FieldDef_EnumSubDef(f);
const upb_EnumValueDef* ev =
upb_EnumDef_FindValueByNameWithSize(e, str.data, str.size);
- upb_MessageValue val;
+ upb_JsonMessageValue val = {.ignore = false};
if (ev) {
- val.int32_val = upb_EnumValueDef_Number(ev);
+ val.value.int32_val = upb_EnumValueDef_Number(ev);
} else {
if (d->options & upb_JsonDecode_IgnoreUnknown) {
- val.int32_val = 0;
+ val.ignore = true;
} else {
jsondec_errf(d, "Unknown enumerator: '" UPB_STRINGVIEW_FORMAT "'",
UPB_STRINGVIEW_ARGS(str));
@@ -3846,15 +3037,16 @@
}
case JD_NULL: {
if (jsondec_isnullvalue(f)) {
- upb_MessageValue val;
+ upb_JsonMessageValue val = {.ignore = false};
jsondec_null(d);
- val.int32_val = 0;
+ val.value.int32_val = 0;
return val;
}
}
/* Fallthrough. */
default:
- return jsondec_int(d, f);
+ return (upb_JsonMessageValue){.value = jsondec_int(d, f),
+ .ignore = false};
}
}
@@ -3897,8 +3089,10 @@
jsondec_arrstart(d);
while (jsondec_arrnext(d)) {
- upb_MessageValue elem = jsondec_value(d, f);
- upb_Array_Append(arr, elem, d->arena);
+ upb_JsonMessageValue elem = jsondec_value(d, f);
+ if (!elem.ignore) {
+ upb_Array_Append(arr, elem.value, d->arena);
+ }
}
jsondec_arrend(d);
}
@@ -3911,11 +3105,14 @@
jsondec_objstart(d);
while (jsondec_objnext(d)) {
- upb_MessageValue key, val;
+ upb_JsonMessageValue key, val;
key = jsondec_value(d, key_f);
+ UPB_ASSUME(!key.ignore); // Map key cannot be enum.
jsondec_entrysep(d);
val = jsondec_value(d, val_f);
- upb_Map_Set(map, key, val, d->arena);
+ if (!val.ignore) {
+ upb_Map_Set(map, key.value, val.value, d->arena);
+ }
}
jsondec_objend(d);
}
@@ -3996,8 +3193,10 @@
const upb_MessageDef* subm = upb_FieldDef_MessageSubDef(f);
jsondec_tomsg(d, submsg, subm);
} else {
- upb_MessageValue val = jsondec_value(d, f);
- upb_Message_SetFieldByDef(msg, f, val, d->arena);
+ upb_JsonMessageValue val = jsondec_value(d, f);
+ if (!val.ignore) {
+ upb_Message_SetFieldByDef(msg, f, val.value, d->arena);
+ }
}
d->debug_field = preserved;
@@ -4012,7 +3211,7 @@
jsondec_objend(d);
}
-static upb_MessageValue jsondec_value(jsondec* d, const upb_FieldDef* f) {
+static upb_MessageValue jsondec_nonenum(jsondec* d, const upb_FieldDef* f) {
switch (upb_FieldDef_CType(f)) {
case kUpb_CType_Bool:
return jsondec_bool(d, f);
@@ -4028,15 +3227,23 @@
case kUpb_CType_String:
case kUpb_CType_Bytes:
return jsondec_strfield(d, f);
- case kUpb_CType_Enum:
- return jsondec_enum(d, f);
case kUpb_CType_Message:
return jsondec_msg(d, f);
+ case kUpb_CType_Enum:
default:
UPB_UNREACHABLE();
}
}
+static upb_JsonMessageValue jsondec_value(jsondec* d, const upb_FieldDef* f) {
+ if (upb_FieldDef_CType(f) == kUpb_CType_Enum) {
+ return jsondec_enum(d, f);
+ } else {
+ return (upb_JsonMessageValue){.value = jsondec_nonenum(d, f),
+ .ignore = false};
+ }
+}
+
/* Well-known types ***********************************************************/
static int jsondec_tsdigits(jsondec* d, const char** ptr, size_t digits,
@@ -4461,8 +3668,9 @@
static void jsondec_wrapper(jsondec* d, upb_Message* msg,
const upb_MessageDef* m) {
const upb_FieldDef* value_f = upb_MessageDef_FindFieldByNumber(m, 1);
- upb_MessageValue val = jsondec_value(d, value_f);
- upb_Message_SetFieldByDef(msg, value_f, val, d->arena);
+ upb_JsonMessageValue val = jsondec_value(d, value_f);
+ UPB_ASSUME(val.ignore == false); // Wrapper cannot be an enum.
+ upb_Message_SetFieldByDef(msg, value_f, val.value, d->arena);
}
static void jsondec_wellknown(jsondec* d, upb_Message* msg,
@@ -5317,6 +4525,6496 @@
}
+#include <stdlib.h>
+
+// Must be last.
+
+static void* upb_global_allocfunc(upb_alloc* alloc, void* ptr, size_t oldsize,
+ size_t size) {
+ UPB_UNUSED(alloc);
+ UPB_UNUSED(oldsize);
+ if (size == 0) {
+ free(ptr);
+ return NULL;
+ } else {
+ return realloc(ptr, size);
+ }
+}
+
+upb_alloc upb_alloc_global = {&upb_global_allocfunc};
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+typedef struct upb_MemBlock {
+ // Atomic only for the benefit of SpaceAllocated().
+ UPB_ATOMIC(struct upb_MemBlock*) next;
+ uint32_t size;
+ // Data follows.
+} upb_MemBlock;
+
+typedef struct upb_ArenaInternal {
+ // upb_alloc* together with a low bit which signals if there is an initial
+ // block.
+ uintptr_t block_alloc;
+
+ // When multiple arenas are fused together, each arena points to a parent
+ // arena (root points to itself). The root tracks how many live arenas
+ // reference it.
+
+ // The low bit is tagged:
+ // 0: pointer to parent
+ // 1: count, left shifted by one
+ UPB_ATOMIC(uintptr_t) parent_or_count;
+
+ // All nodes that are fused together are in a singly-linked list.
+ // == NULL at end of list.
+ UPB_ATOMIC(struct upb_ArenaInternal*) next;
+
+ // The last element of the linked list. This is present only as an
+ // optimization, so that we do not have to iterate over all members for every
+ // fuse. Only significant for an arena root. In other cases it is ignored.
+ // == self when no other list members.
+ UPB_ATOMIC(struct upb_ArenaInternal*) tail;
+
+ // Linked list of blocks to free/cleanup. Atomic only for the benefit of
+ // upb_Arena_SpaceAllocated().
+ UPB_ATOMIC(upb_MemBlock*) blocks;
+} upb_ArenaInternal;
+
+// All public + private state for an arena.
+typedef struct {
+ upb_Arena head;
+ upb_ArenaInternal body;
+} upb_ArenaState;
+
+typedef struct {
+ upb_ArenaInternal* root;
+ uintptr_t tagged_count;
+} upb_ArenaRoot;
+
+static const size_t kUpb_MemblockReserve =
+ UPB_ALIGN_UP(sizeof(upb_MemBlock), UPB_MALLOC_ALIGN);
+
+// Extracts the (upb_ArenaInternal*) from a (upb_Arena*)
+static upb_ArenaInternal* upb_Arena_Internal(const upb_Arena* a) {
+ return &((upb_ArenaState*)a)->body;
+}
+
+static bool _upb_Arena_IsTaggedRefcount(uintptr_t parent_or_count) {
+ return (parent_or_count & 1) == 1;
+}
+
+static bool _upb_Arena_IsTaggedPointer(uintptr_t parent_or_count) {
+ return (parent_or_count & 1) == 0;
+}
+
+static uintptr_t _upb_Arena_RefCountFromTagged(uintptr_t parent_or_count) {
+ UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
+ return parent_or_count >> 1;
+}
+
+static uintptr_t _upb_Arena_TaggedFromRefcount(uintptr_t refcount) {
+ uintptr_t parent_or_count = (refcount << 1) | 1;
+ UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
+ return parent_or_count;
+}
+
+static upb_ArenaInternal* _upb_Arena_PointerFromTagged(
+ uintptr_t parent_or_count) {
+ UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
+ return (upb_ArenaInternal*)parent_or_count;
+}
+
+static uintptr_t _upb_Arena_TaggedFromPointer(upb_ArenaInternal* ai) {
+ uintptr_t parent_or_count = (uintptr_t)ai;
+ UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
+ return parent_or_count;
+}
+
+static upb_alloc* _upb_ArenaInternal_BlockAlloc(upb_ArenaInternal* ai) {
+ return (upb_alloc*)(ai->block_alloc & ~0x1);
+}
+
+static uintptr_t _upb_Arena_MakeBlockAlloc(upb_alloc* alloc, bool has_initial) {
+ uintptr_t alloc_uint = (uintptr_t)alloc;
+ UPB_ASSERT((alloc_uint & 1) == 0);
+ return alloc_uint | (has_initial ? 1 : 0);
+}
+
+static bool _upb_ArenaInternal_HasInitialBlock(upb_ArenaInternal* ai) {
+ return ai->block_alloc & 0x1;
+}
+
+static upb_ArenaRoot _upb_Arena_FindRoot(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ while (_upb_Arena_IsTaggedPointer(poc)) {
+ upb_ArenaInternal* next = _upb_Arena_PointerFromTagged(poc);
+ UPB_ASSERT(ai != next);
+ uintptr_t next_poc =
+ upb_Atomic_Load(&next->parent_or_count, memory_order_acquire);
+
+ if (_upb_Arena_IsTaggedPointer(next_poc)) {
+ // To keep complexity down, we lazily collapse levels of the tree. This
+ // keeps it flat in the final case, but doesn't cost much incrementally.
+ //
+ // Path splitting keeps time complexity down, see:
+ // https://en.wikipedia.org/wiki/Disjoint-set_data_structure
+ //
+ // We can safely use a relaxed atomic here because all threads doing this
+ // will converge on the same value and we don't need memory orderings to
+ // be visible.
+ //
+ // This is true because:
+ // - If no fuses occur, this will eventually become the root.
+ // - If fuses are actively occurring, the root may change, but the
+ // invariant is that `parent_or_count` merely points to *a* parent.
+ //
+ // In other words, it is moving towards "the" root, and that root may move
+ // further away over time, but the path towards that root will continue to
+ // be valid and the creation of the path carries all the memory orderings
+ // required.
+ UPB_ASSERT(ai != _upb_Arena_PointerFromTagged(next_poc));
+ upb_Atomic_Store(&ai->parent_or_count, next_poc, memory_order_relaxed);
+ }
+ ai = next;
+ poc = next_poc;
+ }
+ return (upb_ArenaRoot){.root = ai, .tagged_count = poc};
+}
+
+size_t upb_Arena_SpaceAllocated(upb_Arena* arena) {
+ upb_ArenaInternal* ai = _upb_Arena_FindRoot(arena).root;
+ size_t memsize = 0;
+
+ while (ai != NULL) {
+ upb_MemBlock* block = upb_Atomic_Load(&ai->blocks, memory_order_relaxed);
+ while (block != NULL) {
+ memsize += sizeof(upb_MemBlock) + block->size;
+ block = upb_Atomic_Load(&block->next, memory_order_relaxed);
+ }
+ ai = upb_Atomic_Load(&ai->next, memory_order_relaxed);
+ }
+
+ return memsize;
+}
+
+uint32_t upb_Arena_DebugRefCount(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ // These loads could probably be relaxed, but given that this is debug-only,
+ // it's not worth introducing a new variant for it.
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ while (_upb_Arena_IsTaggedPointer(poc)) {
+ ai = _upb_Arena_PointerFromTagged(poc);
+ poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ }
+ return _upb_Arena_RefCountFromTagged(poc);
+}
+
+static void _upb_Arena_AddBlock(upb_Arena* a, void* ptr, size_t size) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ upb_MemBlock* block = ptr;
+
+ // Insert into linked list.
+ block->size = (uint32_t)size;
+ upb_Atomic_Init(&block->next, ai->blocks);
+ upb_Atomic_Store(&ai->blocks, block, memory_order_release);
+
+ a->UPB_PRIVATE(ptr) = UPB_PTR_AT(block, kUpb_MemblockReserve, char);
+ a->UPB_PRIVATE(end) = UPB_PTR_AT(block, size, char);
+
+ UPB_POISON_MEMORY_REGION(a->UPB_PRIVATE(ptr),
+ a->UPB_PRIVATE(end) - a->UPB_PRIVATE(ptr));
+}
+
+static bool _upb_Arena_AllocBlock(upb_Arena* a, size_t size) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ if (!ai->block_alloc) return false;
+ upb_MemBlock* last_block = upb_Atomic_Load(&ai->blocks, memory_order_acquire);
+ size_t last_size = last_block != NULL ? last_block->size : 128;
+ size_t block_size = UPB_MAX(size, last_size * 2) + kUpb_MemblockReserve;
+ upb_MemBlock* block =
+ upb_malloc(_upb_ArenaInternal_BlockAlloc(ai), block_size);
+
+ if (!block) return false;
+ _upb_Arena_AddBlock(a, block, block_size);
+ UPB_ASSERT(UPB_PRIVATE(_upb_ArenaHas)(a) >= size);
+ return true;
+}
+
+void* UPB_PRIVATE(_upb_Arena_SlowMalloc)(upb_Arena* a, size_t size) {
+ if (!_upb_Arena_AllocBlock(a, size)) return NULL; // OOM
+ return upb_Arena_Malloc(a, size - UPB_ASAN_GUARD_SIZE);
+}
+
+static upb_Arena* _upb_Arena_InitSlow(upb_alloc* alloc) {
+ const size_t first_block_overhead =
+ sizeof(upb_ArenaState) + kUpb_MemblockReserve;
+ upb_ArenaState* a;
+
+ // We need to malloc the initial block.
+ char* mem;
+ size_t n = first_block_overhead + 256;
+ if (!alloc || !(mem = upb_malloc(alloc, n))) {
+ return NULL;
+ }
+
+ a = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), upb_ArenaState);
+ n -= sizeof(upb_ArenaState);
+
+ a->body.block_alloc = _upb_Arena_MakeBlockAlloc(alloc, 0);
+ upb_Atomic_Init(&a->body.parent_or_count, _upb_Arena_TaggedFromRefcount(1));
+ upb_Atomic_Init(&a->body.next, NULL);
+ upb_Atomic_Init(&a->body.tail, &a->body);
+ upb_Atomic_Init(&a->body.blocks, NULL);
+
+ _upb_Arena_AddBlock(&a->head, mem, n);
+
+ return &a->head;
+}
+
+upb_Arena* upb_Arena_Init(void* mem, size_t n, upb_alloc* alloc) {
+ UPB_ASSERT(sizeof(void*) * UPB_ARENA_SIZE_HACK >= sizeof(upb_ArenaState));
+ upb_ArenaState* a;
+
+ if (n) {
+ /* Align initial pointer up so that we return properly-aligned pointers. */
+ void* aligned = (void*)UPB_ALIGN_UP((uintptr_t)mem, UPB_MALLOC_ALIGN);
+ size_t delta = (uintptr_t)aligned - (uintptr_t)mem;
+ n = delta <= n ? n - delta : 0;
+ mem = aligned;
+ }
+
+ /* Round block size down to alignof(*a) since we will allocate the arena
+ * itself at the end. */
+ n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_ArenaState));
+
+ if (UPB_UNLIKELY(n < sizeof(upb_ArenaState))) {
+ return _upb_Arena_InitSlow(alloc);
+ }
+
+ a = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), upb_ArenaState);
+
+ upb_Atomic_Init(&a->body.parent_or_count, _upb_Arena_TaggedFromRefcount(1));
+ upb_Atomic_Init(&a->body.next, NULL);
+ upb_Atomic_Init(&a->body.tail, &a->body);
+ upb_Atomic_Init(&a->body.blocks, NULL);
+
+ a->body.block_alloc = _upb_Arena_MakeBlockAlloc(alloc, 1);
+ a->head.UPB_PRIVATE(ptr) = mem;
+ a->head.UPB_PRIVATE(end) = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), char);
+
+ return &a->head;
+}
+
+static void _upb_Arena_DoFree(upb_ArenaInternal* ai) {
+ UPB_ASSERT(_upb_Arena_RefCountFromTagged(ai->parent_or_count) == 1);
+
+ while (ai != NULL) {
+ // Load first since arena itself is likely from one of its blocks.
+ upb_ArenaInternal* next_arena =
+ (upb_ArenaInternal*)upb_Atomic_Load(&ai->next, memory_order_acquire);
+ upb_alloc* block_alloc = _upb_ArenaInternal_BlockAlloc(ai);
+ upb_MemBlock* block = upb_Atomic_Load(&ai->blocks, memory_order_acquire);
+ while (block != NULL) {
+ // Load first since we are deleting block.
+ upb_MemBlock* next_block =
+ upb_Atomic_Load(&block->next, memory_order_acquire);
+ upb_free(block_alloc, block);
+ block = next_block;
+ }
+ ai = next_arena;
+ }
+}
+
+void upb_Arena_Free(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+retry:
+ while (_upb_Arena_IsTaggedPointer(poc)) {
+ ai = _upb_Arena_PointerFromTagged(poc);
+ poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ }
+
+ // compare_exchange or fetch_sub are RMW operations, which are more
+ // expensive then direct loads. As an optimization, we only do RMW ops
+ // when we need to update things for other threads to see.
+ if (poc == _upb_Arena_TaggedFromRefcount(1)) {
+ _upb_Arena_DoFree(ai);
+ return;
+ }
+
+ if (upb_Atomic_CompareExchangeWeak(
+ &ai->parent_or_count, &poc,
+ _upb_Arena_TaggedFromRefcount(_upb_Arena_RefCountFromTagged(poc) - 1),
+ memory_order_release, memory_order_acquire)) {
+ // We were >1 and we decremented it successfully, so we are done.
+ return;
+ }
+
+ // We failed our update, so someone has done something, retry the whole
+ // process, but the failed exchange reloaded `poc` for us.
+ goto retry;
+}
+
+static void _upb_Arena_DoFuseArenaLists(upb_ArenaInternal* const parent,
+ upb_ArenaInternal* child) {
+ upb_ArenaInternal* parent_tail =
+ upb_Atomic_Load(&parent->tail, memory_order_relaxed);
+
+ do {
+ // Our tail might be stale, but it will always converge to the true tail.
+ upb_ArenaInternal* parent_tail_next =
+ upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
+ while (parent_tail_next != NULL) {
+ parent_tail = parent_tail_next;
+ parent_tail_next =
+ upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
+ }
+
+ upb_ArenaInternal* displaced =
+ upb_Atomic_Exchange(&parent_tail->next, child, memory_order_relaxed);
+ parent_tail = upb_Atomic_Load(&child->tail, memory_order_relaxed);
+
+ // If we displaced something that got installed racily, we can simply
+ // reinstall it on our new tail.
+ child = displaced;
+ } while (child != NULL);
+
+ upb_Atomic_Store(&parent->tail, parent_tail, memory_order_relaxed);
+}
+
+static upb_ArenaInternal* _upb_Arena_DoFuse(upb_Arena* a1, upb_Arena* a2,
+ uintptr_t* ref_delta) {
+ // `parent_or_count` has two disctint modes
+ // - parent pointer mode
+ // - refcount mode
+ //
+ // In parent pointer mode, it may change what pointer it refers to in the
+ // tree, but it will always approach a root. Any operation that walks the
+ // tree to the root may collapse levels of the tree concurrently.
+ upb_ArenaRoot r1 = _upb_Arena_FindRoot(a1);
+ upb_ArenaRoot r2 = _upb_Arena_FindRoot(a2);
+
+ if (r1.root == r2.root) return r1.root; // Already fused.
+
+ // Avoid cycles by always fusing into the root with the lower address.
+ if ((uintptr_t)r1.root > (uintptr_t)r2.root) {
+ upb_ArenaRoot tmp = r1;
+ r1 = r2;
+ r2 = tmp;
+ }
+
+ // The moment we install `r1` as the parent for `r2` all racing frees may
+ // immediately begin decrementing `r1`'s refcount (including pending
+ // increments to that refcount and their frees!). We need to add `r2`'s refs
+ // now, so that `r1` can withstand any unrefs that come from r2.
+ //
+ // Note that while it is possible for `r2`'s refcount to increase
+ // asynchronously, we will not actually do the reparenting operation below
+ // unless `r2`'s refcount is unchanged from when we read it.
+ //
+ // Note that we may have done this previously, either to this node or a
+ // different node, during a previous and failed DoFuse() attempt. But we will
+ // not lose track of these refs because we always add them to our overall
+ // delta.
+ uintptr_t r2_untagged_count = r2.tagged_count & ~1;
+ uintptr_t with_r2_refs = r1.tagged_count + r2_untagged_count;
+ if (!upb_Atomic_CompareExchangeStrong(
+ &r1.root->parent_or_count, &r1.tagged_count, with_r2_refs,
+ memory_order_release, memory_order_acquire)) {
+ return NULL;
+ }
+
+ // Perform the actual fuse by removing the refs from `r2` and swapping in the
+ // parent pointer.
+ if (!upb_Atomic_CompareExchangeStrong(
+ &r2.root->parent_or_count, &r2.tagged_count,
+ _upb_Arena_TaggedFromPointer(r1.root), memory_order_release,
+ memory_order_acquire)) {
+ // We'll need to remove the excess refs we added to r1 previously.
+ *ref_delta += r2_untagged_count;
+ return NULL;
+ }
+
+ // Now that the fuse has been performed (and can no longer fail) we need to
+ // append `r2` to `r1`'s linked list.
+ _upb_Arena_DoFuseArenaLists(r1.root, r2.root);
+ return r1.root;
+}
+
+static bool _upb_Arena_FixupRefs(upb_ArenaInternal* new_root,
+ uintptr_t ref_delta) {
+ if (ref_delta == 0) return true; // No fixup required.
+ uintptr_t poc =
+ upb_Atomic_Load(&new_root->parent_or_count, memory_order_relaxed);
+ if (_upb_Arena_IsTaggedPointer(poc)) return false;
+ uintptr_t with_refs = poc - ref_delta;
+ UPB_ASSERT(!_upb_Arena_IsTaggedPointer(with_refs));
+ return upb_Atomic_CompareExchangeStrong(&new_root->parent_or_count, &poc,
+ with_refs, memory_order_relaxed,
+ memory_order_relaxed);
+}
+
+bool upb_Arena_Fuse(upb_Arena* a1, upb_Arena* a2) {
+ if (a1 == a2) return true; // trivial fuse
+
+ upb_ArenaInternal* ai1 = upb_Arena_Internal(a1);
+ upb_ArenaInternal* ai2 = upb_Arena_Internal(a2);
+
+ // Do not fuse initial blocks since we cannot lifetime extend them.
+ // Any other fuse scenario is allowed.
+ if (_upb_ArenaInternal_HasInitialBlock(ai1) ||
+ _upb_ArenaInternal_HasInitialBlock(ai2)) {
+ return false;
+ }
+
+ // The number of refs we ultimately need to transfer to the new root.
+ uintptr_t ref_delta = 0;
+ while (true) {
+ upb_ArenaInternal* new_root = _upb_Arena_DoFuse(a1, a2, &ref_delta);
+ if (new_root != NULL && _upb_Arena_FixupRefs(new_root, ref_delta)) {
+ return true;
+ }
+ }
+}
+
+bool upb_Arena_IncRefFor(upb_Arena* a, const void* owner) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ if (_upb_ArenaInternal_HasInitialBlock(ai)) return false;
+ upb_ArenaRoot r;
+
+retry:
+ r = _upb_Arena_FindRoot(a);
+ if (upb_Atomic_CompareExchangeWeak(
+ &r.root->parent_or_count, &r.tagged_count,
+ _upb_Arena_TaggedFromRefcount(
+ _upb_Arena_RefCountFromTagged(r.tagged_count) + 1),
+ memory_order_release, memory_order_acquire)) {
+ // We incremented it successfully, so we are done.
+ return true;
+ }
+ // We failed update due to parent switching on the arena.
+ goto retry;
+}
+
+void upb_Arena_DecRefFor(upb_Arena* a, const void* owner) { upb_Arena_Free(a); }
+
+void UPB_PRIVATE(_upb_Arena_SwapIn)(upb_Arena* des, const upb_Arena* src) {
+ upb_ArenaInternal* desi = upb_Arena_Internal(des);
+ upb_ArenaInternal* srci = upb_Arena_Internal(src);
+
+ *des = *src;
+ desi->block_alloc = srci->block_alloc;
+ upb_MemBlock* blocks = upb_Atomic_Load(&srci->blocks, memory_order_relaxed);
+ upb_Atomic_Init(&desi->blocks, blocks);
+}
+
+void UPB_PRIVATE(_upb_Arena_SwapOut)(upb_Arena* des, const upb_Arena* src) {
+ upb_ArenaInternal* desi = upb_Arena_Internal(des);
+ upb_ArenaInternal* srci = upb_Arena_Internal(src);
+
+ *des = *src;
+ upb_MemBlock* blocks = upb_Atomic_Load(&srci->blocks, memory_order_relaxed);
+ upb_Atomic_Store(&desi->blocks, blocks, memory_order_relaxed);
+}
+
+
+#include <string.h>
+
+
+// Must be last.
+
+bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
+ const upb_MiniTableField* f,
+ upb_Message* map_entry_message, upb_Arena* arena) {
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(map_entry_mini_table);
+ UPB_ASSERT(map_entry_mini_table->UPB_PRIVATE(field_count) == 2);
+ const upb_MiniTableField* map_entry_key_field =
+ &map_entry_mini_table->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* map_entry_value_field =
+ &map_entry_mini_table->UPB_PRIVATE(fields)[1];
+ // Map key/value cannot have explicit defaults,
+ // hence assuming a zero default is valid.
+ upb_MessageValue default_val;
+ memset(&default_val, 0, sizeof(upb_MessageValue));
+ upb_MessageValue map_entry_key =
+ upb_Message_GetField(map_entry_message, map_entry_key_field, default_val);
+ upb_MessageValue map_entry_value = upb_Message_GetField(
+ map_entry_message, map_entry_value_field, default_val);
+ return upb_Map_Set(map, map_entry_key, map_entry_value, arena);
+}
+
+
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+upb_Array* upb_Array_New(upb_Arena* a, upb_CType type) {
+ const int lg2 = UPB_PRIVATE(_upb_CType_SizeLg2)(type);
+ return UPB_PRIVATE(_upb_Array_New)(a, 4, lg2);
+}
+
+const void* upb_Array_DataPtr(const upb_Array* arr) {
+ return _upb_array_ptr((upb_Array*)arr);
+}
+
+void* upb_Array_MutableDataPtr(upb_Array* arr) { return _upb_array_ptr(arr); }
+
+size_t upb_Array_Size(const upb_Array* arr) { return arr->UPB_PRIVATE(size); }
+
+upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i) {
+ upb_MessageValue ret;
+ const char* data = _upb_array_constptr(arr);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ UPB_ASSERT(i < arr->UPB_PRIVATE(size));
+ memcpy(&ret, data + (i << lg2), 1 << lg2);
+ return ret;
+}
+
+void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val) {
+ char* data = _upb_array_ptr(arr);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ UPB_ASSERT(i < arr->UPB_PRIVATE(size));
+ memcpy(data + (i << lg2), &val, 1 << lg2);
+}
+
+bool upb_Array_Append(upb_Array* arr, upb_MessageValue val, upb_Arena* arena) {
+ UPB_ASSERT(arena);
+ if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + 1, arena)) {
+ return false;
+ }
+ upb_Array_Set(arr, arr->UPB_PRIVATE(size) - 1, val);
+ return true;
+}
+
+void upb_Array_Move(upb_Array* arr, size_t dst_idx, size_t src_idx,
+ size_t count) {
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ char* data = _upb_array_ptr(arr);
+ memmove(&data[dst_idx << lg2], &data[src_idx << lg2], count << lg2);
+}
+
+bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
+ upb_Arena* arena) {
+ UPB_ASSERT(arena);
+ UPB_ASSERT(i <= arr->UPB_PRIVATE(size));
+ UPB_ASSERT(count + arr->UPB_PRIVATE(size) >= count);
+ const size_t oldsize = arr->UPB_PRIVATE(size);
+ if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + count,
+ arena)) {
+ return false;
+ }
+ upb_Array_Move(arr, i + count, i, oldsize - i);
+ return true;
+}
+
+/*
+ * i end arr->size
+ * |------------|XXXXXXXX|--------|
+ */
+void upb_Array_Delete(upb_Array* arr, size_t i, size_t count) {
+ const size_t end = i + count;
+ UPB_ASSERT(i <= end);
+ UPB_ASSERT(end <= arr->UPB_PRIVATE(size));
+ upb_Array_Move(arr, i, end, arr->UPB_PRIVATE(size) - end);
+ arr->UPB_PRIVATE(size) -= count;
+}
+
+bool upb_Array_Resize(upb_Array* arr, size_t size, upb_Arena* arena) {
+ const size_t oldsize = arr->UPB_PRIVATE(size);
+ if (UPB_UNLIKELY(!_upb_Array_ResizeUninitialized(arr, size, arena))) {
+ return false;
+ }
+ const size_t newsize = arr->UPB_PRIVATE(size);
+ if (newsize > oldsize) {
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ char* data = _upb_array_ptr(arr);
+ memset(data + (oldsize << lg2), 0, (newsize - oldsize) << lg2);
+ }
+ return true;
+}
+
+bool UPB_PRIVATE(_upb_Array_Realloc)(upb_Array* array, size_t min_capacity,
+ upb_Arena* arena) {
+ size_t new_capacity = UPB_MAX(array->UPB_PRIVATE(capacity), 4);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array);
+ size_t old_bytes = array->UPB_PRIVATE(capacity) << lg2;
+ void* ptr = _upb_array_ptr(array);
+
+ // Log2 ceiling of size.
+ while (new_capacity < min_capacity) new_capacity *= 2;
+
+ const size_t new_bytes = new_capacity << lg2;
+ ptr = upb_Arena_Realloc(arena, ptr, old_bytes, new_bytes);
+ if (!ptr) return false;
+
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)(array, ptr, lg2);
+ array->UPB_PRIVATE(capacity) = new_capacity;
+ return true;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+const upb_Extension* upb_Message_ExtensionByIndex(const upb_Message* msg,
+ size_t index) {
+ size_t count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+
+ UPB_ASSERT(index < count);
+ return &ext[index];
+}
+
+const upb_Extension* upb_Message_FindExtensionByNumber(const upb_Message* msg,
+ uint32_t field_number) {
+ size_t count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+
+ while (count--) {
+ if (upb_MiniTableExtension_Number(ext->ext) == field_number) return ext;
+ ext++;
+ }
+ return NULL;
+}
+
+
+#include <string.h>
+
+
+// Must be last.
+
+// Strings/bytes are special-cased in maps.
+char _upb_Map_CTypeSizeTable[12] = {
+ [kUpb_CType_Bool] = 1,
+ [kUpb_CType_Float] = 4,
+ [kUpb_CType_Int32] = 4,
+ [kUpb_CType_UInt32] = 4,
+ [kUpb_CType_Enum] = 4,
+ [kUpb_CType_Message] = sizeof(void*),
+ [kUpb_CType_Double] = 8,
+ [kUpb_CType_Int64] = 8,
+ [kUpb_CType_UInt64] = 8,
+ [kUpb_CType_String] = UPB_MAPTYPE_STRING,
+ [kUpb_CType_Bytes] = UPB_MAPTYPE_STRING,
+};
+
+upb_Map* upb_Map_New(upb_Arena* a, upb_CType key_type, upb_CType value_type) {
+ return _upb_Map_New(a, _upb_Map_CTypeSize(key_type),
+ _upb_Map_CTypeSize(value_type));
+}
+
+size_t upb_Map_Size(const upb_Map* map) { return _upb_Map_Size(map); }
+
+bool upb_Map_Get(const upb_Map* map, upb_MessageValue key,
+ upb_MessageValue* val) {
+ return _upb_Map_Get(map, &key, map->key_size, val, map->val_size);
+}
+
+void upb_Map_Clear(upb_Map* map) { _upb_Map_Clear(map); }
+
+upb_MapInsertStatus upb_Map_Insert(upb_Map* map, upb_MessageValue key,
+ upb_MessageValue val, upb_Arena* arena) {
+ UPB_ASSERT(arena);
+ return (upb_MapInsertStatus)_upb_Map_Insert(map, &key, map->key_size, &val,
+ map->val_size, arena);
+}
+
+bool upb_Map_Delete(upb_Map* map, upb_MessageValue key, upb_MessageValue* val) {
+ upb_value v;
+ const bool removed = _upb_Map_Delete(map, &key, map->key_size, &v);
+ if (val) _upb_map_fromvalue(v, val, map->val_size);
+ return removed;
+}
+
+bool upb_Map_Next(const upb_Map* map, upb_MessageValue* key,
+ upb_MessageValue* val, size_t* iter) {
+ upb_StringView k;
+ upb_value v;
+ const bool ok = upb_strtable_next2(&map->table, &k, &v, (intptr_t*)iter);
+ if (ok) {
+ _upb_map_fromkey(k, key, map->key_size);
+ _upb_map_fromvalue(v, val, map->val_size);
+ }
+ return ok;
+}
+
+UPB_API void upb_Map_SetEntryValue(upb_Map* map, size_t iter,
+ upb_MessageValue val) {
+ upb_value v;
+ _upb_map_tovalue(&val, map->val_size, &v, NULL);
+ upb_strtable_setentryvalue(&map->table, iter, v);
+}
+
+bool upb_MapIterator_Next(const upb_Map* map, size_t* iter) {
+ return _upb_map_next(map, iter);
+}
+
+bool upb_MapIterator_Done(const upb_Map* map, size_t iter) {
+ upb_strtable_iter i;
+ UPB_ASSERT(iter != kUpb_Map_Begin);
+ i.t = &map->table;
+ i.index = iter;
+ return upb_strtable_done(&i);
+}
+
+// Returns the key and value for this entry of the map.
+upb_MessageValue upb_MapIterator_Key(const upb_Map* map, size_t iter) {
+ upb_strtable_iter i;
+ upb_MessageValue ret;
+ i.t = &map->table;
+ i.index = iter;
+ _upb_map_fromkey(upb_strtable_iter_key(&i), &ret, map->key_size);
+ return ret;
+}
+
+upb_MessageValue upb_MapIterator_Value(const upb_Map* map, size_t iter) {
+ upb_strtable_iter i;
+ upb_MessageValue ret;
+ i.t = &map->table;
+ i.index = iter;
+ _upb_map_fromvalue(upb_strtable_iter_value(&i), &ret, map->val_size);
+ return ret;
+}
+
+// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
+
+upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size) {
+ upb_Map* map = upb_Arena_Malloc(a, sizeof(upb_Map));
+ if (!map) return NULL;
+
+ upb_strtable_init(&map->table, 4, a);
+ map->key_size = key_size;
+ map->val_size = value_size;
+
+ return map;
+}
+
+
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+static void _upb_mapsorter_getkeys(const void* _a, const void* _b, void* a_key,
+ void* b_key, size_t size) {
+ const upb_tabent* const* a = _a;
+ const upb_tabent* const* b = _b;
+ upb_StringView a_tabkey = upb_tabstrview((*a)->key);
+ upb_StringView b_tabkey = upb_tabstrview((*b)->key);
+ _upb_map_fromkey(a_tabkey, a_key, size);
+ _upb_map_fromkey(b_tabkey, b_key, size);
+}
+
+static int _upb_mapsorter_cmpi64(const void* _a, const void* _b) {
+ int64_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpu64(const void* _a, const void* _b) {
+ uint64_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpi32(const void* _a, const void* _b) {
+ int32_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpu32(const void* _a, const void* _b) {
+ uint32_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpbool(const void* _a, const void* _b) {
+ bool a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 1);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpstr(const void* _a, const void* _b) {
+ upb_StringView a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, UPB_MAPTYPE_STRING);
+ size_t common_size = UPB_MIN(a.size, b.size);
+ int cmp = memcmp(a.data, b.data, common_size);
+ if (cmp) return -cmp;
+ return a.size < b.size ? -1 : a.size > b.size;
+}
+
+static int (*const compar[kUpb_FieldType_SizeOf])(const void*, const void*) = {
+ [kUpb_FieldType_Int64] = _upb_mapsorter_cmpi64,
+ [kUpb_FieldType_SFixed64] = _upb_mapsorter_cmpi64,
+ [kUpb_FieldType_SInt64] = _upb_mapsorter_cmpi64,
+
+ [kUpb_FieldType_UInt64] = _upb_mapsorter_cmpu64,
+ [kUpb_FieldType_Fixed64] = _upb_mapsorter_cmpu64,
+
+ [kUpb_FieldType_Int32] = _upb_mapsorter_cmpi32,
+ [kUpb_FieldType_SInt32] = _upb_mapsorter_cmpi32,
+ [kUpb_FieldType_SFixed32] = _upb_mapsorter_cmpi32,
+ [kUpb_FieldType_Enum] = _upb_mapsorter_cmpi32,
+
+ [kUpb_FieldType_UInt32] = _upb_mapsorter_cmpu32,
+ [kUpb_FieldType_Fixed32] = _upb_mapsorter_cmpu32,
+
+ [kUpb_FieldType_Bool] = _upb_mapsorter_cmpbool,
+
+ [kUpb_FieldType_String] = _upb_mapsorter_cmpstr,
+ [kUpb_FieldType_Bytes] = _upb_mapsorter_cmpstr,
+};
+
+static bool _upb_mapsorter_resize(_upb_mapsorter* s, _upb_sortedmap* sorted,
+ int size) {
+ sorted->start = s->size;
+ sorted->pos = sorted->start;
+ sorted->end = sorted->start + size;
+
+ if (sorted->end > s->cap) {
+ const int oldsize = s->cap * sizeof(*s->entries);
+ s->cap = upb_Log2CeilingSize(sorted->end);
+ const int newsize = s->cap * sizeof(*s->entries);
+ s->entries = upb_grealloc(s->entries, oldsize, newsize);
+ if (!s->entries) return false;
+ }
+
+ s->size = sorted->end;
+ return true;
+}
+
+bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
+ const upb_Map* map, _upb_sortedmap* sorted) {
+ int map_size = _upb_Map_Size(map);
+
+ if (!_upb_mapsorter_resize(s, sorted, map_size)) return false;
+
+ // Copy non-empty entries from the table to s->entries.
+ const void** dst = &s->entries[sorted->start];
+ const upb_tabent* src = map->table.t.entries;
+ const upb_tabent* end = src + upb_table_size(&map->table.t);
+ for (; src < end; src++) {
+ if (!upb_tabent_isempty(src)) {
+ *dst = src;
+ dst++;
+ }
+ }
+ UPB_ASSERT(dst == &s->entries[sorted->end]);
+
+ // Sort entries according to the key type.
+ qsort(&s->entries[sorted->start], map_size, sizeof(*s->entries),
+ compar[key_type]);
+ return true;
+}
+
+static int _upb_mapsorter_cmpext(const void* _a, const void* _b) {
+ const upb_Extension* const* a = _a;
+ const upb_Extension* const* b = _b;
+ uint32_t a_num = upb_MiniTableExtension_Number((*a)->ext);
+ uint32_t b_num = upb_MiniTableExtension_Number((*b)->ext);
+ assert(a_num != b_num);
+ return a_num < b_num ? -1 : 1;
+}
+
+bool _upb_mapsorter_pushexts(_upb_mapsorter* s, const upb_Extension* exts,
+ size_t count, _upb_sortedmap* sorted) {
+ if (!_upb_mapsorter_resize(s, sorted, count)) return false;
+
+ for (size_t i = 0; i < count; i++) {
+ s->entries[sorted->start + i] = &exts[i];
+ }
+
+ qsort(&s->entries[sorted->start], count, sizeof(*s->entries),
+ _upb_mapsorter_cmpext);
+ return true;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+static const size_t message_overhead = sizeof(upb_Message_InternalData);
+
+upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* a) {
+ return _upb_Message_New(m, a);
+}
+
+bool UPB_PRIVATE(_upb_Message_AddUnknown)(upb_Message* msg, const char* data,
+ size_t len, upb_Arena* arena) {
+ if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, len, arena)) return false;
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ memcpy(UPB_PTR_AT(in, in->unknown_end, char), data, len);
+ in->unknown_end += len;
+ return true;
+}
+
+void _upb_Message_DiscardUnknown_shallow(upb_Message* msg) {
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (in) {
+ in->unknown_end = message_overhead;
+ }
+}
+
+const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len) {
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (in) {
+ *len = in->unknown_end - message_overhead;
+ return (char*)(in + 1);
+ } else {
+ *len = 0;
+ return NULL;
+ }
+}
+
+void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len) {
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ const char* internal_unknown_end = UPB_PTR_AT(in, in->unknown_end, char);
+
+#ifndef NDEBUG
+ size_t full_unknown_size;
+ const char* full_unknown = upb_Message_GetUnknown(msg, &full_unknown_size);
+ UPB_ASSERT((uintptr_t)data >= (uintptr_t)full_unknown);
+ UPB_ASSERT((uintptr_t)data < (uintptr_t)(full_unknown + full_unknown_size));
+ UPB_ASSERT((uintptr_t)(data + len) > (uintptr_t)data);
+ UPB_ASSERT((uintptr_t)(data + len) <= (uintptr_t)internal_unknown_end);
+#endif
+
+ if ((data + len) != internal_unknown_end) {
+ memmove((char*)data, data + len, internal_unknown_end - data - len);
+ }
+ in->unknown_end -= len;
+}
+
+size_t upb_Message_ExtensionCount(const upb_Message* msg) {
+ size_t count;
+ UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+ return count;
+}
+
+
+#include <string.h>
+
+
+// Must be last.
+
+bool upb_Message_IsExactlyEqual(const upb_Message* msg1,
+ const upb_Message* msg2,
+ const upb_MiniTable* m) {
+ if (msg1 == msg2) return true;
+
+ int opts = kUpb_EncodeOption_SkipUnknown | kUpb_EncodeOption_Deterministic;
+ upb_Arena* a = upb_Arena_New();
+
+ // Compare deterministically serialized payloads with no unknown fields.
+ size_t size1, size2;
+ char *data1, *data2;
+ upb_EncodeStatus status1 = upb_Encode(msg1, m, opts, a, &data1, &size1);
+ upb_EncodeStatus status2 = upb_Encode(msg2, m, opts, a, &data2, &size2);
+
+ if (status1 != kUpb_EncodeStatus_Ok || status2 != kUpb_EncodeStatus_Ok) {
+ // TODO: How should we fail here? (In Ruby we throw an exception.)
+ upb_Arena_Free(a);
+ return false;
+ }
+
+ const bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
+ upb_Arena_Free(a);
+ return ret;
+}
+
+
+#include <stdbool.h>
+#include <string.h>
+
+
+// Must be last.
+
+static upb_StringView upb_Clone_StringView(upb_StringView str,
+ upb_Arena* arena) {
+ if (str.size == 0) {
+ return upb_StringView_FromDataAndSize(NULL, 0);
+ }
+ void* cloned_data = upb_Arena_Malloc(arena, str.size);
+ upb_StringView cloned_str =
+ upb_StringView_FromDataAndSize(cloned_data, str.size);
+ memcpy(cloned_data, str.data, str.size);
+ return cloned_str;
+}
+
+static bool upb_Clone_MessageValue(void* value, upb_CType value_type,
+ const upb_MiniTable* sub, upb_Arena* arena) {
+ switch (value_type) {
+ case kUpb_CType_Bool:
+ case kUpb_CType_Float:
+ case kUpb_CType_Int32:
+ case kUpb_CType_UInt32:
+ case kUpb_CType_Enum:
+ case kUpb_CType_Double:
+ case kUpb_CType_Int64:
+ case kUpb_CType_UInt64:
+ return true;
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes: {
+ upb_StringView source = *(upb_StringView*)value;
+ int size = source.size;
+ void* cloned_data = upb_Arena_Malloc(arena, size);
+ if (cloned_data == NULL) {
+ return false;
+ }
+ *(upb_StringView*)value =
+ upb_StringView_FromDataAndSize(cloned_data, size);
+ memcpy(cloned_data, source.data, size);
+ return true;
+ } break;
+ case kUpb_CType_Message: {
+ const upb_TaggedMessagePtr source = *(upb_TaggedMessagePtr*)value;
+ bool is_empty = upb_TaggedMessagePtr_IsEmpty(source);
+ if (is_empty) sub = UPB_PRIVATE(_upb_MiniTable_Empty)();
+ UPB_ASSERT(source);
+ upb_Message* clone = upb_Message_DeepClone(
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(source), sub, arena);
+ *(upb_TaggedMessagePtr*)value =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(clone, is_empty);
+ return clone != NULL;
+ } break;
+ }
+ UPB_UNREACHABLE();
+}
+
+upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
+ upb_CType value_type,
+ const upb_MiniTable* map_entry_table,
+ upb_Arena* arena) {
+ upb_Map* cloned_map = _upb_Map_New(arena, map->key_size, map->val_size);
+ if (cloned_map == NULL) {
+ return NULL;
+ }
+ upb_MessageValue key, val;
+ size_t iter = kUpb_Map_Begin;
+ while (upb_Map_Next(map, &key, &val, &iter)) {
+ const upb_MiniTableField* value_field =
+ &map_entry_table->UPB_PRIVATE(fields)[1];
+ const upb_MiniTable* value_sub =
+ (value_field->UPB_PRIVATE(submsg_index) != kUpb_NoSub)
+ ? upb_MiniTable_GetSubMessageTable(map_entry_table, value_field)
+ : NULL;
+ upb_CType value_field_type = upb_MiniTableField_CType(value_field);
+ if (!upb_Clone_MessageValue(&val, value_field_type, value_sub, arena)) {
+ return NULL;
+ }
+ if (!upb_Map_Set(cloned_map, key, val, arena)) {
+ return NULL;
+ }
+ }
+ return cloned_map;
+}
+
+static upb_Map* upb_Message_Map_DeepClone(const upb_Map* map,
+ const upb_MiniTable* mini_table,
+ const upb_MiniTableField* f,
+ upb_Message* clone,
+ upb_Arena* arena) {
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(map_entry_table);
+
+ const upb_MiniTableField* key_field =
+ &map_entry_table->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* value_field =
+ &map_entry_table->UPB_PRIVATE(fields)[1];
+
+ upb_Map* cloned_map = upb_Map_DeepClone(
+ map, upb_MiniTableField_CType(key_field),
+ upb_MiniTableField_CType(value_field), map_entry_table, arena);
+ if (!cloned_map) {
+ return NULL;
+ }
+ _upb_Message_SetNonExtensionField(clone, f, &cloned_map);
+ return cloned_map;
+}
+
+upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
+ const upb_MiniTable* sub, upb_Arena* arena) {
+ const size_t size = array->UPB_PRIVATE(size);
+ const int lg2 = UPB_PRIVATE(_upb_CType_SizeLg2)(value_type);
+ upb_Array* cloned_array = UPB_PRIVATE(_upb_Array_New)(arena, size, lg2);
+ if (!cloned_array) {
+ return NULL;
+ }
+ if (!_upb_Array_ResizeUninitialized(cloned_array, size, arena)) {
+ return NULL;
+ }
+ for (size_t i = 0; i < size; ++i) {
+ upb_MessageValue val = upb_Array_Get(array, i);
+ if (!upb_Clone_MessageValue(&val, value_type, sub, arena)) {
+ return false;
+ }
+ upb_Array_Set(cloned_array, i, val);
+ }
+ return cloned_array;
+}
+
+static bool upb_Message_Array_DeepClone(const upb_Array* array,
+ const upb_MiniTable* mini_table,
+ const upb_MiniTableField* field,
+ upb_Message* clone, upb_Arena* arena) {
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
+ upb_Array* cloned_array = upb_Array_DeepClone(
+ array, upb_MiniTableField_CType(field),
+ upb_MiniTableField_CType(field) == kUpb_CType_Message &&
+ field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
+ ? upb_MiniTable_GetSubMessageTable(mini_table, field)
+ : NULL,
+ arena);
+
+ // Clear out upb_Array* due to parent memcpy.
+ _upb_Message_SetNonExtensionField(clone, field, &cloned_array);
+ return true;
+}
+
+static bool upb_Clone_ExtensionValue(
+ const upb_MiniTableExtension* mini_table_ext, const upb_Extension* source,
+ upb_Extension* dest, upb_Arena* arena) {
+ dest->data = source->data;
+ return upb_Clone_MessageValue(
+ &dest->data,
+ upb_MiniTableField_CType(&mini_table_ext->UPB_PRIVATE(field)),
+ upb_MiniTableExtension_GetSubMessage(mini_table_ext), arena);
+}
+
+upb_Message* _upb_Message_Copy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* mini_table,
+ upb_Arena* arena) {
+ upb_StringView empty_string = upb_StringView_FromDataAndSize(NULL, 0);
+ // Only copy message area skipping upb_Message_Internal.
+ memcpy(dst, src, mini_table->UPB_PRIVATE(size));
+ for (size_t i = 0; i < mini_table->UPB_PRIVATE(field_count); ++i) {
+ const upb_MiniTableField* field = &mini_table->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_IsScalar(field)) {
+ switch (upb_MiniTableField_CType(field)) {
+ case kUpb_CType_Message: {
+ upb_TaggedMessagePtr tagged =
+ upb_Message_GetTaggedMessagePtr(src, field, NULL);
+ const upb_Message* sub_message =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
+ if (sub_message != NULL) {
+ // If the message is currently in an unlinked, "empty" state we keep
+ // it that way, because we don't want to deal with decode options,
+ // decode status, or possible parse failure here.
+ bool is_empty = upb_TaggedMessagePtr_IsEmpty(tagged);
+ const upb_MiniTable* sub_message_table =
+ is_empty ? UPB_PRIVATE(_upb_MiniTable_Empty)()
+ : upb_MiniTable_GetSubMessageTable(mini_table, field);
+ upb_Message* dst_sub_message =
+ upb_Message_DeepClone(sub_message, sub_message_table, arena);
+ if (dst_sub_message == NULL) {
+ return NULL;
+ }
+ _upb_Message_SetTaggedMessagePtr(
+ dst, mini_table, field,
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(dst_sub_message,
+ is_empty));
+ }
+ } break;
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes: {
+ upb_StringView str = upb_Message_GetString(src, field, empty_string);
+ if (str.size != 0) {
+ if (!upb_Message_SetString(
+ dst, field, upb_Clone_StringView(str, arena), arena)) {
+ return NULL;
+ }
+ }
+ } break;
+ default:
+ // Scalar, already copied.
+ break;
+ }
+ } else {
+ if (upb_MiniTableField_IsMap(field)) {
+ const upb_Map* map = upb_Message_GetMap(src, field);
+ if (map != NULL) {
+ if (!upb_Message_Map_DeepClone(map, mini_table, field, dst, arena)) {
+ return NULL;
+ }
+ }
+ } else {
+ const upb_Array* array = upb_Message_GetArray(src, field);
+ if (array != NULL) {
+ if (!upb_Message_Array_DeepClone(array, mini_table, field, dst,
+ arena)) {
+ return NULL;
+ }
+ }
+ }
+ }
+ }
+ // Clone extensions.
+ size_t ext_count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(src, &ext_count);
+ for (size_t i = 0; i < ext_count; ++i) {
+ const upb_Extension* msg_ext = &ext[i];
+ const upb_MiniTableField* field = &msg_ext->ext->UPB_PRIVATE(field);
+ upb_Extension* dst_ext =
+ _upb_Message_GetOrCreateExtension(dst, msg_ext->ext, arena);
+ if (!dst_ext) return NULL;
+ if (upb_MiniTableField_IsScalar(field)) {
+ if (!upb_Clone_ExtensionValue(msg_ext->ext, msg_ext, dst_ext, arena)) {
+ return NULL;
+ }
+ } else {
+ upb_Array* msg_array = (upb_Array*)msg_ext->data.ptr;
+ UPB_ASSERT(msg_array);
+ upb_Array* cloned_array = upb_Array_DeepClone(
+ msg_array, upb_MiniTableField_CType(field),
+ upb_MiniTableExtension_GetSubMessage(msg_ext->ext), arena);
+ if (!cloned_array) {
+ return NULL;
+ }
+ dst_ext->data.ptr = (void*)cloned_array;
+ }
+ }
+
+ // Clone unknowns.
+ size_t unknown_size = 0;
+ const char* ptr = upb_Message_GetUnknown(src, &unknown_size);
+ if (unknown_size != 0) {
+ UPB_ASSERT(ptr);
+ // Make a copy into destination arena.
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(dst, ptr, unknown_size, arena)) {
+ return NULL;
+ }
+ }
+ return dst;
+}
+
+bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* mini_table, upb_Arena* arena) {
+ upb_Message_Clear(dst, mini_table);
+ return _upb_Message_Copy(dst, src, mini_table, arena) != NULL;
+}
+
+// Deep clones a message using the provided target arena.
+//
+// Returns NULL on failure.
+upb_Message* upb_Message_DeepClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena) {
+ upb_Message* clone = upb_Message_New(m, arena);
+ return _upb_Message_Copy(clone, msg, m, arena);
+}
+
+// Performs a shallow copy. TODO: Extend to handle unknown fields.
+void upb_Message_ShallowCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m) {
+ memcpy(dst, src, m->UPB_PRIVATE(size));
+}
+
+// Performs a shallow clone. Ignores unknown fields.
+upb_Message* upb_Message_ShallowClone(const upb_Message* msg,
+ const upb_MiniTable* m,
+ upb_Arena* arena) {
+ upb_Message* clone = upb_Message_New(m, arena);
+ upb_Message_ShallowCopy(clone, msg, m);
+ return clone;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+typedef struct {
+ upb_MdDecoder base;
+ upb_Arena* arena;
+ upb_MiniTableEnum* enum_table;
+ uint32_t enum_value_count;
+ uint32_t enum_data_count;
+ uint32_t enum_data_capacity;
+} upb_MdEnumDecoder;
+
+static size_t upb_MiniTableEnum_Size(size_t count) {
+ return sizeof(upb_MiniTableEnum) + count * sizeof(uint32_t);
+}
+
+static upb_MiniTableEnum* _upb_MiniTable_AddEnumDataMember(upb_MdEnumDecoder* d,
+ uint32_t val) {
+ if (d->enum_data_count == d->enum_data_capacity) {
+ size_t old_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
+ d->enum_data_capacity = UPB_MAX(2, d->enum_data_capacity * 2);
+ size_t new_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
+ d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz);
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
+ }
+ d->enum_table->UPB_PRIVATE(data)[d->enum_data_count++] = val;
+ return d->enum_table;
+}
+
+static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) {
+ upb_MiniTableEnum* table = d->enum_table;
+ d->enum_value_count++;
+ if (table->UPB_PRIVATE(value_count) ||
+ (val > 512 && d->enum_value_count < val / 32)) {
+ if (table->UPB_PRIVATE(value_count) == 0) {
+ UPB_ASSERT(d->enum_data_count == table->UPB_PRIVATE(mask_limit) / 32);
+ }
+ table = _upb_MiniTable_AddEnumDataMember(d, val);
+ table->UPB_PRIVATE(value_count)++;
+ } else {
+ uint32_t new_mask_limit = ((val / 32) + 1) * 32;
+ while (table->UPB_PRIVATE(mask_limit) < new_mask_limit) {
+ table = _upb_MiniTable_AddEnumDataMember(d, 0);
+ table->UPB_PRIVATE(mask_limit) += 32;
+ }
+ table->UPB_PRIVATE(data)[val / 32] |= 1ULL << (val % 32);
+ }
+}
+
+static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum(
+ upb_MdEnumDecoder* d, const char* data, size_t len) {
+ // If the string is non-empty then it must begin with a version tag.
+ if (len) {
+ if (*data != kUpb_EncodedVersion_EnumV1) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid enum version: %c", *data);
+ }
+ data++;
+ len--;
+ }
+
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
+
+ // Guarantee at least 64 bits of mask without checking mask size.
+ d->enum_table->UPB_PRIVATE(mask_limit) = 64;
+ d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
+ d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
+
+ d->enum_table->UPB_PRIVATE(value_count) = 0;
+
+ const char* ptr = data;
+ uint32_t base = 0;
+
+ while (ptr < d->base.end) {
+ char ch = *ptr++;
+ if (ch <= kUpb_EncodedValue_MaxEnumMask) {
+ uint32_t mask = _upb_FromBase92(ch);
+ for (int i = 0; i < 5; i++, base++, mask >>= 1) {
+ if (mask & 1) upb_MiniTableEnum_BuildValue(d, base);
+ }
+ } else if (kUpb_EncodedValue_MinSkip <= ch &&
+ ch <= kUpb_EncodedValue_MaxSkip) {
+ uint32_t skip;
+ ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
+ kUpb_EncodedValue_MinSkip,
+ kUpb_EncodedValue_MaxSkip, &skip);
+ base += skip;
+ } else {
+ upb_MdDecoder_ErrorJmp(&d->base, "Unexpected character: %c", ch);
+ }
+ }
+
+ return d->enum_table;
+}
+
+static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum(
+ upb_MdEnumDecoder* const decoder, const char* const data,
+ size_t const len) {
+ if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
+ return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len);
+}
+
+upb_MiniTableEnum* upb_MiniDescriptor_BuildEnum(const char* data, size_t len,
+ upb_Arena* arena,
+ upb_Status* status) {
+ upb_MdEnumDecoder decoder = {
+ .base =
+ {
+ .end = UPB_PTRADD(data, len),
+ .status = status,
+ },
+ .arena = arena,
+ .enum_table = upb_Arena_Malloc(arena, upb_MiniTableEnum_Size(2)),
+ .enum_value_count = 0,
+ .enum_data_count = 0,
+ .enum_data_capacity = 1,
+ };
+
+ return upb_MtDecoder_BuildMiniTableEnum(&decoder, data, len);
+}
+
+
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+
+// Must be last.
+
+// Note: we sort by this number when calculating layout order.
+typedef enum {
+ kUpb_LayoutItemType_OneofCase, // Oneof case.
+ kUpb_LayoutItemType_OneofField, // Oneof field data.
+ kUpb_LayoutItemType_Field, // Non-oneof field data.
+
+ kUpb_LayoutItemType_Max = kUpb_LayoutItemType_Field,
+} upb_LayoutItemType;
+
+#define kUpb_LayoutItem_IndexSentinel ((uint16_t)-1)
+
+typedef struct {
+ // Index of the corresponding field. When this is a oneof field, the field's
+ // offset will be the index of the next field in a linked list.
+ uint16_t field_index;
+ uint16_t offset;
+ upb_FieldRep rep;
+ upb_LayoutItemType type;
+} upb_LayoutItem;
+
+typedef struct {
+ upb_LayoutItem* data;
+ size_t size;
+ size_t capacity;
+} upb_LayoutItemVector;
+
+typedef struct {
+ upb_MdDecoder base;
+ upb_MiniTable* table;
+ upb_MiniTableField* fields;
+ upb_MiniTablePlatform platform;
+ upb_LayoutItemVector vec;
+ upb_Arena* arena;
+} upb_MtDecoder;
+
+// In each field's offset, we temporarily store a presence classifier:
+enum PresenceClass {
+ kNoPresence = 0,
+ kHasbitPresence = 1,
+ kRequiredPresence = 2,
+ kOneofBase = 3,
+ // Negative values refer to a specific oneof with that number. Positive
+ // values >= kOneofBase indicate that this field is in a oneof, and specify
+ // the next field in this oneof's linked list.
+};
+
+static bool upb_MtDecoder_FieldIsPackable(upb_MiniTableField* field) {
+ return (field->UPB_PRIVATE(mode) & kUpb_FieldMode_Array) &&
+ upb_FieldType_IsPackable(field->UPB_PRIVATE(descriptortype));
+}
+
+typedef struct {
+ uint16_t submsg_count;
+ uint16_t subenum_count;
+} upb_SubCounts;
+
+static void upb_MiniTable_SetTypeAndSub(upb_MiniTableField* field,
+ upb_FieldType type,
+ upb_SubCounts* sub_counts,
+ uint64_t msg_modifiers,
+ bool is_proto3_enum) {
+ if (is_proto3_enum) {
+ UPB_ASSERT(type == kUpb_FieldType_Enum);
+ type = kUpb_FieldType_Int32;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsAlternate;
+ } else if (type == kUpb_FieldType_String &&
+ !(msg_modifiers & kUpb_MessageModifier_ValidateUtf8)) {
+ type = kUpb_FieldType_Bytes;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsAlternate;
+ }
+
+ field->UPB_PRIVATE(descriptortype) = type;
+
+ if (upb_MtDecoder_FieldIsPackable(field) &&
+ (msg_modifiers & kUpb_MessageModifier_DefaultIsPacked)) {
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsPacked;
+ }
+
+ if (type == kUpb_FieldType_Message || type == kUpb_FieldType_Group) {
+ field->UPB_PRIVATE(submsg_index) = sub_counts->submsg_count++;
+ } else if (type == kUpb_FieldType_Enum) {
+ // We will need to update this later once we know the total number of
+ // submsg fields.
+ field->UPB_PRIVATE(submsg_index) = sub_counts->subenum_count++;
+ } else {
+ field->UPB_PRIVATE(submsg_index) = kUpb_NoSub;
+ }
+}
+
+static const char kUpb_EncodedToType[] = {
+ [kUpb_EncodedType_Double] = kUpb_FieldType_Double,
+ [kUpb_EncodedType_Float] = kUpb_FieldType_Float,
+ [kUpb_EncodedType_Int64] = kUpb_FieldType_Int64,
+ [kUpb_EncodedType_UInt64] = kUpb_FieldType_UInt64,
+ [kUpb_EncodedType_Int32] = kUpb_FieldType_Int32,
+ [kUpb_EncodedType_Fixed64] = kUpb_FieldType_Fixed64,
+ [kUpb_EncodedType_Fixed32] = kUpb_FieldType_Fixed32,
+ [kUpb_EncodedType_Bool] = kUpb_FieldType_Bool,
+ [kUpb_EncodedType_String] = kUpb_FieldType_String,
+ [kUpb_EncodedType_Group] = kUpb_FieldType_Group,
+ [kUpb_EncodedType_Message] = kUpb_FieldType_Message,
+ [kUpb_EncodedType_Bytes] = kUpb_FieldType_Bytes,
+ [kUpb_EncodedType_UInt32] = kUpb_FieldType_UInt32,
+ [kUpb_EncodedType_OpenEnum] = kUpb_FieldType_Enum,
+ [kUpb_EncodedType_SFixed32] = kUpb_FieldType_SFixed32,
+ [kUpb_EncodedType_SFixed64] = kUpb_FieldType_SFixed64,
+ [kUpb_EncodedType_SInt32] = kUpb_FieldType_SInt32,
+ [kUpb_EncodedType_SInt64] = kUpb_FieldType_SInt64,
+ [kUpb_EncodedType_ClosedEnum] = kUpb_FieldType_Enum,
+};
+
+static void upb_MiniTable_SetField(upb_MtDecoder* d, uint8_t ch,
+ upb_MiniTableField* field,
+ uint64_t msg_modifiers,
+ upb_SubCounts* sub_counts) {
+ static const char kUpb_EncodedToFieldRep[] = {
+ [kUpb_EncodedType_Double] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_Float] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_Int64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_UInt64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_Int32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_Fixed64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_Fixed32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_Bool] = kUpb_FieldRep_1Byte,
+ [kUpb_EncodedType_String] = kUpb_FieldRep_StringView,
+ [kUpb_EncodedType_Bytes] = kUpb_FieldRep_StringView,
+ [kUpb_EncodedType_UInt32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_OpenEnum] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_SFixed32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_SFixed64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_SInt32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_SInt64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_ClosedEnum] = kUpb_FieldRep_4Byte,
+ };
+
+ char pointer_rep = d->platform == kUpb_MiniTablePlatform_32Bit
+ ? kUpb_FieldRep_4Byte
+ : kUpb_FieldRep_8Byte;
+
+ int8_t type = _upb_FromBase92(ch);
+ if (ch >= _upb_ToBase92(kUpb_EncodedType_RepeatedBase)) {
+ type -= kUpb_EncodedType_RepeatedBase;
+ field->UPB_PRIVATE(mode) = kUpb_FieldMode_Array;
+ field->UPB_PRIVATE(mode) |= pointer_rep << kUpb_FieldRep_Shift;
+ field->UPB_PRIVATE(offset) = kNoPresence;
+ } else {
+ field->UPB_PRIVATE(mode) = kUpb_FieldMode_Scalar;
+ field->UPB_PRIVATE(offset) = kHasbitPresence;
+ if (type == kUpb_EncodedType_Group || type == kUpb_EncodedType_Message) {
+ field->UPB_PRIVATE(mode) |= pointer_rep << kUpb_FieldRep_Shift;
+ } else if ((unsigned long)type >= sizeof(kUpb_EncodedToFieldRep)) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
+ } else {
+ field->UPB_PRIVATE(mode) |= kUpb_EncodedToFieldRep[type]
+ << kUpb_FieldRep_Shift;
+ }
+ }
+ if ((unsigned long)type >= sizeof(kUpb_EncodedToType)) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
+ }
+ upb_MiniTable_SetTypeAndSub(field, kUpb_EncodedToType[type], sub_counts,
+ msg_modifiers, type == kUpb_EncodedType_OpenEnum);
+}
+
+static void upb_MtDecoder_ModifyField(upb_MtDecoder* d,
+ uint32_t message_modifiers,
+ uint32_t field_modifiers,
+ upb_MiniTableField* field) {
+ if (field_modifiers & kUpb_EncodedFieldModifier_FlipPacked) {
+ if (!upb_MtDecoder_FieldIsPackable(field)) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Cannot flip packed on unpackable field %" PRIu32,
+ upb_MiniTableField_Number(field));
+ }
+ field->UPB_PRIVATE(mode) ^= kUpb_LabelFlags_IsPacked;
+ }
+
+ if (field_modifiers & kUpb_EncodedFieldModifier_FlipValidateUtf8) {
+ if (field->UPB_PRIVATE(descriptortype) != kUpb_FieldType_Bytes ||
+ !(field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsAlternate)) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Cannot flip ValidateUtf8 on field %" PRIu32
+ ", type=%d, mode=%d",
+ upb_MiniTableField_Number(field),
+ (int)field->UPB_PRIVATE(descriptortype),
+ (int)field->UPB_PRIVATE(mode));
+ }
+ field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_String;
+ field->UPB_PRIVATE(mode) &= ~kUpb_LabelFlags_IsAlternate;
+ }
+
+ bool singular = field_modifiers & kUpb_EncodedFieldModifier_IsProto3Singular;
+ bool required = field_modifiers & kUpb_EncodedFieldModifier_IsRequired;
+
+ // Validate.
+ if ((singular || required) && field->UPB_PRIVATE(offset) != kHasbitPresence) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Invalid modifier(s) for repeated field %" PRIu32,
+ upb_MiniTableField_Number(field));
+ }
+ if (singular && required) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base, "Field %" PRIu32 " cannot be both singular and required",
+ upb_MiniTableField_Number(field));
+ }
+
+ if (singular) field->UPB_PRIVATE(offset) = kNoPresence;
+ if (required) {
+ field->UPB_PRIVATE(offset) = kRequiredPresence;
+ }
+}
+
+static void upb_MtDecoder_PushItem(upb_MtDecoder* d, upb_LayoutItem item) {
+ if (d->vec.size == d->vec.capacity) {
+ size_t new_cap = UPB_MAX(8, d->vec.size * 2);
+ d->vec.data = realloc(d->vec.data, new_cap * sizeof(*d->vec.data));
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->vec.data);
+ d->vec.capacity = new_cap;
+ }
+ d->vec.data[d->vec.size++] = item;
+}
+
+static void upb_MtDecoder_PushOneof(upb_MtDecoder* d, upb_LayoutItem item) {
+ if (item.field_index == kUpb_LayoutItem_IndexSentinel) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Empty oneof");
+ }
+ item.field_index -= kOneofBase;
+
+ // Push oneof data.
+ item.type = kUpb_LayoutItemType_OneofField;
+ upb_MtDecoder_PushItem(d, item);
+
+ // Push oneof case.
+ item.rep = kUpb_FieldRep_4Byte; // Field Number.
+ item.type = kUpb_LayoutItemType_OneofCase;
+ upb_MtDecoder_PushItem(d, item);
+}
+
+size_t upb_MtDecoder_SizeOfRep(upb_FieldRep rep,
+ upb_MiniTablePlatform platform) {
+ static const uint8_t kRepToSize32[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 8,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ static const uint8_t kRepToSize64[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 16,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ UPB_ASSERT(sizeof(upb_StringView) ==
+ UPB_SIZE(kRepToSize32, kRepToSize64)[kUpb_FieldRep_StringView]);
+ return platform == kUpb_MiniTablePlatform_32Bit ? kRepToSize32[rep]
+ : kRepToSize64[rep];
+}
+
+size_t upb_MtDecoder_AlignOfRep(upb_FieldRep rep,
+ upb_MiniTablePlatform platform) {
+ static const uint8_t kRepToAlign32[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 4,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ static const uint8_t kRepToAlign64[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 8,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ UPB_ASSERT(UPB_ALIGN_OF(upb_StringView) ==
+ UPB_SIZE(kRepToAlign32, kRepToAlign64)[kUpb_FieldRep_StringView]);
+ return platform == kUpb_MiniTablePlatform_32Bit ? kRepToAlign32[rep]
+ : kRepToAlign64[rep];
+}
+
+static const char* upb_MtDecoder_DecodeOneofField(upb_MtDecoder* d,
+ const char* ptr,
+ char first_ch,
+ upb_LayoutItem* item) {
+ uint32_t field_num;
+ ptr = upb_MdDecoder_DecodeBase92Varint(
+ &d->base, ptr, first_ch, kUpb_EncodedValue_MinOneofField,
+ kUpb_EncodedValue_MaxOneofField, &field_num);
+ upb_MiniTableField* f =
+ (void*)upb_MiniTable_FindFieldByNumber(d->table, field_num);
+
+ if (!f) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Couldn't add field number %" PRIu32
+ " to oneof, no such field number.",
+ field_num);
+ }
+ if (f->UPB_PRIVATE(offset) != kHasbitPresence) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base,
+ "Cannot add repeated, required, or singular field %" PRIu32
+ " to oneof.",
+ field_num);
+ }
+
+ // Oneof storage must be large enough to accommodate the largest member.
+ int rep = f->UPB_PRIVATE(mode) >> kUpb_FieldRep_Shift;
+ if (upb_MtDecoder_SizeOfRep(rep, d->platform) >
+ upb_MtDecoder_SizeOfRep(item->rep, d->platform)) {
+ item->rep = rep;
+ }
+ // Prepend this field to the linked list.
+ f->UPB_PRIVATE(offset) = item->field_index;
+ item->field_index = (f - d->fields) + kOneofBase;
+ return ptr;
+}
+
+static const char* upb_MtDecoder_DecodeOneofs(upb_MtDecoder* d,
+ const char* ptr) {
+ upb_LayoutItem item = {.rep = 0,
+ .field_index = kUpb_LayoutItem_IndexSentinel};
+ while (ptr < d->base.end) {
+ char ch = *ptr++;
+ if (ch == kUpb_EncodedValue_FieldSeparator) {
+ // Field separator, no action needed.
+ } else if (ch == kUpb_EncodedValue_OneofSeparator) {
+ // End of oneof.
+ upb_MtDecoder_PushOneof(d, item);
+ item.field_index = kUpb_LayoutItem_IndexSentinel; // Move to next oneof.
+ } else {
+ ptr = upb_MtDecoder_DecodeOneofField(d, ptr, ch, &item);
+ }
+ }
+
+ // Push final oneof.
+ upb_MtDecoder_PushOneof(d, item);
+ return ptr;
+}
+
+static const char* upb_MtDecoder_ParseModifier(upb_MtDecoder* d,
+ const char* ptr, char first_ch,
+ upb_MiniTableField* last_field,
+ uint64_t* msg_modifiers) {
+ uint32_t mod;
+ ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, first_ch,
+ kUpb_EncodedValue_MinModifier,
+ kUpb_EncodedValue_MaxModifier, &mod);
+ if (last_field) {
+ upb_MtDecoder_ModifyField(d, *msg_modifiers, mod, last_field);
+ } else {
+ if (!d->table) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Extensions cannot have message modifiers");
+ }
+ *msg_modifiers = mod;
+ }
+
+ return ptr;
+}
+
+static void upb_MtDecoder_AllocateSubs(upb_MtDecoder* d,
+ upb_SubCounts sub_counts) {
+ uint32_t total_count = sub_counts.submsg_count + sub_counts.subenum_count;
+ size_t subs_bytes = sizeof(*d->table->UPB_PRIVATE(subs)) * total_count;
+ upb_MiniTableSub* subs = upb_Arena_Malloc(d->arena, subs_bytes);
+ upb_MdDecoder_CheckOutOfMemory(&d->base, subs);
+ uint32_t i = 0;
+ for (; i < sub_counts.submsg_count; i++) {
+ subs[i].UPB_PRIVATE(submsg) = UPB_PRIVATE(_upb_MiniTable_Empty)();
+ }
+ if (sub_counts.subenum_count) {
+ upb_MiniTableField* f = d->fields;
+ upb_MiniTableField* end_f = f + d->table->UPB_PRIVATE(field_count);
+ for (; f < end_f; f++) {
+ if (f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum) {
+ f->UPB_PRIVATE(submsg_index) += sub_counts.submsg_count;
+ }
+ }
+ for (; i < sub_counts.submsg_count + sub_counts.subenum_count; i++) {
+ subs[i].UPB_PRIVATE(subenum) = NULL;
+ }
+ }
+ d->table->UPB_PRIVATE(subs) = subs;
+}
+
+static const char* upb_MtDecoder_Parse(upb_MtDecoder* d, const char* ptr,
+ size_t len, void* fields,
+ size_t field_size, uint16_t* field_count,
+ upb_SubCounts* sub_counts) {
+ uint64_t msg_modifiers = 0;
+ uint32_t last_field_number = 0;
+ upb_MiniTableField* last_field = NULL;
+ bool need_dense_below = d->table != NULL;
+
+ d->base.end = UPB_PTRADD(ptr, len);
+
+ while (ptr < d->base.end) {
+ char ch = *ptr++;
+ if (ch <= kUpb_EncodedValue_MaxField) {
+ if (!d->table && last_field) {
+ // For extensions, consume only a single field and then return.
+ return --ptr;
+ }
+ upb_MiniTableField* field = fields;
+ *field_count += 1;
+ fields = (char*)fields + field_size;
+ field->UPB_PRIVATE(number) = ++last_field_number;
+ last_field = field;
+ upb_MiniTable_SetField(d, ch, field, msg_modifiers, sub_counts);
+ } else if (kUpb_EncodedValue_MinModifier <= ch &&
+ ch <= kUpb_EncodedValue_MaxModifier) {
+ ptr = upb_MtDecoder_ParseModifier(d, ptr, ch, last_field, &msg_modifiers);
+ if (msg_modifiers & kUpb_MessageModifier_IsExtendable) {
+ d->table->UPB_PRIVATE(ext) |= kUpb_ExtMode_Extendable;
+ }
+ } else if (ch == kUpb_EncodedValue_End) {
+ if (!d->table) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Extensions cannot have oneofs.");
+ }
+ ptr = upb_MtDecoder_DecodeOneofs(d, ptr);
+ } else if (kUpb_EncodedValue_MinSkip <= ch &&
+ ch <= kUpb_EncodedValue_MaxSkip) {
+ if (need_dense_below) {
+ d->table->UPB_PRIVATE(dense_below) = d->table->UPB_PRIVATE(field_count);
+ need_dense_below = false;
+ }
+ uint32_t skip;
+ ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
+ kUpb_EncodedValue_MinSkip,
+ kUpb_EncodedValue_MaxSkip, &skip);
+ last_field_number += skip;
+ last_field_number--; // Next field seen will increment.
+ } else {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid char: %c", ch);
+ }
+ }
+
+ if (need_dense_below) {
+ d->table->UPB_PRIVATE(dense_below) = d->table->UPB_PRIVATE(field_count);
+ }
+
+ return ptr;
+}
+
+static void upb_MtDecoder_ParseMessage(upb_MtDecoder* d, const char* data,
+ size_t len) {
+ // Buffer length is an upper bound on the number of fields. We will return
+ // what we don't use.
+ d->fields = upb_Arena_Malloc(d->arena, sizeof(*d->fields) * len);
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->fields);
+
+ upb_SubCounts sub_counts = {0, 0};
+ d->table->UPB_PRIVATE(field_count) = 0;
+ d->table->UPB_PRIVATE(fields) = d->fields;
+ upb_MtDecoder_Parse(d, data, len, d->fields, sizeof(*d->fields),
+ &d->table->UPB_PRIVATE(field_count), &sub_counts);
+
+ upb_Arena_ShrinkLast(d->arena, d->fields, sizeof(*d->fields) * len,
+ sizeof(*d->fields) * d->table->UPB_PRIVATE(field_count));
+ d->table->UPB_PRIVATE(fields) = d->fields;
+ upb_MtDecoder_AllocateSubs(d, sub_counts);
+}
+
+int upb_MtDecoder_CompareFields(const void* _a, const void* _b) {
+ const upb_LayoutItem* a = _a;
+ const upb_LayoutItem* b = _b;
+ // Currently we just sort by:
+ // 1. rep (smallest fields first)
+ // 2. type (oneof cases first)
+ // 2. field_index (smallest numbers first)
+ // The main goal of this is to reduce space lost to padding.
+ // Later we may have more subtle reasons to prefer a different ordering.
+ const int rep_bits = upb_Log2Ceiling(kUpb_FieldRep_Max);
+ const int type_bits = upb_Log2Ceiling(kUpb_LayoutItemType_Max);
+ const int idx_bits = (sizeof(a->field_index) * 8);
+ UPB_ASSERT(idx_bits + rep_bits + type_bits < 32);
+#define UPB_COMBINE(rep, ty, idx) (((rep << type_bits) | ty) << idx_bits) | idx
+ uint32_t a_packed = UPB_COMBINE(a->rep, a->type, a->field_index);
+ uint32_t b_packed = UPB_COMBINE(b->rep, b->type, b->field_index);
+ UPB_ASSERT(a_packed != b_packed);
+#undef UPB_COMBINE
+ return a_packed < b_packed ? -1 : 1;
+}
+
+static bool upb_MtDecoder_SortLayoutItems(upb_MtDecoder* d) {
+ // Add items for all non-oneof fields (oneofs were already added).
+ int n = d->table->UPB_PRIVATE(field_count);
+ for (int i = 0; i < n; i++) {
+ upb_MiniTableField* f = &d->fields[i];
+ if (f->UPB_PRIVATE(offset) >= kOneofBase) continue;
+ upb_LayoutItem item = {.field_index = i,
+ .rep = f->UPB_PRIVATE(mode) >> kUpb_FieldRep_Shift,
+ .type = kUpb_LayoutItemType_Field};
+ upb_MtDecoder_PushItem(d, item);
+ }
+
+ if (d->vec.size) {
+ qsort(d->vec.data, d->vec.size, sizeof(*d->vec.data),
+ upb_MtDecoder_CompareFields);
+ }
+
+ return true;
+}
+
+static size_t upb_MiniTable_DivideRoundUp(size_t n, size_t d) {
+ return (n + d - 1) / d;
+}
+
+static void upb_MtDecoder_AssignHasbits(upb_MtDecoder* d) {
+ upb_MiniTable* ret = d->table;
+ int n = ret->UPB_PRIVATE(field_count);
+ int last_hasbit = 0; // 0 cannot be used.
+
+ // First assign required fields, which must have the lowest hasbits.
+ for (int i = 0; i < n; i++) {
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)&ret->UPB_PRIVATE(fields)[i];
+ if (field->UPB_PRIVATE(offset) == kRequiredPresence) {
+ field->presence = ++last_hasbit;
+ } else if (field->UPB_PRIVATE(offset) == kNoPresence) {
+ field->presence = 0;
+ }
+ }
+ if (last_hasbit > 63) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Too many required fields");
+ }
+
+ ret->UPB_PRIVATE(required_count) = last_hasbit;
+
+ // Next assign non-required hasbit fields.
+ for (int i = 0; i < n; i++) {
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)&ret->UPB_PRIVATE(fields)[i];
+ if (field->UPB_PRIVATE(offset) == kHasbitPresence) {
+ field->presence = ++last_hasbit;
+ }
+ }
+
+ ret->UPB_PRIVATE(size) =
+ last_hasbit ? upb_MiniTable_DivideRoundUp(last_hasbit + 1, 8) : 0;
+}
+
+size_t upb_MtDecoder_Place(upb_MtDecoder* d, upb_FieldRep rep) {
+ size_t size = upb_MtDecoder_SizeOfRep(rep, d->platform);
+ size_t align = upb_MtDecoder_AlignOfRep(rep, d->platform);
+ size_t ret = UPB_ALIGN_UP(d->table->UPB_PRIVATE(size), align);
+ static const size_t max = UINT16_MAX;
+ size_t new_size = ret + size;
+ if (new_size > max) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base, "Message size exceeded maximum size of %zu bytes", max);
+ }
+ d->table->UPB_PRIVATE(size) = new_size;
+ return ret;
+}
+
+static void upb_MtDecoder_AssignOffsets(upb_MtDecoder* d) {
+ upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
+
+ // Compute offsets.
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ item->offset = upb_MtDecoder_Place(d, item->rep);
+ }
+
+ // Assign oneof case offsets. We must do these first, since assigning
+ // actual offsets will overwrite the links of the linked list.
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ if (item->type != kUpb_LayoutItemType_OneofCase) continue;
+ upb_MiniTableField* f = &d->fields[item->field_index];
+ while (true) {
+ f->presence = ~item->offset;
+ if (f->UPB_PRIVATE(offset) == kUpb_LayoutItem_IndexSentinel) break;
+ UPB_ASSERT(f->UPB_PRIVATE(offset) - kOneofBase <
+ d->table->UPB_PRIVATE(field_count));
+ f = &d->fields[f->UPB_PRIVATE(offset) - kOneofBase];
+ }
+ }
+
+ // Assign offsets.
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ upb_MiniTableField* f = &d->fields[item->field_index];
+ switch (item->type) {
+ case kUpb_LayoutItemType_OneofField:
+ while (true) {
+ uint16_t next_offset = f->UPB_PRIVATE(offset);
+ f->UPB_PRIVATE(offset) = item->offset;
+ if (next_offset == kUpb_LayoutItem_IndexSentinel) break;
+ f = &d->fields[next_offset - kOneofBase];
+ }
+ break;
+ case kUpb_LayoutItemType_Field:
+ f->UPB_PRIVATE(offset) = item->offset;
+ break;
+ default:
+ break;
+ }
+ }
+
+ // The fasttable parser (supported on 64-bit only) depends on this being a
+ // multiple of 8 in order to satisfy UPB_MALLOC_ALIGN, which is also 8.
+ //
+ // On 32-bit we could potentially make this smaller, but there is no
+ // compelling reason to optimize this right now.
+ d->table->UPB_PRIVATE(size) = UPB_ALIGN_UP(d->table->UPB_PRIVATE(size), 8);
+}
+
+static void upb_MtDecoder_ValidateEntryField(upb_MtDecoder* d,
+ const upb_MiniTableField* f,
+ uint32_t expected_num) {
+ const char* name = expected_num == 1 ? "key" : "val";
+ const uint32_t f_number = upb_MiniTableField_Number(f);
+ if (f_number != expected_num) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "map %s did not have expected number (%d vs %d)",
+ name, expected_num, f_number);
+ }
+
+ if (!upb_MiniTableField_IsScalar(f)) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base, "map %s cannot be repeated or map, or be in oneof", name);
+ }
+
+ uint32_t not_ok_types;
+ if (expected_num == 1) {
+ not_ok_types = (1 << kUpb_FieldType_Float) | (1 << kUpb_FieldType_Double) |
+ (1 << kUpb_FieldType_Message) | (1 << kUpb_FieldType_Group) |
+ (1 << kUpb_FieldType_Bytes) | (1 << kUpb_FieldType_Enum);
+ } else {
+ not_ok_types = 1 << kUpb_FieldType_Group;
+ }
+
+ if ((1 << upb_MiniTableField_Type(f)) & not_ok_types) {
+ upb_MdDecoder_ErrorJmp(&d->base, "map %s cannot have type %d", name,
+ (int)f->UPB_PRIVATE(descriptortype));
+ }
+}
+
+static void upb_MtDecoder_ParseMap(upb_MtDecoder* d, const char* data,
+ size_t len) {
+ upb_MtDecoder_ParseMessage(d, data, len);
+ upb_MtDecoder_AssignHasbits(d);
+
+ if (UPB_UNLIKELY(d->table->UPB_PRIVATE(field_count) != 2)) {
+ upb_MdDecoder_ErrorJmp(&d->base, "%hu fields in map",
+ d->table->UPB_PRIVATE(field_count));
+ UPB_UNREACHABLE();
+ }
+
+ upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ if (item->type == kUpb_LayoutItemType_OneofCase) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Map entry cannot have oneof");
+ }
+ }
+
+ upb_MtDecoder_ValidateEntryField(d, &d->table->UPB_PRIVATE(fields)[0], 1);
+ upb_MtDecoder_ValidateEntryField(d, &d->table->UPB_PRIVATE(fields)[1], 2);
+
+ // Map entries have a pre-determined layout, regardless of types.
+ // NOTE: sync with mini_table/message_internal.h.
+ const size_t kv_size = d->platform == kUpb_MiniTablePlatform_32Bit ? 8 : 16;
+ const size_t hasbit_size = 8;
+ d->fields[0].UPB_PRIVATE(offset) = hasbit_size;
+ d->fields[1].UPB_PRIVATE(offset) = hasbit_size + kv_size;
+ d->table->UPB_PRIVATE(size) =
+ UPB_ALIGN_UP(hasbit_size + kv_size + kv_size, 8);
+
+ // Map entries have a special bit set to signal it's a map entry, used in
+ // upb_MiniTable_SetSubMessage() below.
+ d->table->UPB_PRIVATE(ext) |= kUpb_ExtMode_IsMapEntry;
+}
+
+static void upb_MtDecoder_ParseMessageSet(upb_MtDecoder* d, const char* data,
+ size_t len) {
+ if (len > 0) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid message set encode length: %zu",
+ len);
+ }
+
+ upb_MiniTable* ret = d->table;
+ ret->UPB_PRIVATE(size) = 0;
+ ret->UPB_PRIVATE(field_count) = 0;
+ ret->UPB_PRIVATE(ext) = kUpb_ExtMode_IsMessageSet;
+ ret->UPB_PRIVATE(dense_below) = 0;
+ ret->UPB_PRIVATE(table_mask) = -1;
+ ret->UPB_PRIVATE(required_count) = 0;
+}
+
+static upb_MiniTable* upb_MtDecoder_DoBuildMiniTableWithBuf(
+ upb_MtDecoder* decoder, const char* data, size_t len, void** buf,
+ size_t* buf_size) {
+ upb_MdDecoder_CheckOutOfMemory(&decoder->base, decoder->table);
+
+ decoder->table->UPB_PRIVATE(size) = 0;
+ decoder->table->UPB_PRIVATE(field_count) = 0;
+ decoder->table->UPB_PRIVATE(ext) = kUpb_ExtMode_NonExtendable;
+ decoder->table->UPB_PRIVATE(dense_below) = 0;
+ decoder->table->UPB_PRIVATE(table_mask) = -1;
+ decoder->table->UPB_PRIVATE(required_count) = 0;
+
+ // Strip off and verify the version tag.
+ if (!len--) goto done;
+ const char vers = *data++;
+
+ switch (vers) {
+ case kUpb_EncodedVersion_MapV1:
+ upb_MtDecoder_ParseMap(decoder, data, len);
+ break;
+
+ case kUpb_EncodedVersion_MessageV1:
+ upb_MtDecoder_ParseMessage(decoder, data, len);
+ upb_MtDecoder_AssignHasbits(decoder);
+ upb_MtDecoder_SortLayoutItems(decoder);
+ upb_MtDecoder_AssignOffsets(decoder);
+ break;
+
+ case kUpb_EncodedVersion_MessageSetV1:
+ upb_MtDecoder_ParseMessageSet(decoder, data, len);
+ break;
+
+ default:
+ upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid message version: %c",
+ vers);
+ }
+
+done:
+ *buf = decoder->vec.data;
+ *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
+ return decoder->table;
+}
+
+static upb_MiniTable* upb_MtDecoder_BuildMiniTableWithBuf(
+ upb_MtDecoder* const decoder, const char* const data, const size_t len,
+ void** const buf, size_t* const buf_size) {
+ if (UPB_SETJMP(decoder->base.err) != 0) {
+ *buf = decoder->vec.data;
+ *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
+ return NULL;
+ }
+
+ return upb_MtDecoder_DoBuildMiniTableWithBuf(decoder, data, len, buf,
+ buf_size);
+}
+
+upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
+ upb_MiniTablePlatform platform,
+ upb_Arena* arena, void** buf,
+ size_t* buf_size,
+ upb_Status* status) {
+ upb_MtDecoder decoder = {
+ .base = {.status = status},
+ .platform = platform,
+ .vec =
+ {
+ .data = *buf,
+ .capacity = *buf_size / sizeof(*decoder.vec.data),
+ .size = 0,
+ },
+ .arena = arena,
+ .table = upb_Arena_Malloc(arena, sizeof(*decoder.table)),
+ };
+
+ return upb_MtDecoder_BuildMiniTableWithBuf(&decoder, data, len, buf,
+ buf_size);
+}
+
+static const char* upb_MtDecoder_DoBuildMiniTableExtension(
+ upb_MtDecoder* decoder, const char* data, size_t len,
+ upb_MiniTableExtension* ext, const upb_MiniTable* extendee,
+ upb_MiniTableSub sub) {
+ // If the string is non-empty then it must begin with a version tag.
+ if (len) {
+ if (*data != kUpb_EncodedVersion_ExtensionV1) {
+ upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid ext version: %c", *data);
+ }
+ data++;
+ len--;
+ }
+
+ uint16_t count = 0;
+ upb_SubCounts sub_counts = {0, 0};
+ const char* ret = upb_MtDecoder_Parse(decoder, data, len, ext, sizeof(*ext),
+ &count, &sub_counts);
+ if (!ret || count != 1) return NULL;
+
+ upb_MiniTableField* f = &ext->UPB_PRIVATE(field);
+
+ f->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsExtension;
+ f->UPB_PRIVATE(offset) = 0;
+ f->presence = 0;
+
+ if (extendee->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMessageSet) {
+ // Extensions of MessageSet must be messages.
+ if (!upb_MiniTableField_IsSubMessage(f)) return NULL;
+
+ // Extensions of MessageSet must be non-repeating.
+ if (upb_MiniTableField_IsArray(f)) return NULL;
+ }
+
+ ext->UPB_PRIVATE(extendee) = extendee;
+ ext->UPB_PRIVATE(sub) = sub;
+
+ return ret;
+}
+
+static const char* upb_MtDecoder_BuildMiniTableExtension(
+ upb_MtDecoder* const decoder, const char* const data, const size_t len,
+ upb_MiniTableExtension* const ext, const upb_MiniTable* const extendee,
+ const upb_MiniTableSub sub) {
+ if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
+ return upb_MtDecoder_DoBuildMiniTableExtension(decoder, data, len, ext,
+ extendee, sub);
+}
+
+const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
+ upb_MiniTableExtension* ext,
+ const upb_MiniTable* extendee,
+ upb_MiniTableSub sub,
+ upb_MiniTablePlatform platform,
+ upb_Status* status) {
+ upb_MtDecoder decoder = {
+ .base = {.status = status},
+ .arena = NULL,
+ .table = NULL,
+ .platform = platform,
+ };
+
+ return upb_MtDecoder_BuildMiniTableExtension(&decoder, data, len, ext,
+ extendee, sub);
+}
+
+upb_MiniTableExtension* _upb_MiniTableExtension_Build(
+ const char* data, size_t len, const upb_MiniTable* extendee,
+ upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
+ upb_Status* status) {
+ upb_MiniTableExtension* ext =
+ upb_Arena_Malloc(arena, sizeof(upb_MiniTableExtension));
+ if (UPB_UNLIKELY(!ext)) return NULL;
+
+ const char* ptr = _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
+ platform, status);
+ if (UPB_UNLIKELY(!ptr)) return NULL;
+
+ return ext;
+}
+
+upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
+ upb_MiniTablePlatform platform,
+ upb_Arena* arena, upb_Status* status) {
+ void* buf = NULL;
+ size_t size = 0;
+ upb_MiniTable* ret = upb_MiniTable_BuildWithBuf(data, len, platform, arena,
+ &buf, &size, status);
+ free(buf);
+ return ret;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+bool upb_MiniTable_SetSubMessage(upb_MiniTable* table,
+ upb_MiniTableField* field,
+ const upb_MiniTable* sub) {
+ UPB_ASSERT((uintptr_t)table->UPB_PRIVATE(fields) <= (uintptr_t)field &&
+ (uintptr_t)field < (uintptr_t)(table->UPB_PRIVATE(fields) +
+ table->UPB_PRIVATE(field_count)));
+ UPB_ASSERT(sub);
+
+ const bool sub_is_map = sub->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMapEntry;
+
+ switch (field->UPB_PRIVATE(descriptortype)) {
+ case kUpb_FieldType_Message:
+ if (sub_is_map) {
+ const bool table_is_map =
+ table->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMapEntry;
+ if (UPB_UNLIKELY(table_is_map)) return false;
+
+ field->UPB_PRIVATE(mode) =
+ (field->UPB_PRIVATE(mode) & ~kUpb_FieldMode_Mask) |
+ kUpb_FieldMode_Map;
+ }
+ break;
+
+ case kUpb_FieldType_Group:
+ if (UPB_UNLIKELY(sub_is_map)) return false;
+ break;
+
+ default:
+ return false;
+ }
+
+ upb_MiniTableSub* table_sub =
+ (void*)&table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)];
+ // TODO: Add this assert back once YouTube is updated to not call
+ // this function repeatedly.
+ // UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_IsEmpty)(table_sub->submsg));
+ *table_sub = upb_MiniTableSub_FromMessage(sub);
+ return true;
+}
+
+bool upb_MiniTable_SetSubEnum(upb_MiniTable* table, upb_MiniTableField* field,
+ const upb_MiniTableEnum* sub) {
+ UPB_ASSERT((uintptr_t)table->UPB_PRIVATE(fields) <= (uintptr_t)field &&
+ (uintptr_t)field < (uintptr_t)(table->UPB_PRIVATE(fields) +
+ table->UPB_PRIVATE(field_count)));
+ UPB_ASSERT(sub);
+
+ upb_MiniTableSub* table_sub =
+ (void*)&table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)];
+ *table_sub = upb_MiniTableSub_FromEnum(sub);
+ return true;
+}
+
+uint32_t upb_MiniTable_GetSubList(const upb_MiniTable* mt,
+ const upb_MiniTableField** subs) {
+ uint32_t msg_count = 0;
+ uint32_t enum_count = 0;
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
+ *subs = f;
+ ++subs;
+ msg_count++;
+ }
+ }
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_CType(f) == kUpb_CType_Enum) {
+ *subs = f;
+ ++subs;
+ enum_count++;
+ }
+ }
+
+ return (msg_count << 16) | enum_count;
+}
+
+// The list of sub_tables and sub_enums must exactly match the number and order
+// of sub-message fields and sub-enum fields given by upb_MiniTable_GetSubList()
+// above.
+bool upb_MiniTable_Link(upb_MiniTable* mt, const upb_MiniTable** sub_tables,
+ size_t sub_table_count,
+ const upb_MiniTableEnum** sub_enums,
+ size_t sub_enum_count) {
+ uint32_t msg_count = 0;
+ uint32_t enum_count = 0;
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ upb_MiniTableField* f = (upb_MiniTableField*)&mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
+ const upb_MiniTable* sub = sub_tables[msg_count++];
+ if (msg_count > sub_table_count) return false;
+ if (sub != NULL) {
+ if (!upb_MiniTable_SetSubMessage(mt, f, sub)) return false;
+ }
+ }
+ }
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ upb_MiniTableField* f = (upb_MiniTableField*)&mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_IsClosedEnum(f)) {
+ const upb_MiniTableEnum* sub = sub_enums[enum_count++];
+ if (enum_count > sub_enum_count) return false;
+ if (sub != NULL) {
+ if (!upb_MiniTable_SetSubEnum(mt, f, sub)) return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+#define EXTREG_KEY_SIZE (sizeof(upb_MiniTable*) + sizeof(uint32_t))
+
+struct upb_ExtensionRegistry {
+ upb_Arena* arena;
+ upb_strtable exts; // Key is upb_MiniTable* concatenated with fieldnum.
+};
+
+static void extreg_key(char* buf, const upb_MiniTable* l, uint32_t fieldnum) {
+ memcpy(buf, &l, sizeof(l));
+ memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum));
+}
+
+upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena) {
+ upb_ExtensionRegistry* r = upb_Arena_Malloc(arena, sizeof(*r));
+ if (!r) return NULL;
+ r->arena = arena;
+ if (!upb_strtable_init(&r->exts, 8, arena)) return NULL;
+ return r;
+}
+
+UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension* e) {
+ char buf[EXTREG_KEY_SIZE];
+ extreg_key(buf, e->UPB_PRIVATE(extendee), upb_MiniTableExtension_Number(e));
+ if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
+ return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
+ upb_value_constptr(e), r->arena);
+}
+
+bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension** e,
+ size_t count) {
+ const upb_MiniTableExtension** start = e;
+ const upb_MiniTableExtension** end = UPB_PTRADD(e, count);
+ for (; e < end; e++) {
+ if (!upb_ExtensionRegistry_Add(r, *e)) goto failure;
+ }
+ return true;
+
+failure:
+ // Back out the entries previously added.
+ for (end = e, e = start; e < end; e++) {
+ const upb_MiniTableExtension* ext = *e;
+ char buf[EXTREG_KEY_SIZE];
+ extreg_key(buf, ext->UPB_PRIVATE(extendee),
+ upb_MiniTableExtension_Number(ext));
+ upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
+ }
+ return false;
+}
+
+const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
+ const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num) {
+ char buf[EXTREG_KEY_SIZE];
+ upb_value v;
+ extreg_key(buf, t, num);
+ if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) {
+ return upb_value_getconstptr(v);
+ } else {
+ return NULL;
+ }
+}
+
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
+ const upb_MiniTable* m, uint32_t number) {
+ const size_t i = ((size_t)number) - 1; // 0 wraps to SIZE_MAX
+
+ // Ideal case: index into dense fields
+ if (i < m->UPB_PRIVATE(dense_below)) {
+ UPB_ASSERT(m->UPB_PRIVATE(fields)[i].UPB_PRIVATE(number) == number);
+ return &m->UPB_PRIVATE(fields)[i];
+ }
+
+ // Slow case: binary search
+ int lo = m->UPB_PRIVATE(dense_below);
+ int hi = m->UPB_PRIVATE(field_count) - 1;
+ while (lo <= hi) {
+ int mid = (lo + hi) / 2;
+ uint32_t num = m->UPB_PRIVATE(fields)[mid].UPB_PRIVATE(number);
+ if (num < number) {
+ lo = mid + 1;
+ continue;
+ }
+ if (num > number) {
+ hi = mid - 1;
+ continue;
+ }
+ return &m->UPB_PRIVATE(fields)[mid];
+ }
+ return NULL;
+}
+
+const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
+ const upb_MiniTableField* f) {
+ if (UPB_UNLIKELY(!upb_MiniTableField_IsInOneof(f))) {
+ return NULL;
+ }
+ const upb_MiniTableField* ptr = &m->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* end =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ for (; ptr < end; ptr++) {
+ if (ptr->presence == (*f).presence) {
+ return ptr;
+ }
+ }
+ return NULL;
+}
+
+bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
+ const upb_MiniTableField** f) {
+ const upb_MiniTableField* ptr = *f;
+ const upb_MiniTableField* end =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ while (++ptr < end) {
+ if (ptr->presence == (*f)->presence) {
+ *f = ptr;
+ return true;
+ }
+ }
+ return false;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+// Checks if source and target mini table fields are identical.
+//
+// If the field is a sub message and sub messages are identical we record
+// the association in table.
+//
+// Hashing the source sub message mini table and it's equivalent in the table
+// stops recursing when a cycle is detected and instead just checks if the
+// destination table is equal.
+static upb_MiniTableEquals_Status upb_deep_check(const upb_MiniTable* src,
+ const upb_MiniTable* dst,
+ upb_inttable* table,
+ upb_Arena** arena) {
+ if (src->UPB_PRIVATE(field_count) != dst->UPB_PRIVATE(field_count))
+ return kUpb_MiniTableEquals_NotEqual;
+ bool marked_src = false;
+ for (int i = 0; i < upb_MiniTable_FieldCount(src); i++) {
+ const upb_MiniTableField* src_field = upb_MiniTable_GetFieldByIndex(src, i);
+ const upb_MiniTableField* dst_field = upb_MiniTable_FindFieldByNumber(
+ dst, upb_MiniTableField_Number(src_field));
+
+ if (upb_MiniTableField_CType(src_field) !=
+ upb_MiniTableField_CType(dst_field))
+ return false;
+ if (src_field->UPB_PRIVATE(mode) != dst_field->UPB_PRIVATE(mode))
+ return false;
+ if (src_field->UPB_PRIVATE(offset) != dst_field->UPB_PRIVATE(offset))
+ return false;
+ if (src_field->presence != dst_field->presence) return false;
+ if (src_field->UPB_PRIVATE(submsg_index) !=
+ dst_field->UPB_PRIVATE(submsg_index))
+ return kUpb_MiniTableEquals_NotEqual;
+
+ // Go no further if we are only checking for compatibility.
+ if (!table) continue;
+
+ if (upb_MiniTableField_CType(src_field) == kUpb_CType_Message) {
+ if (!*arena) {
+ *arena = upb_Arena_New();
+ if (!upb_inttable_init(table, *arena)) {
+ return kUpb_MiniTableEquals_OutOfMemory;
+ }
+ }
+ if (!marked_src) {
+ marked_src = true;
+ upb_value val;
+ val.val = (uint64_t)dst;
+ if (!upb_inttable_insert(table, (uintptr_t)src, val, *arena)) {
+ return kUpb_MiniTableEquals_OutOfMemory;
+ }
+ }
+ const upb_MiniTable* sub_src =
+ upb_MiniTable_GetSubMessageTable(src, src_field);
+ const upb_MiniTable* sub_dst =
+ upb_MiniTable_GetSubMessageTable(dst, dst_field);
+ if (sub_src != NULL) {
+ upb_value cmp;
+ if (upb_inttable_lookup(table, (uintptr_t)sub_src, &cmp)) {
+ // We already compared this src before. Check if same dst.
+ if (cmp.val != (uint64_t)sub_dst) {
+ return kUpb_MiniTableEquals_NotEqual;
+ }
+ } else {
+ // Recurse if not already visited.
+ upb_MiniTableEquals_Status s =
+ upb_deep_check(sub_src, sub_dst, table, arena);
+ if (s != kUpb_MiniTableEquals_Equal) {
+ return s;
+ }
+ }
+ }
+ }
+ }
+ return kUpb_MiniTableEquals_Equal;
+}
+
+bool upb_MiniTable_Compatible(const upb_MiniTable* src,
+ const upb_MiniTable* dst) {
+ return upb_deep_check(src, dst, NULL, NULL);
+}
+
+upb_MiniTableEquals_Status upb_MiniTable_Equals(const upb_MiniTable* src,
+ const upb_MiniTable* dst) {
+ // Arena allocated on demand for hash table.
+ upb_Arena* arena = NULL;
+ // Table to keep track of visited mini tables to guard against cycles.
+ upb_inttable table;
+ upb_MiniTableEquals_Status status = upb_deep_check(src, dst, &table, &arena);
+ if (arena) {
+ upb_Arena_Free(arena);
+ }
+ return status;
+}
+
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+// A few fake field types for our tables.
+enum {
+ kUpb_FakeFieldType_FieldNotFound = 0,
+ kUpb_FakeFieldType_MessageSetItem = 19,
+};
+
+// DecodeOp: an action to be performed for a wire-type/field-type combination.
+enum {
+ // Special ops: we don't write data to regular fields for these.
+ kUpb_DecodeOp_UnknownField = -1,
+ kUpb_DecodeOp_MessageSetItem = -2,
+
+ // Scalar-only ops.
+ kUpb_DecodeOp_Scalar1Byte = 0,
+ kUpb_DecodeOp_Scalar4Byte = 2,
+ kUpb_DecodeOp_Scalar8Byte = 3,
+ kUpb_DecodeOp_Enum = 1,
+
+ // Scalar/repeated ops.
+ kUpb_DecodeOp_String = 4,
+ kUpb_DecodeOp_Bytes = 5,
+ kUpb_DecodeOp_SubMessage = 6,
+
+ // Repeated-only ops (also see macros below).
+ kUpb_DecodeOp_PackedEnum = 13,
+};
+
+// For packed fields it is helpful to be able to recover the lg2 of the data
+// size from the op.
+#define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
+#define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
+
+typedef union {
+ bool bool_val;
+ uint32_t uint32_val;
+ uint64_t uint64_val;
+ uint32_t size;
+} wireval;
+
+// Ideally these two functions should take the owning MiniTable pointer as a
+// first argument, then we could just put them in mini_table/message.h as nice
+// clean getters. But we don't have that so instead we gotta write these
+// Frankenfunctions that take an array of subtables.
+// TODO: Move these to mini_table/ anyway since there are other places
+// that could use them.
+
+// Returns the MiniTable corresponding to a given MiniTableField
+// from an array of MiniTableSubs.
+static const upb_MiniTable* _upb_MiniTableSubs_MessageByField(
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ return upb_MiniTableSub_Message(subs[field->UPB_PRIVATE(submsg_index)]);
+}
+
+// Returns the MiniTableEnum corresponding to a given MiniTableField
+// from an array of MiniTableSub.
+static const upb_MiniTableEnum* _upb_MiniTableSubs_EnumByField(
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ return upb_MiniTableSub_Enum(subs[field->UPB_PRIVATE(submsg_index)]);
+}
+
+static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTable* layout);
+
+UPB_NORETURN static void* _upb_Decoder_ErrorJmp(upb_Decoder* d,
+ upb_DecodeStatus status) {
+ UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
+ d->status = status;
+ UPB_LONGJMP(d->err, 1);
+}
+
+const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status) {
+ UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
+ d->status = status;
+ UPB_LONGJMP(d->err, 1);
+ return NULL;
+}
+
+static void _upb_Decoder_VerifyUtf8(upb_Decoder* d, const char* buf, int len) {
+ if (!_upb_Decoder_VerifyUtf8Inline(buf, len)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
+ }
+}
+
+static bool _upb_Decoder_Reserve(upb_Decoder* d, upb_Array* arr, size_t elem) {
+ bool need_realloc =
+ arr->UPB_PRIVATE(capacity) - arr->UPB_PRIVATE(size) < elem;
+ if (need_realloc && !UPB_PRIVATE(_upb_Array_Realloc)(
+ arr, arr->UPB_PRIVATE(size) + elem, &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ return need_realloc;
+}
+
+typedef struct {
+ const char* ptr;
+ uint64_t val;
+} _upb_DecodeLongVarintReturn;
+
+UPB_NOINLINE
+static _upb_DecodeLongVarintReturn _upb_Decoder_DecodeLongVarint(
+ const char* ptr, uint64_t val) {
+ _upb_DecodeLongVarintReturn ret = {NULL, 0};
+ uint64_t byte;
+ int i;
+ for (i = 1; i < 10; i++) {
+ byte = (uint8_t)ptr[i];
+ val += (byte - 1) << (i * 7);
+ if (!(byte & 0x80)) {
+ ret.ptr = ptr + i + 1;
+ ret.val = val;
+ return ret;
+ }
+ }
+ return ret;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeVarint(upb_Decoder* d, const char* ptr,
+ uint64_t* val) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = byte;
+ return ptr + 1;
+ } else {
+ _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
+ if (!res.ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ *val = res.val;
+ return res.ptr;
+ }
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeTag(upb_Decoder* d, const char* ptr,
+ uint32_t* val) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = byte;
+ return ptr + 1;
+ } else {
+ const char* start = ptr;
+ _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
+ if (!res.ptr || res.ptr - start > 5 || res.val > UINT32_MAX) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ *val = res.val;
+ return res.ptr;
+ }
+}
+
+UPB_FORCEINLINE
+static const char* upb_Decoder_DecodeSize(upb_Decoder* d, const char* ptr,
+ uint32_t* size) {
+ uint64_t size64;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &size64);
+ if (size64 >= INT32_MAX ||
+ !upb_EpsCopyInputStream_CheckSize(&d->input, ptr, (int)size64)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ *size = size64;
+ return ptr;
+}
+
+static void _upb_Decoder_MungeInt32(wireval* val) {
+ if (!upb_IsLittleEndian()) {
+ /* The next stage will memcpy(dst, &val, 4) */
+ val->uint32_val = val->uint64_val;
+ }
+}
+
+static void _upb_Decoder_Munge(int type, wireval* val) {
+ switch (type) {
+ case kUpb_FieldType_Bool:
+ val->bool_val = val->uint64_val != 0;
+ break;
+ case kUpb_FieldType_SInt32: {
+ uint32_t n = val->uint64_val;
+ val->uint32_val = (n >> 1) ^ -(int32_t)(n & 1);
+ break;
+ }
+ case kUpb_FieldType_SInt64: {
+ uint64_t n = val->uint64_val;
+ val->uint64_val = (n >> 1) ^ -(int64_t)(n & 1);
+ break;
+ }
+ case kUpb_FieldType_Int32:
+ case kUpb_FieldType_UInt32:
+ case kUpb_FieldType_Enum:
+ _upb_Decoder_MungeInt32(val);
+ break;
+ }
+}
+
+static upb_Message* _upb_Decoder_NewSubMessage(upb_Decoder* d,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ upb_TaggedMessagePtr* target) {
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ upb_Message* msg = _upb_Message_New(subl, &d->arena);
+ if (!msg) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+
+ // Extensions should not be unlinked. A message extension should not be
+ // registered until its sub-message type is available to be linked.
+ bool is_empty = UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl);
+ bool is_extension = field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension;
+ UPB_ASSERT(!(is_empty && is_extension));
+
+ if (is_empty && !(d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_UnlinkedSubMessage);
+ }
+
+ upb_TaggedMessagePtr tagged =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(msg, is_empty);
+ memcpy(target, &tagged, sizeof(tagged));
+ return msg;
+}
+
+static upb_Message* _upb_Decoder_ReuseSubMessage(
+ upb_Decoder* d, const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
+ upb_TaggedMessagePtr tagged = *target;
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ if (!upb_TaggedMessagePtr_IsEmpty(tagged) ||
+ UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl)) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
+ }
+
+ // We found an empty message from a previous parse that was performed before
+ // this field was linked. But it is linked now, so we want to allocate a new
+ // message of the correct type and promote data into it before continuing.
+ upb_Message* existing =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetEmptyMessage)(tagged);
+ upb_Message* promoted = _upb_Decoder_NewSubMessage(d, subs, field, target);
+ size_t size;
+ const char* unknown = upb_Message_GetUnknown(existing, &size);
+ upb_DecodeStatus status = upb_Decode(unknown, size, promoted, subl, d->extreg,
+ d->options, &d->arena);
+ if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
+ return promoted;
+}
+
+static const char* _upb_Decoder_ReadString(upb_Decoder* d, const char* ptr,
+ int size, upb_StringView* str) {
+ const char* str_ptr = ptr;
+ ptr = upb_EpsCopyInputStream_ReadString(&d->input, &str_ptr, size, &d->arena);
+ if (!ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ str->data = str_ptr;
+ str->size = size;
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_RecurseSubMessage(upb_Decoder* d,
+ const char* ptr,
+ upb_Message* submsg,
+ const upb_MiniTable* subl,
+ uint32_t expected_end_group) {
+ if (--d->depth < 0) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded);
+ }
+ ptr = _upb_Decoder_DecodeMessage(d, ptr, submsg, subl);
+ d->depth++;
+ if (d->end_group != expected_end_group) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeSubMessage(
+ upb_Decoder* d, const char* ptr, upb_Message* submsg,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field, int size) {
+ int saved_delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, DECODE_NOGROUP);
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_delta);
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeGroup(upb_Decoder* d, const char* ptr,
+ upb_Message* submsg,
+ const upb_MiniTable* subl,
+ uint32_t number) {
+ if (_upb_Decoder_IsDone(d, &ptr)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, number);
+ d->end_group = DECODE_NOGROUP;
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeUnknownGroup(upb_Decoder* d,
+ const char* ptr,
+ uint32_t number) {
+ return _upb_Decoder_DecodeGroup(d, ptr, NULL, NULL, number);
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeKnownGroup(
+ upb_Decoder* d, const char* ptr, upb_Message* submsg,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl,
+ field->UPB_PRIVATE(number));
+}
+
+static char* upb_Decoder_EncodeVarint32(uint32_t val, char* ptr) {
+ do {
+ uint8_t byte = val & 0x7fU;
+ val >>= 7;
+ if (val) byte |= 0x80U;
+ *(ptr++) = byte;
+ } while (val);
+ return ptr;
+}
+
+static void _upb_Decoder_AddUnknownVarints(upb_Decoder* d, upb_Message* msg,
+ uint32_t val1, uint32_t val2) {
+ char buf[20];
+ char* end = buf;
+ end = upb_Decoder_EncodeVarint32(val1, end);
+ end = upb_Decoder_EncodeVarint32(val2, end);
+
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, end - buf, &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+}
+
+UPB_FORCEINLINE
+static bool _upb_Decoder_CheckEnum(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, const upb_MiniTableEnum* e,
+ const upb_MiniTableField* field,
+ wireval* val) {
+ const uint32_t v = val->uint32_val;
+
+ if (UPB_LIKELY(upb_MiniTableEnum_CheckValue(e, v))) return true;
+
+ // Unrecognized enum goes into unknown fields.
+ // For packed fields the tag could be arbitrarily far in the past,
+ // so we just re-encode the tag and value here.
+ const uint32_t tag =
+ ((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Varint;
+ upb_Message* unknown_msg =
+ field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension ? d->unknown_msg
+ : msg;
+ _upb_Decoder_AddUnknownVarints(d, unknown_msg, tag, v);
+ return false;
+}
+
+UPB_NOINLINE
+static const char* _upb_Decoder_DecodeEnumArray(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ upb_Array* arr,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ wireval* val) {
+ const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
+ if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, val)) return ptr;
+ void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ arr->UPB_PRIVATE(size)++;
+ memcpy(mem, val, 4);
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeFixedPacked(
+ upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
+ const upb_MiniTableField* field, int lg2) {
+ int mask = (1 << lg2) - 1;
+ size_t count = val->size >> lg2;
+ if ((val->size & mask) != 0) {
+ // Length isn't a round multiple of elem size.
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ _upb_Decoder_Reserve(d, arr, count);
+ void* mem =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ arr->UPB_PRIVATE(size) += count;
+ // Note: if/when the decoder supports multi-buffer input, we will need to
+ // handle buffer seams here.
+ if (upb_IsLittleEndian()) {
+ ptr = upb_EpsCopyInputStream_Copy(&d->input, ptr, mem, val->size);
+ } else {
+ int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
+ char* dst = mem;
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ if (lg2 == 2) {
+ ptr = upb_WireReader_ReadFixed32(ptr, dst);
+ dst += 4;
+ } else {
+ UPB_ASSERT(lg2 == 3);
+ ptr = upb_WireReader_ReadFixed64(ptr, dst);
+ dst += 8;
+ }
+ }
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
+ }
+
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeVarintPacked(
+ upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
+ const upb_MiniTableField* field, int lg2) {
+ int scale = 1 << lg2;
+ int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
+ char* out =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ wireval elem;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
+ _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), &elem);
+ if (_upb_Decoder_Reserve(d, arr, 1)) {
+ out =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ }
+ arr->UPB_PRIVATE(size)++;
+ memcpy(out, &elem, scale);
+ out += scale;
+ }
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
+ return ptr;
+}
+
+UPB_NOINLINE
+static const char* _upb_Decoder_DecodeEnumPacked(
+ upb_Decoder* d, const char* ptr, upb_Message* msg, upb_Array* arr,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field,
+ wireval* val) {
+ const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
+ int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
+ char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ wireval elem;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
+ _upb_Decoder_MungeInt32(&elem);
+ if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, &elem)) {
+ continue;
+ }
+ if (_upb_Decoder_Reserve(d, arr, 1)) {
+ out = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ }
+ arr->UPB_PRIVATE(size)++;
+ memcpy(out, &elem, 4);
+ out += 4;
+ }
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
+ return ptr;
+}
+
+upb_Array* _upb_Decoder_CreateArray(upb_Decoder* d,
+ const upb_MiniTableField* field) {
+ const upb_FieldType field_type = field->UPB_PRIVATE(descriptortype);
+ const size_t lg2 = UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
+ upb_Array* ret = UPB_PRIVATE(_upb_Array_New)(&d->arena, 4, lg2);
+ if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ return ret;
+}
+
+static const char* _upb_Decoder_DecodeToArray(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ wireval* val, int op) {
+ upb_Array** arrp = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
+ upb_Array* arr = *arrp;
+ void* mem;
+
+ if (arr) {
+ _upb_Decoder_Reserve(d, arr, 1);
+ } else {
+ arr = _upb_Decoder_CreateArray(d, field);
+ *arrp = arr;
+ }
+
+ switch (op) {
+ case kUpb_DecodeOp_Scalar1Byte:
+ case kUpb_DecodeOp_Scalar4Byte:
+ case kUpb_DecodeOp_Scalar8Byte:
+ /* Append scalar value. */
+ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << op, void);
+ arr->UPB_PRIVATE(size)++;
+ memcpy(mem, val, 1 << op);
+ return ptr;
+ case kUpb_DecodeOp_String:
+ _upb_Decoder_VerifyUtf8(d, ptr, val->size);
+ /* Fallthrough. */
+ case kUpb_DecodeOp_Bytes: {
+ /* Append bytes. */
+ upb_StringView* str =
+ (upb_StringView*)_upb_array_ptr(arr) + arr->UPB_PRIVATE(size);
+ arr->UPB_PRIVATE(size)++;
+ return _upb_Decoder_ReadString(d, ptr, val->size, str);
+ }
+ case kUpb_DecodeOp_SubMessage: {
+ /* Append submessage / group. */
+ upb_TaggedMessagePtr* target = UPB_PTR_AT(
+ _upb_array_ptr(arr), arr->UPB_PRIVATE(size) * sizeof(void*),
+ upb_TaggedMessagePtr);
+ upb_Message* submsg = _upb_Decoder_NewSubMessage(d, subs, field, target);
+ arr->UPB_PRIVATE(size)++;
+ if (UPB_UNLIKELY(field->UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Group)) {
+ return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
+ } else {
+ return _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
+ val->size);
+ }
+ }
+ case OP_FIXPCK_LG2(2):
+ case OP_FIXPCK_LG2(3):
+ return _upb_Decoder_DecodeFixedPacked(d, ptr, arr, val, field,
+ op - OP_FIXPCK_LG2(0));
+ case OP_VARPCK_LG2(0):
+ case OP_VARPCK_LG2(2):
+ case OP_VARPCK_LG2(3):
+ return _upb_Decoder_DecodeVarintPacked(d, ptr, arr, val, field,
+ op - OP_VARPCK_LG2(0));
+ case kUpb_DecodeOp_Enum:
+ return _upb_Decoder_DecodeEnumArray(d, ptr, msg, arr, subs, field, val);
+ case kUpb_DecodeOp_PackedEnum:
+ return _upb_Decoder_DecodeEnumPacked(d, ptr, msg, arr, subs, field, val);
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+upb_Map* _upb_Decoder_CreateMap(upb_Decoder* d, const upb_MiniTable* entry) {
+ /* Maps descriptor type -> upb map size. */
+ static const uint8_t kSizeInMap[] = {
+ [0] = -1, // invalid descriptor type */
+ [kUpb_FieldType_Double] = 8,
+ [kUpb_FieldType_Float] = 4,
+ [kUpb_FieldType_Int64] = 8,
+ [kUpb_FieldType_UInt64] = 8,
+ [kUpb_FieldType_Int32] = 4,
+ [kUpb_FieldType_Fixed64] = 8,
+ [kUpb_FieldType_Fixed32] = 4,
+ [kUpb_FieldType_Bool] = 1,
+ [kUpb_FieldType_String] = UPB_MAPTYPE_STRING,
+ [kUpb_FieldType_Group] = sizeof(void*),
+ [kUpb_FieldType_Message] = sizeof(void*),
+ [kUpb_FieldType_Bytes] = UPB_MAPTYPE_STRING,
+ [kUpb_FieldType_UInt32] = 4,
+ [kUpb_FieldType_Enum] = 4,
+ [kUpb_FieldType_SFixed32] = 4,
+ [kUpb_FieldType_SFixed64] = 8,
+ [kUpb_FieldType_SInt32] = 4,
+ [kUpb_FieldType_SInt64] = 8,
+ };
+
+ const upb_MiniTableField* key_field = &entry->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* val_field = &entry->UPB_PRIVATE(fields)[1];
+ char key_size = kSizeInMap[key_field->UPB_PRIVATE(descriptortype)];
+ char val_size = kSizeInMap[val_field->UPB_PRIVATE(descriptortype)];
+ UPB_ASSERT(key_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntryData, k));
+ UPB_ASSERT(val_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntryData, v));
+ upb_Map* ret = _upb_Map_New(&d->arena, key_size, val_size);
+ if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ return ret;
+}
+
+static const char* _upb_Decoder_DecodeToMap(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ wireval* val) {
+ upb_Map** map_p = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), upb_Map*);
+ upb_Map* map = *map_p;
+ upb_MapEntry ent;
+ UPB_ASSERT(upb_MiniTableField_Type(field) == kUpb_FieldType_Message);
+ const upb_MiniTable* entry = _upb_MiniTableSubs_MessageByField(subs, field);
+
+ UPB_ASSERT(entry);
+ UPB_ASSERT(entry->UPB_PRIVATE(field_count) == 2);
+ UPB_ASSERT(upb_MiniTableField_IsScalar(&entry->UPB_PRIVATE(fields)[0]));
+ UPB_ASSERT(upb_MiniTableField_IsScalar(&entry->UPB_PRIVATE(fields)[1]));
+
+ if (!map) {
+ map = _upb_Decoder_CreateMap(d, entry);
+ *map_p = map;
+ }
+
+ // Parse map entry.
+ memset(&ent, 0, sizeof(ent));
+
+ if (entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Message ||
+ entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Group) {
+ // Create proactively to handle the case where it doesn't appear.
+ upb_TaggedMessagePtr msg;
+ _upb_Decoder_NewSubMessage(d, entry->UPB_PRIVATE(subs),
+ &entry->UPB_PRIVATE(fields)[1], &msg);
+ ent.data.v.val = upb_value_uintptr(msg);
+ }
+
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, (upb_Message*)&ent.data, subs,
+ field, val->size);
+ // check if ent had any unknown fields
+ size_t size;
+ upb_Message_GetUnknown((upb_Message*)&ent.data, &size);
+ if (size != 0) {
+ char* buf;
+ size_t size;
+ uint32_t tag =
+ ((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Delimited;
+ upb_EncodeStatus status =
+ upb_Encode((upb_Message*)&ent.data, entry, 0, &d->arena, &buf, &size);
+ if (status != kUpb_EncodeStatus_Ok) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ _upb_Decoder_AddUnknownVarints(d, msg, tag, size);
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, size, &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ } else {
+ if (_upb_Map_Insert(map, &ent.data.k, map->key_size, &ent.data.v,
+ map->val_size,
+ &d->arena) == kUpb_MapInsertStatus_OutOfMemory) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ }
+ return ptr;
+}
+
+static const char* _upb_Decoder_DecodeToSubMessage(
+ upb_Decoder* d, const char* ptr, upb_Message* msg,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field, wireval* val,
+ int op) {
+ void* mem = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
+ int type = field->UPB_PRIVATE(descriptortype);
+
+ if (UPB_UNLIKELY(op == kUpb_DecodeOp_Enum) &&
+ !_upb_Decoder_CheckEnum(d, ptr, msg,
+ _upb_MiniTableSubs_EnumByField(subs, field),
+ field, val)) {
+ return ptr;
+ }
+
+ // Set presence if necessary.
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(field)) {
+ UPB_PRIVATE(_upb_Message_SetHasbit)(msg, field);
+ } else if (UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(field)) {
+ // Oneof case
+ uint32_t* oneof_case = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, field);
+ if (op == kUpb_DecodeOp_SubMessage &&
+ *oneof_case != field->UPB_PRIVATE(number)) {
+ memset(mem, 0, sizeof(void*));
+ }
+ *oneof_case = field->UPB_PRIVATE(number);
+ }
+
+ // Store into message.
+ switch (op) {
+ case kUpb_DecodeOp_SubMessage: {
+ upb_TaggedMessagePtr* submsgp = mem;
+ upb_Message* submsg;
+ if (*submsgp) {
+ submsg = _upb_Decoder_ReuseSubMessage(d, subs, field, submsgp);
+ } else {
+ submsg = _upb_Decoder_NewSubMessage(d, subs, field, submsgp);
+ }
+ if (UPB_UNLIKELY(type == kUpb_FieldType_Group)) {
+ ptr = _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
+ } else {
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
+ val->size);
+ }
+ break;
+ }
+ case kUpb_DecodeOp_String:
+ _upb_Decoder_VerifyUtf8(d, ptr, val->size);
+ /* Fallthrough. */
+ case kUpb_DecodeOp_Bytes:
+ return _upb_Decoder_ReadString(d, ptr, val->size, mem);
+ case kUpb_DecodeOp_Scalar8Byte:
+ memcpy(mem, val, 8);
+ break;
+ case kUpb_DecodeOp_Enum:
+ case kUpb_DecodeOp_Scalar4Byte:
+ memcpy(mem, val, 4);
+ break;
+ case kUpb_DecodeOp_Scalar1Byte:
+ memcpy(mem, val, 1);
+ break;
+ default:
+ UPB_UNREACHABLE();
+ }
+
+ return ptr;
+}
+
+UPB_NOINLINE
+const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
+ const upb_Message* msg,
+ const upb_MiniTable* m) {
+ UPB_ASSERT(m->UPB_PRIVATE(required_count));
+ if (UPB_LIKELY((d->options & kUpb_DecodeOption_CheckRequired) == 0)) {
+ return ptr;
+ }
+ uint64_t msg_head;
+ memcpy(&msg_head, msg, 8);
+ msg_head = upb_BigEndian64(msg_head);
+ if (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~msg_head) {
+ d->missing_required = true;
+ }
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static bool _upb_Decoder_TryFastDispatch(upb_Decoder* d, const char** ptr,
+ upb_Message* msg,
+ const upb_MiniTable* m) {
+#if UPB_FASTTABLE
+ if (m && m->UPB_PRIVATE(table_mask) != (unsigned char)-1) {
+ uint16_t tag = _upb_FastDecoder_LoadTag(*ptr);
+ intptr_t table = decode_totable(m);
+ *ptr = _upb_FastDecoder_TagDispatch(d, *ptr, msg, table, 0, tag);
+ return true;
+ }
+#endif
+ return false;
+}
+
+static const char* upb_Decoder_SkipField(upb_Decoder* d, const char* ptr,
+ uint32_t tag) {
+ int field_number = tag >> 3;
+ int wire_type = tag & 7;
+ switch (wire_type) {
+ case kUpb_WireType_Varint: {
+ uint64_t val;
+ return _upb_Decoder_DecodeVarint(d, ptr, &val);
+ }
+ case kUpb_WireType_64Bit:
+ return ptr + 8;
+ case kUpb_WireType_32Bit:
+ return ptr + 4;
+ case kUpb_WireType_Delimited: {
+ uint32_t size;
+ ptr = upb_Decoder_DecodeSize(d, ptr, &size);
+ return ptr + size;
+ }
+ case kUpb_WireType_StartGroup:
+ return _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
+ default:
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+}
+
+enum {
+ kStartItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_StartGroup),
+ kEndItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_EndGroup),
+ kTypeIdTag = ((kUpb_MsgSet_TypeId << 3) | kUpb_WireType_Varint),
+ kMessageTag = ((kUpb_MsgSet_Message << 3) | kUpb_WireType_Delimited),
+};
+
+static void upb_Decoder_AddKnownMessageSetItem(
+ upb_Decoder* d, upb_Message* msg, const upb_MiniTableExtension* item_mt,
+ const char* data, uint32_t size) {
+ upb_Extension* ext =
+ _upb_Message_GetOrCreateExtension(msg, item_mt, &d->arena);
+ if (UPB_UNLIKELY(!ext)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ upb_Message* submsg = _upb_Decoder_NewSubMessage(
+ d, &ext->ext->UPB_PRIVATE(sub), upb_MiniTableExtension_AsField(ext->ext),
+ (upb_TaggedMessagePtr*)&ext->data);
+ upb_DecodeStatus status = upb_Decode(
+ data, size, submsg, upb_MiniTableExtension_GetSubMessage(item_mt),
+ d->extreg, d->options, &d->arena);
+ if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
+}
+
+static void upb_Decoder_AddUnknownMessageSetItem(upb_Decoder* d,
+ upb_Message* msg,
+ uint32_t type_id,
+ const char* message_data,
+ uint32_t message_size) {
+ char buf[60];
+ char* ptr = buf;
+ ptr = upb_Decoder_EncodeVarint32(kStartItemTag, ptr);
+ ptr = upb_Decoder_EncodeVarint32(kTypeIdTag, ptr);
+ ptr = upb_Decoder_EncodeVarint32(type_id, ptr);
+ ptr = upb_Decoder_EncodeVarint32(kMessageTag, ptr);
+ ptr = upb_Decoder_EncodeVarint32(message_size, ptr);
+ char* split = ptr;
+
+ ptr = upb_Decoder_EncodeVarint32(kEndItemTag, ptr);
+ char* end = ptr;
+
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, split - buf, &d->arena) ||
+ !UPB_PRIVATE(_upb_Message_AddUnknown)(msg, message_data, message_size,
+ &d->arena) ||
+ !UPB_PRIVATE(_upb_Message_AddUnknown)(msg, split, end - split,
+ &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+}
+
+static void upb_Decoder_AddMessageSetItem(upb_Decoder* d, upb_Message* msg,
+ const upb_MiniTable* t,
+ uint32_t type_id, const char* data,
+ uint32_t size) {
+ const upb_MiniTableExtension* item_mt =
+ upb_ExtensionRegistry_Lookup(d->extreg, t, type_id);
+ if (item_mt) {
+ upb_Decoder_AddKnownMessageSetItem(d, msg, item_mt, data, size);
+ } else {
+ upb_Decoder_AddUnknownMessageSetItem(d, msg, type_id, data, size);
+ }
+}
+
+static const char* upb_Decoder_DecodeMessageSetItem(
+ upb_Decoder* d, const char* ptr, upb_Message* msg,
+ const upb_MiniTable* layout) {
+ uint32_t type_id = 0;
+ upb_StringView preserved = {NULL, 0};
+ typedef enum {
+ kUpb_HaveId = 1 << 0,
+ kUpb_HavePayload = 1 << 1,
+ } StateMask;
+ StateMask state_mask = 0;
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ uint32_t tag;
+ ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
+ switch (tag) {
+ case kEndItemTag:
+ return ptr;
+ case kTypeIdTag: {
+ uint64_t tmp;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &tmp);
+ if (state_mask & kUpb_HaveId) break; // Ignore dup.
+ state_mask |= kUpb_HaveId;
+ type_id = tmp;
+ if (state_mask & kUpb_HavePayload) {
+ upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, preserved.data,
+ preserved.size);
+ }
+ break;
+ }
+ case kMessageTag: {
+ uint32_t size;
+ ptr = upb_Decoder_DecodeSize(d, ptr, &size);
+ const char* data = ptr;
+ ptr += size;
+ if (state_mask & kUpb_HavePayload) break; // Ignore dup.
+ state_mask |= kUpb_HavePayload;
+ if (state_mask & kUpb_HaveId) {
+ upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, data, size);
+ } else {
+ // Out of order, we must preserve the payload.
+ preserved.data = data;
+ preserved.size = size;
+ }
+ break;
+ }
+ default:
+ // We do not preserve unexpected fields inside a message set item.
+ ptr = upb_Decoder_SkipField(d, ptr, tag);
+ break;
+ }
+ }
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+}
+
+static const upb_MiniTableField* _upb_Decoder_FindField(upb_Decoder* d,
+ const upb_MiniTable* t,
+ uint32_t field_number,
+ int* last_field_index) {
+ static upb_MiniTableField none = {
+ 0, 0, 0, 0, kUpb_FakeFieldType_FieldNotFound, 0};
+ if (t == NULL) return &none;
+
+ size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
+ if (idx < t->UPB_PRIVATE(dense_below)) {
+ /* Fastest case: index into dense fields. */
+ goto found;
+ }
+
+ if (t->UPB_PRIVATE(dense_below) < t->UPB_PRIVATE(field_count)) {
+ /* Linear search non-dense fields. Resume scanning from last_field_index
+ * since fields are usually in order. */
+ size_t last = *last_field_index;
+ for (idx = last; idx < t->UPB_PRIVATE(field_count); idx++) {
+ if (t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number) {
+ goto found;
+ }
+ }
+
+ for (idx = t->UPB_PRIVATE(dense_below); idx < last; idx++) {
+ if (t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number) {
+ goto found;
+ }
+ }
+ }
+
+ if (d->extreg) {
+ switch (t->UPB_PRIVATE(ext)) {
+ case kUpb_ExtMode_Extendable: {
+ const upb_MiniTableExtension* ext =
+ upb_ExtensionRegistry_Lookup(d->extreg, t, field_number);
+ if (ext) return upb_MiniTableExtension_AsField(ext);
+ break;
+ }
+ case kUpb_ExtMode_IsMessageSet:
+ if (field_number == kUpb_MsgSet_Item) {
+ static upb_MiniTableField item = {
+ 0, 0, 0, 0, kUpb_FakeFieldType_MessageSetItem, 0};
+ return &item;
+ }
+ break;
+ }
+ }
+
+ return &none; /* Unknown field. */
+
+found:
+ UPB_ASSERT(t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number);
+ *last_field_index = idx;
+ return &t->UPB_PRIVATE(fields)[idx];
+}
+
+int _upb_Decoder_GetVarintOp(const upb_MiniTableField* field) {
+ static const int8_t kVarintOps[] = {
+ [kUpb_FakeFieldType_FieldNotFound] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Int64] = kUpb_DecodeOp_Scalar8Byte,
+ [kUpb_FieldType_UInt64] = kUpb_DecodeOp_Scalar8Byte,
+ [kUpb_FieldType_Int32] = kUpb_DecodeOp_Scalar4Byte,
+ [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Bool] = kUpb_DecodeOp_Scalar1Byte,
+ [kUpb_FieldType_String] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Message] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Bytes] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_UInt32] = kUpb_DecodeOp_Scalar4Byte,
+ [kUpb_FieldType_Enum] = kUpb_DecodeOp_Enum,
+ [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SInt32] = kUpb_DecodeOp_Scalar4Byte,
+ [kUpb_FieldType_SInt64] = kUpb_DecodeOp_Scalar8Byte,
+ [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
+ };
+
+ return kVarintOps[field->UPB_PRIVATE(descriptortype)];
+}
+
+UPB_FORCEINLINE
+static void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
+ const upb_MiniTableField* field,
+ int* op) {
+ // If sub-message is not linked, treat as unknown.
+ if (field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension) return;
+ const upb_MiniTable* mt_sub =
+ _upb_MiniTableSubs_MessageByField(mt->UPB_PRIVATE(subs), field);
+ if ((d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked) ||
+ !UPB_PRIVATE(_upb_MiniTable_IsEmpty)(mt_sub)) {
+ return;
+ }
+#ifndef NDEBUG
+ const upb_MiniTableField* oneof = upb_MiniTable_GetOneof(mt, field);
+ if (oneof) {
+ // All other members of the oneof must be message fields that are also
+ // unlinked.
+ do {
+ UPB_ASSERT(upb_MiniTableField_CType(oneof) == kUpb_CType_Message);
+ const upb_MiniTableSub* oneof_sub =
+ &mt->UPB_PRIVATE(subs)[oneof->UPB_PRIVATE(submsg_index)];
+ UPB_ASSERT(!oneof_sub);
+ } while (upb_MiniTable_NextOneofField(mt, &oneof));
+ }
+#endif // NDEBUG
+ *op = kUpb_DecodeOp_UnknownField;
+}
+
+int _upb_Decoder_GetDelimitedOp(upb_Decoder* d, const upb_MiniTable* mt,
+ const upb_MiniTableField* field) {
+ enum { kRepeatedBase = 19 };
+
+ static const int8_t kDelimitedOps[] = {
+ /* For non-repeated field type. */
+ [kUpb_FakeFieldType_FieldNotFound] =
+ kUpb_DecodeOp_UnknownField, // Field not found.
+ [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Int64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_UInt64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Int32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Bool] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_String] = kUpb_DecodeOp_String,
+ [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
+ [kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
+ [kUpb_FieldType_UInt32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Enum] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SInt32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SInt64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
+ // For repeated field type. */
+ [kRepeatedBase + kUpb_FieldType_Double] = OP_FIXPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_Float] = OP_FIXPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Int64] = OP_VARPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_UInt64] = OP_VARPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_Int32] = OP_VARPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Fixed64] = OP_FIXPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_Fixed32] = OP_FIXPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Bool] = OP_VARPCK_LG2(0),
+ [kRepeatedBase + kUpb_FieldType_String] = kUpb_DecodeOp_String,
+ [kRepeatedBase + kUpb_FieldType_Group] = kUpb_DecodeOp_SubMessage,
+ [kRepeatedBase + kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
+ [kRepeatedBase + kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
+ [kRepeatedBase + kUpb_FieldType_UInt32] = OP_VARPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Enum] = kUpb_DecodeOp_PackedEnum,
+ [kRepeatedBase + kUpb_FieldType_SFixed32] = OP_FIXPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_SFixed64] = OP_FIXPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_SInt32] = OP_VARPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_SInt64] = OP_VARPCK_LG2(3),
+ // Omitting kUpb_FakeFieldType_MessageSetItem, because we never emit a
+ // repeated msgset type
+ };
+
+ int ndx = field->UPB_PRIVATE(descriptortype);
+ if (upb_MiniTableField_IsArray(field)) ndx += kRepeatedBase;
+ int op = kDelimitedOps[ndx];
+
+ if (op == kUpb_DecodeOp_SubMessage) {
+ _upb_Decoder_CheckUnlinked(d, mt, field, &op);
+ }
+
+ return op;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
+ const upb_MiniTable* mt,
+ const upb_MiniTableField* field,
+ int wire_type, wireval* val,
+ int* op) {
+ static const unsigned kFixed32OkMask = (1 << kUpb_FieldType_Float) |
+ (1 << kUpb_FieldType_Fixed32) |
+ (1 << kUpb_FieldType_SFixed32);
+
+ static const unsigned kFixed64OkMask = (1 << kUpb_FieldType_Double) |
+ (1 << kUpb_FieldType_Fixed64) |
+ (1 << kUpb_FieldType_SFixed64);
+
+ switch (wire_type) {
+ case kUpb_WireType_Varint:
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &val->uint64_val);
+ *op = _upb_Decoder_GetVarintOp(field);
+ _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), val);
+ return ptr;
+ case kUpb_WireType_32Bit:
+ *op = kUpb_DecodeOp_Scalar4Byte;
+ if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed32OkMask) == 0) {
+ *op = kUpb_DecodeOp_UnknownField;
+ }
+ return upb_WireReader_ReadFixed32(ptr, &val->uint32_val);
+ case kUpb_WireType_64Bit:
+ *op = kUpb_DecodeOp_Scalar8Byte;
+ if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed64OkMask) == 0) {
+ *op = kUpb_DecodeOp_UnknownField;
+ }
+ return upb_WireReader_ReadFixed64(ptr, &val->uint64_val);
+ case kUpb_WireType_Delimited:
+ ptr = upb_Decoder_DecodeSize(d, ptr, &val->size);
+ *op = _upb_Decoder_GetDelimitedOp(d, mt, field);
+ return ptr;
+ case kUpb_WireType_StartGroup:
+ val->uint32_val = field->UPB_PRIVATE(number);
+ if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
+ *op = kUpb_DecodeOp_SubMessage;
+ _upb_Decoder_CheckUnlinked(d, mt, field, op);
+ } else if (field->UPB_PRIVATE(descriptortype) ==
+ kUpb_FakeFieldType_MessageSetItem) {
+ *op = kUpb_DecodeOp_MessageSetItem;
+ } else {
+ *op = kUpb_DecodeOp_UnknownField;
+ }
+ return ptr;
+ default:
+ break;
+ }
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeKnownField(
+ upb_Decoder* d, const char* ptr, upb_Message* msg,
+ const upb_MiniTable* layout, const upb_MiniTableField* field, int op,
+ wireval* val) {
+ const upb_MiniTableSub* subs = layout->UPB_PRIVATE(subs);
+ uint8_t mode = field->UPB_PRIVATE(mode);
+
+ if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
+ const upb_MiniTableExtension* ext_layout =
+ (const upb_MiniTableExtension*)field;
+ upb_Extension* ext =
+ _upb_Message_GetOrCreateExtension(msg, ext_layout, &d->arena);
+ if (UPB_UNLIKELY(!ext)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ d->unknown_msg = msg;
+ msg = (upb_Message*)&ext->data;
+ subs = &ext->ext->UPB_PRIVATE(sub);
+ }
+
+ switch (mode & kUpb_FieldMode_Mask) {
+ case kUpb_FieldMode_Array:
+ return _upb_Decoder_DecodeToArray(d, ptr, msg, subs, field, val, op);
+ case kUpb_FieldMode_Map:
+ return _upb_Decoder_DecodeToMap(d, ptr, msg, subs, field, val);
+ case kUpb_FieldMode_Scalar:
+ return _upb_Decoder_DecodeToSubMessage(d, ptr, msg, subs, field, val, op);
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+static const char* _upb_Decoder_ReverseSkipVarint(const char* ptr,
+ uint32_t val) {
+ uint32_t seen = 0;
+ do {
+ ptr--;
+ seen <<= 7;
+ seen |= *ptr & 0x7f;
+ } while (seen != val);
+ return ptr;
+}
+
+static const char* _upb_Decoder_DecodeUnknownField(upb_Decoder* d,
+ const char* ptr,
+ upb_Message* msg,
+ int field_number,
+ int wire_type, wireval val) {
+ if (field_number == 0) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+
+ // Since unknown fields are the uncommon case, we do a little extra work here
+ // to walk backwards through the buffer to find the field start. This frees
+ // up a register in the fast paths (when the field is known), which leads to
+ // significant speedups in benchmarks.
+ const char* start = ptr;
+
+ if (wire_type == kUpb_WireType_Delimited) ptr += val.size;
+ if (msg) {
+ switch (wire_type) {
+ case kUpb_WireType_Varint:
+ case kUpb_WireType_Delimited:
+ start--;
+ while (start[-1] & 0x80) start--;
+ break;
+ case kUpb_WireType_32Bit:
+ start -= 4;
+ break;
+ case kUpb_WireType_64Bit:
+ start -= 8;
+ break;
+ default:
+ break;
+ }
+
+ assert(start == d->debug_valstart);
+ uint32_t tag = ((uint32_t)field_number << 3) | wire_type;
+ start = _upb_Decoder_ReverseSkipVarint(start, tag);
+ assert(start == d->debug_tagstart);
+
+ if (wire_type == kUpb_WireType_StartGroup) {
+ d->unknown = start;
+ d->unknown_msg = msg;
+ ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
+ start = d->unknown;
+ d->unknown = NULL;
+ }
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, start, ptr - start,
+ &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ } else if (wire_type == kUpb_WireType_StartGroup) {
+ ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
+ }
+ return ptr;
+}
+
+UPB_NOINLINE
+static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTable* layout) {
+ int last_field_index = 0;
+
+#if UPB_FASTTABLE
+ // The first time we want to skip fast dispatch, because we may have just been
+ // invoked by the fast parser to handle a case that it bailed on.
+ if (!_upb_Decoder_IsDone(d, &ptr)) goto nofast;
+#endif
+
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ uint32_t tag;
+ const upb_MiniTableField* field;
+ int field_number;
+ int wire_type;
+ wireval val;
+ int op;
+
+ if (_upb_Decoder_TryFastDispatch(d, &ptr, msg, layout)) break;
+
+#if UPB_FASTTABLE
+ nofast:
+#endif
+
+#ifndef NDEBUG
+ d->debug_tagstart = ptr;
+#endif
+
+ UPB_ASSERT(ptr < d->input.limit_ptr);
+ ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
+ field_number = tag >> 3;
+ wire_type = tag & 7;
+
+#ifndef NDEBUG
+ d->debug_valstart = ptr;
+#endif
+
+ if (wire_type == kUpb_WireType_EndGroup) {
+ d->end_group = field_number;
+ return ptr;
+ }
+
+ field = _upb_Decoder_FindField(d, layout, field_number, &last_field_index);
+ ptr = _upb_Decoder_DecodeWireValue(d, ptr, layout, field, wire_type, &val,
+ &op);
+
+ if (op >= 0) {
+ ptr = _upb_Decoder_DecodeKnownField(d, ptr, msg, layout, field, op, &val);
+ } else {
+ switch (op) {
+ case kUpb_DecodeOp_UnknownField:
+ ptr = _upb_Decoder_DecodeUnknownField(d, ptr, msg, field_number,
+ wire_type, val);
+ break;
+ case kUpb_DecodeOp_MessageSetItem:
+ ptr = upb_Decoder_DecodeMessageSetItem(d, ptr, msg, layout);
+ break;
+ }
+ }
+ }
+
+ return UPB_UNLIKELY(layout && layout->UPB_PRIVATE(required_count))
+ ? _upb_Decoder_CheckRequired(d, ptr, msg, layout)
+ : ptr;
+}
+
+const char* _upb_FastDecoder_DecodeGeneric(struct upb_Decoder* d,
+ const char* ptr, upb_Message* msg,
+ intptr_t table, uint64_t hasbits,
+ uint64_t data) {
+ (void)data;
+ *(uint32_t*)msg |= hasbits;
+ return _upb_Decoder_DecodeMessage(d, ptr, msg, decode_totablep(table));
+}
+
+static upb_DecodeStatus _upb_Decoder_DecodeTop(struct upb_Decoder* d,
+ const char* buf, void* msg,
+ const upb_MiniTable* l) {
+ if (!_upb_Decoder_TryFastDispatch(d, &buf, msg, l)) {
+ _upb_Decoder_DecodeMessage(d, buf, msg, l);
+ }
+ if (d->end_group != DECODE_NOGROUP) return kUpb_DecodeStatus_Malformed;
+ if (d->missing_required) return kUpb_DecodeStatus_MissingRequired;
+ return kUpb_DecodeStatus_Ok;
+}
+
+UPB_NOINLINE
+const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
+ const char* ptr, int overrun) {
+ return _upb_EpsCopyInputStream_IsDoneFallbackInline(
+ e, ptr, overrun, _upb_Decoder_BufferFlipCallback);
+}
+
+static upb_DecodeStatus upb_Decoder_Decode(upb_Decoder* const decoder,
+ const char* const buf,
+ void* const msg,
+ const upb_MiniTable* const l,
+ upb_Arena* const arena) {
+ if (UPB_SETJMP(decoder->err) == 0) {
+ decoder->status = _upb_Decoder_DecodeTop(decoder, buf, msg, l);
+ } else {
+ UPB_ASSERT(decoder->status != kUpb_DecodeStatus_Ok);
+ }
+
+ UPB_PRIVATE(_upb_Arena_SwapOut)(arena, &decoder->arena);
+
+ return decoder->status;
+}
+
+upb_DecodeStatus upb_Decode(const char* buf, size_t size, upb_Message* msg,
+ const upb_MiniTable* l,
+ const upb_ExtensionRegistry* extreg, int options,
+ upb_Arena* arena) {
+ upb_Decoder decoder;
+ unsigned depth = (unsigned)options >> 16;
+
+ upb_EpsCopyInputStream_Init(&decoder.input, &buf, size,
+ options & kUpb_DecodeOption_AliasString);
+
+ decoder.extreg = extreg;
+ decoder.unknown = NULL;
+ decoder.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
+ decoder.end_group = DECODE_NOGROUP;
+ decoder.options = (uint16_t)options;
+ decoder.missing_required = false;
+ decoder.status = kUpb_DecodeStatus_Ok;
+
+ // Violating the encapsulation of the arena for performance reasons.
+ // This is a temporary arena that we swap into and swap out of when we are
+ // done. The temporary arena only needs to be able to handle allocation,
+ // not fuse or free, so it does not need many of the members to be initialized
+ // (particularly parent_or_count).
+ UPB_PRIVATE(_upb_Arena_SwapIn)(&decoder.arena, arena);
+
+ return upb_Decoder_Decode(&decoder, buf, msg, l, arena);
+}
+
+#undef OP_FIXPCK_LG2
+#undef OP_VARPCK_LG2
+
+// We encode backwards, to avoid pre-computing lengths (one-pass encode).
+
+
+#include <setjmp.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+#define UPB_PB_VARINT_MAX_LEN 10
+
+UPB_NOINLINE
+static size_t encode_varint64(uint64_t val, char* buf) {
+ size_t i = 0;
+ do {
+ uint8_t byte = val & 0x7fU;
+ val >>= 7;
+ if (val) byte |= 0x80U;
+ buf[i++] = byte;
+ } while (val);
+ return i;
+}
+
+static uint32_t encode_zz32(int32_t n) {
+ return ((uint32_t)n << 1) ^ (n >> 31);
+}
+static uint64_t encode_zz64(int64_t n) {
+ return ((uint64_t)n << 1) ^ (n >> 63);
+}
+
+typedef struct {
+ upb_EncodeStatus status;
+ jmp_buf err;
+ upb_Arena* arena;
+ char *buf, *ptr, *limit;
+ int options;
+ int depth;
+ _upb_mapsorter sorter;
+} upb_encstate;
+
+static size_t upb_roundup_pow2(size_t bytes) {
+ size_t ret = 128;
+ while (ret < bytes) {
+ ret *= 2;
+ }
+ return ret;
+}
+
+UPB_NORETURN static void encode_err(upb_encstate* e, upb_EncodeStatus s) {
+ UPB_ASSERT(s != kUpb_EncodeStatus_Ok);
+ e->status = s;
+ UPB_LONGJMP(e->err, 1);
+}
+
+UPB_NOINLINE
+static void encode_growbuffer(upb_encstate* e, size_t bytes) {
+ size_t old_size = e->limit - e->buf;
+ size_t new_size = upb_roundup_pow2(bytes + (e->limit - e->ptr));
+ char* new_buf = upb_Arena_Realloc(e->arena, e->buf, old_size, new_size);
+
+ if (!new_buf) encode_err(e, kUpb_EncodeStatus_OutOfMemory);
+
+ // We want previous data at the end, realloc() put it at the beginning.
+ // TODO: This is somewhat inefficient since we are copying twice.
+ // Maybe create a realloc() that copies to the end of the new buffer?
+ if (old_size > 0) {
+ memmove(new_buf + new_size - old_size, e->buf, old_size);
+ }
+
+ e->ptr = new_buf + new_size - (e->limit - e->ptr);
+ e->limit = new_buf + new_size;
+ e->buf = new_buf;
+
+ e->ptr -= bytes;
+}
+
+/* Call to ensure that at least "bytes" bytes are available for writing at
+ * e->ptr. Returns false if the bytes could not be allocated. */
+UPB_FORCEINLINE
+static void encode_reserve(upb_encstate* e, size_t bytes) {
+ if ((size_t)(e->ptr - e->buf) < bytes) {
+ encode_growbuffer(e, bytes);
+ return;
+ }
+
+ e->ptr -= bytes;
+}
+
+/* Writes the given bytes to the buffer, handling reserve/advance. */
+static void encode_bytes(upb_encstate* e, const void* data, size_t len) {
+ if (len == 0) return; /* memcpy() with zero size is UB */
+ encode_reserve(e, len);
+ memcpy(e->ptr, data, len);
+}
+
+static void encode_fixed64(upb_encstate* e, uint64_t val) {
+ val = upb_BigEndian64(val);
+ encode_bytes(e, &val, sizeof(uint64_t));
+}
+
+static void encode_fixed32(upb_encstate* e, uint32_t val) {
+ val = upb_BigEndian32(val);
+ encode_bytes(e, &val, sizeof(uint32_t));
+}
+
+UPB_NOINLINE
+static void encode_longvarint(upb_encstate* e, uint64_t val) {
+ size_t len;
+ char* start;
+
+ encode_reserve(e, UPB_PB_VARINT_MAX_LEN);
+ len = encode_varint64(val, e->ptr);
+ start = e->ptr + UPB_PB_VARINT_MAX_LEN - len;
+ memmove(start, e->ptr, len);
+ e->ptr = start;
+}
+
+UPB_FORCEINLINE
+static void encode_varint(upb_encstate* e, uint64_t val) {
+ if (val < 128 && e->ptr != e->buf) {
+ --e->ptr;
+ *e->ptr = val;
+ } else {
+ encode_longvarint(e, val);
+ }
+}
+
+static void encode_double(upb_encstate* e, double d) {
+ uint64_t u64;
+ UPB_ASSERT(sizeof(double) == sizeof(uint64_t));
+ memcpy(&u64, &d, sizeof(uint64_t));
+ encode_fixed64(e, u64);
+}
+
+static void encode_float(upb_encstate* e, float d) {
+ uint32_t u32;
+ UPB_ASSERT(sizeof(float) == sizeof(uint32_t));
+ memcpy(&u32, &d, sizeof(uint32_t));
+ encode_fixed32(e, u32);
+}
+
+static void encode_tag(upb_encstate* e, uint32_t field_number,
+ uint8_t wire_type) {
+ encode_varint(e, (field_number << 3) | wire_type);
+}
+
+static void encode_fixedarray(upb_encstate* e, const upb_Array* arr,
+ size_t elem_size, uint32_t tag) {
+ size_t bytes = arr->UPB_PRIVATE(size) * elem_size;
+ const char* data = _upb_array_constptr(arr);
+ const char* ptr = data + bytes - elem_size;
+
+ if (tag || !upb_IsLittleEndian()) {
+ while (true) {
+ if (elem_size == 4) {
+ uint32_t val;
+ memcpy(&val, ptr, sizeof(val));
+ val = upb_BigEndian32(val);
+ encode_bytes(e, &val, elem_size);
+ } else {
+ UPB_ASSERT(elem_size == 8);
+ uint64_t val;
+ memcpy(&val, ptr, sizeof(val));
+ val = upb_BigEndian64(val);
+ encode_bytes(e, &val, elem_size);
+ }
+
+ if (tag) encode_varint(e, tag);
+ if (ptr == data) break;
+ ptr -= elem_size;
+ }
+ } else {
+ encode_bytes(e, data, bytes);
+ }
+}
+
+static void encode_message(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTable* m, size_t* size);
+
+static void encode_TaggedMessagePtr(upb_encstate* e,
+ upb_TaggedMessagePtr tagged,
+ const upb_MiniTable* m, size_t* size) {
+ if (upb_TaggedMessagePtr_IsEmpty(tagged)) {
+ m = UPB_PRIVATE(_upb_MiniTable_Empty)();
+ }
+ encode_message(e, UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged), m,
+ size);
+}
+
+static void encode_scalar(upb_encstate* e, const void* _field_mem,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ const char* field_mem = _field_mem;
+ int wire_type;
+
+#define CASE(ctype, type, wtype, encodeval) \
+ { \
+ ctype val = *(ctype*)field_mem; \
+ encode_##type(e, encodeval); \
+ wire_type = wtype; \
+ break; \
+ }
+
+ switch (f->UPB_PRIVATE(descriptortype)) {
+ case kUpb_FieldType_Double:
+ CASE(double, double, kUpb_WireType_64Bit, val);
+ case kUpb_FieldType_Float:
+ CASE(float, float, kUpb_WireType_32Bit, val);
+ case kUpb_FieldType_Int64:
+ case kUpb_FieldType_UInt64:
+ CASE(uint64_t, varint, kUpb_WireType_Varint, val);
+ case kUpb_FieldType_UInt32:
+ CASE(uint32_t, varint, kUpb_WireType_Varint, val);
+ case kUpb_FieldType_Int32:
+ case kUpb_FieldType_Enum:
+ CASE(int32_t, varint, kUpb_WireType_Varint, (int64_t)val);
+ case kUpb_FieldType_SFixed64:
+ case kUpb_FieldType_Fixed64:
+ CASE(uint64_t, fixed64, kUpb_WireType_64Bit, val);
+ case kUpb_FieldType_Fixed32:
+ case kUpb_FieldType_SFixed32:
+ CASE(uint32_t, fixed32, kUpb_WireType_32Bit, val);
+ case kUpb_FieldType_Bool:
+ CASE(bool, varint, kUpb_WireType_Varint, val);
+ case kUpb_FieldType_SInt32:
+ CASE(int32_t, varint, kUpb_WireType_Varint, encode_zz32(val));
+ case kUpb_FieldType_SInt64:
+ CASE(int64_t, varint, kUpb_WireType_Varint, encode_zz64(val));
+ case kUpb_FieldType_String:
+ case kUpb_FieldType_Bytes: {
+ upb_StringView view = *(upb_StringView*)field_mem;
+ encode_bytes(e, view.data, view.size);
+ encode_varint(e, view.size);
+ wire_type = kUpb_WireType_Delimited;
+ break;
+ }
+ case kUpb_FieldType_Group: {
+ size_t size;
+ upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (submsg == 0) {
+ return;
+ }
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_EndGroup);
+ encode_TaggedMessagePtr(e, submsg, subm, &size);
+ wire_type = kUpb_WireType_StartGroup;
+ e->depth++;
+ break;
+ }
+ case kUpb_FieldType_Message: {
+ size_t size;
+ upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (submsg == 0) {
+ return;
+ }
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ encode_TaggedMessagePtr(e, submsg, subm, &size);
+ encode_varint(e, size);
+ wire_type = kUpb_WireType_Delimited;
+ e->depth++;
+ break;
+ }
+ default:
+ UPB_UNREACHABLE();
+ }
+#undef CASE
+
+ encode_tag(e, f->UPB_PRIVATE(number), wire_type);
+}
+
+static void encode_array(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ const upb_Array* arr = *UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), upb_Array*);
+ bool packed = upb_MiniTableField_IsPacked(f);
+ size_t pre_len = e->limit - e->ptr;
+
+ if (arr == NULL || arr->UPB_PRIVATE(size) == 0) {
+ return;
+ }
+
+#define VARINT_CASE(ctype, encode) \
+ { \
+ const ctype* start = _upb_array_constptr(arr); \
+ const ctype* ptr = start + arr->UPB_PRIVATE(size); \
+ uint32_t tag = \
+ packed ? 0 : (f->UPB_PRIVATE(number) << 3) | kUpb_WireType_Varint; \
+ do { \
+ ptr--; \
+ encode_varint(e, encode); \
+ if (tag) encode_varint(e, tag); \
+ } while (ptr != start); \
+ } \
+ break;
+
+#define TAG(wire_type) (packed ? 0 : (f->UPB_PRIVATE(number) << 3 | wire_type))
+
+ switch (f->UPB_PRIVATE(descriptortype)) {
+ case kUpb_FieldType_Double:
+ encode_fixedarray(e, arr, sizeof(double), TAG(kUpb_WireType_64Bit));
+ break;
+ case kUpb_FieldType_Float:
+ encode_fixedarray(e, arr, sizeof(float), TAG(kUpb_WireType_32Bit));
+ break;
+ case kUpb_FieldType_SFixed64:
+ case kUpb_FieldType_Fixed64:
+ encode_fixedarray(e, arr, sizeof(uint64_t), TAG(kUpb_WireType_64Bit));
+ break;
+ case kUpb_FieldType_Fixed32:
+ case kUpb_FieldType_SFixed32:
+ encode_fixedarray(e, arr, sizeof(uint32_t), TAG(kUpb_WireType_32Bit));
+ break;
+ case kUpb_FieldType_Int64:
+ case kUpb_FieldType_UInt64:
+ VARINT_CASE(uint64_t, *ptr);
+ case kUpb_FieldType_UInt32:
+ VARINT_CASE(uint32_t, *ptr);
+ case kUpb_FieldType_Int32:
+ case kUpb_FieldType_Enum:
+ VARINT_CASE(int32_t, (int64_t)*ptr);
+ case kUpb_FieldType_Bool:
+ VARINT_CASE(bool, *ptr);
+ case kUpb_FieldType_SInt32:
+ VARINT_CASE(int32_t, encode_zz32(*ptr));
+ case kUpb_FieldType_SInt64:
+ VARINT_CASE(int64_t, encode_zz64(*ptr));
+ case kUpb_FieldType_String:
+ case kUpb_FieldType_Bytes: {
+ const upb_StringView* start = _upb_array_constptr(arr);
+ const upb_StringView* ptr = start + arr->UPB_PRIVATE(size);
+ do {
+ ptr--;
+ encode_bytes(e, ptr->data, ptr->size);
+ encode_varint(e, ptr->size);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
+ } while (ptr != start);
+ return;
+ }
+ case kUpb_FieldType_Group: {
+ const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
+ const upb_TaggedMessagePtr* ptr = start + arr->UPB_PRIVATE(size);
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ do {
+ size_t size;
+ ptr--;
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_EndGroup);
+ encode_TaggedMessagePtr(e, *ptr, subm, &size);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_StartGroup);
+ } while (ptr != start);
+ e->depth++;
+ return;
+ }
+ case kUpb_FieldType_Message: {
+ const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
+ const upb_TaggedMessagePtr* ptr = start + arr->UPB_PRIVATE(size);
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ do {
+ size_t size;
+ ptr--;
+ encode_TaggedMessagePtr(e, *ptr, subm, &size);
+ encode_varint(e, size);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
+ } while (ptr != start);
+ e->depth++;
+ return;
+ }
+ }
+#undef VARINT_CASE
+
+ if (packed) {
+ encode_varint(e, e->limit - e->ptr - pre_len);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
+ }
+}
+
+static void encode_mapentry(upb_encstate* e, uint32_t number,
+ const upb_MiniTable* layout,
+ const upb_MapEntry* ent) {
+ const upb_MiniTableField* key_field = &layout->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* val_field = &layout->UPB_PRIVATE(fields)[1];
+ size_t pre_len = e->limit - e->ptr;
+ size_t size;
+ encode_scalar(e, &ent->data.v, layout->UPB_PRIVATE(subs), val_field);
+ encode_scalar(e, &ent->data.k, layout->UPB_PRIVATE(subs), key_field);
+ size = (e->limit - e->ptr) - pre_len;
+ encode_varint(e, size);
+ encode_tag(e, number, kUpb_WireType_Delimited);
+}
+
+static void encode_map(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ const upb_Map* map = *UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), const upb_Map*);
+ const upb_MiniTable* layout =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(layout->UPB_PRIVATE(field_count) == 2);
+
+ if (map == NULL) return;
+
+ if (e->options & kUpb_EncodeOption_Deterministic) {
+ _upb_sortedmap sorted;
+ _upb_mapsorter_pushmap(
+ &e->sorter, layout->UPB_PRIVATE(fields)[0].UPB_PRIVATE(descriptortype),
+ map, &sorted);
+ upb_MapEntry ent;
+ while (_upb_sortedmap_next(&e->sorter, map, &sorted, &ent)) {
+ encode_mapentry(e, f->UPB_PRIVATE(number), layout, &ent);
+ }
+ _upb_mapsorter_popmap(&e->sorter, &sorted);
+ } else {
+ intptr_t iter = UPB_STRTABLE_BEGIN;
+ upb_StringView key;
+ upb_value val;
+ while (upb_strtable_next2(&map->table, &key, &val, &iter)) {
+ upb_MapEntry ent;
+ _upb_map_fromkey(key, &ent.data.k, map->key_size);
+ _upb_map_fromvalue(val, &ent.data.v, map->val_size);
+ encode_mapentry(e, f->UPB_PRIVATE(number), layout, &ent);
+ }
+ }
+}
+
+static bool encode_shouldencode(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ if (f->presence == 0) {
+ // Proto3 presence or map/array.
+ const void* mem = UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), void);
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte: {
+ char ch;
+ memcpy(&ch, mem, 1);
+ return ch != 0;
+ }
+ case kUpb_FieldRep_4Byte: {
+ uint32_t u32;
+ memcpy(&u32, mem, 4);
+ return u32 != 0;
+ }
+ case kUpb_FieldRep_8Byte: {
+ uint64_t u64;
+ memcpy(&u64, mem, 8);
+ return u64 != 0;
+ }
+ case kUpb_FieldRep_StringView: {
+ const upb_StringView* str = (const upb_StringView*)mem;
+ return str->size != 0;
+ }
+ default:
+ UPB_UNREACHABLE();
+ }
+ } else if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ // Proto2 presence: hasbit.
+ return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, f);
+ } else {
+ // Field is in a oneof.
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, f) ==
+ f->UPB_PRIVATE(number);
+ }
+}
+
+static void encode_field(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(field)) {
+ case kUpb_FieldMode_Array:
+ encode_array(e, msg, subs, field);
+ break;
+ case kUpb_FieldMode_Map:
+ encode_map(e, msg, subs, field);
+ break;
+ case kUpb_FieldMode_Scalar:
+ encode_scalar(e, UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void), subs,
+ field);
+ break;
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+static void encode_msgset_item(upb_encstate* e, const upb_Extension* ext) {
+ size_t size;
+ encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_EndGroup);
+ encode_message(e, ext->data.ptr,
+ upb_MiniTableExtension_GetSubMessage(ext->ext), &size);
+ encode_varint(e, size);
+ encode_tag(e, kUpb_MsgSet_Message, kUpb_WireType_Delimited);
+ encode_varint(e, upb_MiniTableExtension_Number(ext->ext));
+ encode_tag(e, kUpb_MsgSet_TypeId, kUpb_WireType_Varint);
+ encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_StartGroup);
+}
+
+static void encode_ext(upb_encstate* e, const upb_Extension* ext,
+ bool is_message_set) {
+ if (UPB_UNLIKELY(is_message_set)) {
+ encode_msgset_item(e, ext);
+ } else {
+ encode_field(e, (upb_Message*)&ext->data, &ext->ext->UPB_PRIVATE(sub),
+ &ext->ext->UPB_PRIVATE(field));
+ }
+}
+
+static void encode_message(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTable* m, size_t* size) {
+ size_t pre_len = e->limit - e->ptr;
+
+ if ((e->options & kUpb_EncodeOption_CheckRequired) &&
+ m->UPB_PRIVATE(required_count)) {
+ uint64_t msg_head;
+ memcpy(&msg_head, msg, 8);
+ msg_head = upb_BigEndian64(msg_head);
+ if (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~msg_head) {
+ encode_err(e, kUpb_EncodeStatus_MissingRequired);
+ }
+ }
+
+ if ((e->options & kUpb_EncodeOption_SkipUnknown) == 0) {
+ size_t unknown_size;
+ const char* unknown = upb_Message_GetUnknown(msg, &unknown_size);
+
+ if (unknown) {
+ encode_bytes(e, unknown, unknown_size);
+ }
+ }
+
+ if (m->UPB_PRIVATE(ext) != kUpb_ExtMode_NonExtendable) {
+ /* Encode all extensions together. Unlike C++, we do not attempt to keep
+ * these in field number order relative to normal fields or even to each
+ * other. */
+ size_t ext_count;
+ const upb_Extension* ext =
+ UPB_PRIVATE(_upb_Message_Getexts)(msg, &ext_count);
+ if (ext_count) {
+ if (e->options & kUpb_EncodeOption_Deterministic) {
+ _upb_sortedmap sorted;
+ _upb_mapsorter_pushexts(&e->sorter, ext, ext_count, &sorted);
+ while (_upb_sortedmap_nextext(&e->sorter, &sorted, &ext)) {
+ encode_ext(e, ext, m->UPB_PRIVATE(ext) == kUpb_ExtMode_IsMessageSet);
+ }
+ _upb_mapsorter_popmap(&e->sorter, &sorted);
+ } else {
+ const upb_Extension* end = ext + ext_count;
+ for (; ext != end; ext++) {
+ encode_ext(e, ext, m->UPB_PRIVATE(ext) == kUpb_ExtMode_IsMessageSet);
+ }
+ }
+ }
+ }
+
+ if (m->UPB_PRIVATE(field_count)) {
+ const upb_MiniTableField* f =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ const upb_MiniTableField* first = &m->UPB_PRIVATE(fields)[0];
+ while (f != first) {
+ f--;
+ if (encode_shouldencode(e, msg, m->UPB_PRIVATE(subs), f)) {
+ encode_field(e, msg, m->UPB_PRIVATE(subs), f);
+ }
+ }
+ }
+
+ *size = (e->limit - e->ptr) - pre_len;
+}
+
+static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
+ const upb_Message* const msg,
+ const upb_MiniTable* const l,
+ char** const buf,
+ size_t* const size) {
+ // Unfortunately we must continue to perform hackery here because there are
+ // code paths which blindly copy the returned pointer without bothering to
+ // check for errors until much later (b/235839510). So we still set *buf to
+ // NULL on error and we still set it to non-NULL on a successful empty result.
+ if (UPB_SETJMP(encoder->err) == 0) {
+ encode_message(encoder, msg, l, size);
+ *size = encoder->limit - encoder->ptr;
+ if (*size == 0) {
+ static char ch;
+ *buf = &ch;
+ } else {
+ UPB_ASSERT(encoder->ptr);
+ *buf = encoder->ptr;
+ }
+ } else {
+ UPB_ASSERT(encoder->status != kUpb_EncodeStatus_Ok);
+ *buf = NULL;
+ *size = 0;
+ }
+
+ _upb_mapsorter_destroy(&encoder->sorter);
+ return encoder->status;
+}
+
+upb_EncodeStatus upb_Encode(const upb_Message* msg, const upb_MiniTable* l,
+ int options, upb_Arena* arena, char** buf,
+ size_t* size) {
+ upb_encstate e;
+ unsigned depth = (unsigned)options >> 16;
+
+ e.status = kUpb_EncodeStatus_Ok;
+ e.arena = arena;
+ e.buf = NULL;
+ e.limit = NULL;
+ e.ptr = NULL;
+ e.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
+ e.options = options;
+ _upb_mapsorter_init(&e.sorter);
+
+ return upb_Encoder_Encode(&e, msg, l, buf, size);
+}
+
+// Fast decoder: ~3x the speed of decode.c, but requires x86-64/ARM64.
+// Also the table size grows by 2x.
+//
+// Could potentially be ported to other 64-bit archs that pass at least six
+// arguments in registers and have 8 unused high bits in pointers.
+//
+// The overall design is to create specialized functions for every possible
+// field type (eg. oneof boolean field with a 1 byte tag) and then dispatch
+// to the specialized function as quickly as possible.
+
+
+
+// Must be last.
+
+#if UPB_FASTTABLE
+
+// The standard set of arguments passed to each parsing function.
+// Thanks to x86-64 calling conventions, these will stay in registers.
+#define UPB_PARSE_PARAMS \
+ upb_Decoder *d, const char *ptr, upb_Message *msg, intptr_t table, \
+ uint64_t hasbits, uint64_t data
+
+#define UPB_PARSE_ARGS d, ptr, msg, table, hasbits, data
+
+#define RETURN_GENERIC(m) \
+ /* Uncomment either of these for debugging purposes. */ \
+ /* fprintf(stderr, m); */ \
+ /*__builtin_trap(); */ \
+ return _upb_FastDecoder_DecodeGeneric(d, ptr, msg, table, hasbits, 0);
+
+typedef enum {
+ CARD_s = 0, /* Singular (optional, non-repeated) */
+ CARD_o = 1, /* Oneof */
+ CARD_r = 2, /* Repeated */
+ CARD_p = 3 /* Packed Repeated */
+} upb_card;
+
+UPB_NOINLINE
+static const char* fastdecode_isdonefallback(UPB_PARSE_PARAMS) {
+ int overrun = data;
+ ptr = _upb_EpsCopyInputStream_IsDoneFallbackInline(
+ &d->input, ptr, overrun, _upb_Decoder_BufferFlipCallback);
+ data = _upb_FastDecoder_LoadTag(ptr);
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_dispatch(UPB_PARSE_PARAMS) {
+ int overrun;
+ switch (upb_EpsCopyInputStream_IsDoneStatus(&d->input, ptr, &overrun)) {
+ case kUpb_IsDoneStatus_Done:
+ *(uint32_t*)msg |= hasbits; // Sync hasbits.
+ const upb_MiniTable* m = decode_totablep(table);
+ return UPB_UNLIKELY(m->UPB_PRIVATE(required_count))
+ ? _upb_Decoder_CheckRequired(d, ptr, msg, m)
+ : ptr;
+ case kUpb_IsDoneStatus_NotDone:
+ break;
+ case kUpb_IsDoneStatus_NeedFallback:
+ data = overrun;
+ UPB_MUSTTAIL return fastdecode_isdonefallback(UPB_PARSE_ARGS);
+ }
+
+ // Read two bytes of tag data (for a one-byte tag, the high byte is junk).
+ data = _upb_FastDecoder_LoadTag(ptr);
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
+}
+
+UPB_FORCEINLINE
+static bool fastdecode_checktag(uint16_t data, int tagbytes) {
+ if (tagbytes == 1) {
+ return (data & 0xff) == 0;
+ } else {
+ return data == 0;
+ }
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_longsize(const char* ptr, int* size) {
+ int i;
+ UPB_ASSERT(*size & 0x80);
+ *size &= 0xff;
+ for (i = 0; i < 3; i++) {
+ ptr++;
+ size_t byte = (uint8_t)ptr[-1];
+ *size += (byte - 1) << (7 + 7 * i);
+ if (UPB_LIKELY((byte & 0x80) == 0)) return ptr;
+ }
+ ptr++;
+ size_t byte = (uint8_t)ptr[-1];
+ // len is limited by 2gb not 4gb, hence 8 and not 16 as normally expected
+ // for a 32 bit varint.
+ if (UPB_UNLIKELY(byte >= 8)) return NULL;
+ *size += (byte - 1) << 28;
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_delimited(
+ upb_Decoder* d, const char* ptr,
+ upb_EpsCopyInputStream_ParseDelimitedFunc* func, void* ctx) {
+ ptr++;
+
+ // Sign-extend so varint greater than one byte becomes negative, causing
+ // fast delimited parse to fail.
+ int len = (int8_t)ptr[-1];
+
+ if (!upb_EpsCopyInputStream_TryParseDelimitedFast(&d->input, &ptr, len, func,
+ ctx)) {
+ // Slow case: Sub-message is >=128 bytes and/or exceeds the current buffer.
+ // If it exceeds the buffer limit, limit/limit_ptr will change during
+ // sub-message parsing, so we need to preserve delta, not limit.
+ if (UPB_UNLIKELY(len & 0x80)) {
+ // Size varint >1 byte (length >= 128).
+ ptr = fastdecode_longsize(ptr, &len);
+ if (!ptr) {
+ // Corrupt wire format: size exceeded INT_MAX.
+ return NULL;
+ }
+ }
+ if (!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, len)) {
+ // Corrupt wire format: invalid limit.
+ return NULL;
+ }
+ int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, len);
+ ptr = func(&d->input, ptr, ctx);
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
+ }
+ return ptr;
+}
+
+/* singular, oneof, repeated field handling ***********************************/
+
+typedef struct {
+ upb_Array* arr;
+ void* end;
+} fastdecode_arr;
+
+typedef enum {
+ FD_NEXT_ATLIMIT,
+ FD_NEXT_SAMEFIELD,
+ FD_NEXT_OTHERFIELD
+} fastdecode_next;
+
+typedef struct {
+ void* dst;
+ fastdecode_next next;
+ uint32_t tag;
+} fastdecode_nextret;
+
+UPB_FORCEINLINE
+static void* fastdecode_resizearr(upb_Decoder* d, void* dst,
+ fastdecode_arr* farr, int valbytes) {
+ if (UPB_UNLIKELY(dst == farr->end)) {
+ size_t old_capacity = farr->arr->UPB_PRIVATE(capacity);
+ size_t old_bytes = old_capacity * valbytes;
+ size_t new_capacity = old_capacity * 2;
+ size_t new_bytes = new_capacity * valbytes;
+ char* old_ptr = _upb_array_ptr(farr->arr);
+ char* new_ptr = upb_Arena_Realloc(&d->arena, old_ptr, old_bytes, new_bytes);
+ uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)(farr->arr, new_ptr, elem_size_lg2);
+ farr->arr->UPB_PRIVATE(capacity) = new_capacity;
+ dst = (void*)(new_ptr + (old_capacity * valbytes));
+ farr->end = (void*)(new_ptr + (new_capacity * valbytes));
+ }
+ return dst;
+}
+
+UPB_FORCEINLINE
+static bool fastdecode_tagmatch(uint32_t tag, uint64_t data, int tagbytes) {
+ if (tagbytes == 1) {
+ return (uint8_t)tag == (uint8_t)data;
+ } else {
+ return (uint16_t)tag == (uint16_t)data;
+ }
+}
+
+UPB_FORCEINLINE
+static void fastdecode_commitarr(void* dst, fastdecode_arr* farr,
+ int valbytes) {
+ farr->arr->UPB_PRIVATE(size) =
+ (size_t)((char*)dst - (char*)_upb_array_ptr(farr->arr)) / valbytes;
+}
+
+UPB_FORCEINLINE
+static fastdecode_nextret fastdecode_nextrepeated(upb_Decoder* d, void* dst,
+ const char** ptr,
+ fastdecode_arr* farr,
+ uint64_t data, int tagbytes,
+ int valbytes) {
+ fastdecode_nextret ret;
+ dst = (char*)dst + valbytes;
+
+ if (UPB_LIKELY(!_upb_Decoder_IsDone(d, ptr))) {
+ ret.tag = _upb_FastDecoder_LoadTag(*ptr);
+ if (fastdecode_tagmatch(ret.tag, data, tagbytes)) {
+ ret.next = FD_NEXT_SAMEFIELD;
+ } else {
+ fastdecode_commitarr(dst, farr, valbytes);
+ ret.next = FD_NEXT_OTHERFIELD;
+ }
+ } else {
+ fastdecode_commitarr(dst, farr, valbytes);
+ ret.next = FD_NEXT_ATLIMIT;
+ }
+
+ ret.dst = dst;
+ return ret;
+}
+
+UPB_FORCEINLINE
+static void* fastdecode_fieldmem(upb_Message* msg, uint64_t data) {
+ size_t ofs = data >> 48;
+ return (char*)msg + ofs;
+}
+
+UPB_FORCEINLINE
+static void* fastdecode_getfield(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, uint64_t* data,
+ uint64_t* hasbits, fastdecode_arr* farr,
+ int valbytes, upb_card card) {
+ switch (card) {
+ case CARD_s: {
+ uint8_t hasbit_index = *data >> 24;
+ // Set hasbit and return pointer to scalar field.
+ *hasbits |= 1ull << hasbit_index;
+ return fastdecode_fieldmem(msg, *data);
+ }
+ case CARD_o: {
+ uint16_t case_ofs = *data >> 32;
+ uint32_t* oneof_case = UPB_PTR_AT(msg, case_ofs, uint32_t);
+ uint8_t field_number = *data >> 24;
+ *oneof_case = field_number;
+ return fastdecode_fieldmem(msg, *data);
+ }
+ case CARD_r: {
+ // Get pointer to upb_Array and allocate/expand if necessary.
+ uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
+ upb_Array** arr_p = fastdecode_fieldmem(msg, *data);
+ char* begin;
+ *(uint32_t*)msg |= *hasbits;
+ *hasbits = 0;
+ if (UPB_LIKELY(!*arr_p)) {
+ farr->arr = UPB_PRIVATE(_upb_Array_New)(&d->arena, 8, elem_size_lg2);
+ *arr_p = farr->arr;
+ } else {
+ farr->arr = *arr_p;
+ }
+ begin = _upb_array_ptr(farr->arr);
+ farr->end = begin + (farr->arr->UPB_PRIVATE(capacity) * valbytes);
+ *data = _upb_FastDecoder_LoadTag(ptr);
+ return begin + (farr->arr->UPB_PRIVATE(size) * valbytes);
+ }
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+UPB_FORCEINLINE
+static bool fastdecode_flippacked(uint64_t* data, int tagbytes) {
+ *data ^= (0x2 ^ 0x0); // Patch data to match packed wiretype.
+ return fastdecode_checktag(*data, tagbytes);
+}
+
+#define FASTDECODE_CHECKPACKED(tagbytes, card, func) \
+ if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
+ if (card == CARD_r && fastdecode_flippacked(&data, tagbytes)) { \
+ UPB_MUSTTAIL return func(UPB_PARSE_ARGS); \
+ } \
+ RETURN_GENERIC("packed check tag mismatch\n"); \
+ }
+
+/* varint fields **************************************************************/
+
+UPB_FORCEINLINE
+static uint64_t fastdecode_munge(uint64_t val, int valbytes, bool zigzag) {
+ if (valbytes == 1) {
+ return val != 0;
+ } else if (zigzag) {
+ if (valbytes == 4) {
+ uint32_t n = val;
+ return (n >> 1) ^ -(int32_t)(n & 1);
+ } else if (valbytes == 8) {
+ return (val >> 1) ^ -(int64_t)(val & 1);
+ }
+ UPB_UNREACHABLE();
+ }
+ return val;
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_varint64(const char* ptr, uint64_t* val) {
+ ptr++;
+ *val = (uint8_t)ptr[-1];
+ if (UPB_UNLIKELY(*val & 0x80)) {
+ int i;
+ for (i = 0; i < 8; i++) {
+ ptr++;
+ uint64_t byte = (uint8_t)ptr[-1];
+ *val += (byte - 1) << (7 + 7 * i);
+ if (UPB_LIKELY((byte & 0x80) == 0)) goto done;
+ }
+ ptr++;
+ uint64_t byte = (uint8_t)ptr[-1];
+ if (byte > 1) {
+ return NULL;
+ }
+ *val += (byte - 1) << 63;
+ }
+done:
+ UPB_ASSUME(ptr != NULL);
+ return ptr;
+}
+
+#define FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, zigzag, packed) \
+ uint64_t val; \
+ void* dst; \
+ fastdecode_arr farr; \
+ \
+ FASTDECODE_CHECKPACKED(tagbytes, card, packed); \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
+ card); \
+ if (card == CARD_r) { \
+ if (UPB_UNLIKELY(!dst)) { \
+ RETURN_GENERIC("need array resize\n"); \
+ } \
+ } \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
+ } \
+ \
+ ptr += tagbytes; \
+ ptr = fastdecode_varint64(ptr, &val); \
+ if (ptr == NULL) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ val = fastdecode_munge(val, valbytes, zigzag); \
+ memcpy(dst, &val, valbytes); \
+ \
+ if (card == CARD_r) { \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, valbytes); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+typedef struct {
+ uint8_t valbytes;
+ bool zigzag;
+ void* dst;
+ fastdecode_arr farr;
+} fastdecode_varintdata;
+
+UPB_FORCEINLINE
+static const char* fastdecode_topackedvarint(upb_EpsCopyInputStream* e,
+ const char* ptr, void* ctx) {
+ upb_Decoder* d = (upb_Decoder*)e;
+ fastdecode_varintdata* data = ctx;
+ void* dst = data->dst;
+ uint64_t val;
+
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ dst = fastdecode_resizearr(d, dst, &data->farr, data->valbytes);
+ ptr = fastdecode_varint64(ptr, &val);
+ if (ptr == NULL) return NULL;
+ val = fastdecode_munge(val, data->valbytes, data->zigzag);
+ memcpy(dst, &val, data->valbytes);
+ dst = (char*)dst + data->valbytes;
+ }
+
+ fastdecode_commitarr(dst, &data->farr, data->valbytes);
+ return ptr;
+}
+
+#define FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, zigzag, unpacked) \
+ fastdecode_varintdata ctx = {valbytes, zigzag}; \
+ \
+ FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked); \
+ \
+ ctx.dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &ctx.farr, \
+ valbytes, CARD_r); \
+ if (UPB_UNLIKELY(!ctx.dst)) { \
+ RETURN_GENERIC("need array resize\n"); \
+ } \
+ \
+ ptr += tagbytes; \
+ ptr = fastdecode_delimited(d, ptr, &fastdecode_topackedvarint, &ctx); \
+ \
+ if (UPB_UNLIKELY(ptr == NULL)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(d, ptr, msg, table, hasbits, 0);
+
+#define FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, zigzag, unpacked, packed) \
+ if (card == CARD_p) { \
+ FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, zigzag, unpacked); \
+ } else { \
+ FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, zigzag, packed); \
+ }
+
+#define z_ZZ true
+#define b_ZZ false
+#define v_ZZ false
+
+/* Generate all combinations:
+ * {s,o,r,p} x {b1,v4,z4,v8,z8} x {1bt,2bt} */
+
+#define F(card, type, valbytes, tagbytes) \
+ UPB_NOINLINE \
+ const char* upb_p##card##type##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
+ CARD_##card, type##_ZZ, \
+ upb_pr##type##valbytes##_##tagbytes##bt, \
+ upb_pp##type##valbytes##_##tagbytes##bt); \
+ }
+
+#define TYPES(card, tagbytes) \
+ F(card, b, 1, tagbytes) \
+ F(card, v, 4, tagbytes) \
+ F(card, v, 8, tagbytes) \
+ F(card, z, 4, tagbytes) \
+ F(card, z, 8, tagbytes)
+
+#define TAGBYTES(card) \
+ TYPES(card, 1) \
+ TYPES(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+TAGBYTES(p)
+
+#undef z_ZZ
+#undef b_ZZ
+#undef v_ZZ
+#undef o_ONEOF
+#undef s_ONEOF
+#undef r_ONEOF
+#undef F
+#undef TYPES
+#undef TAGBYTES
+#undef FASTDECODE_UNPACKEDVARINT
+#undef FASTDECODE_PACKEDVARINT
+#undef FASTDECODE_VARINT
+
+/* fixed fields ***************************************************************/
+
+#define FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, packed) \
+ void* dst; \
+ fastdecode_arr farr; \
+ \
+ FASTDECODE_CHECKPACKED(tagbytes, card, packed) \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
+ card); \
+ if (card == CARD_r) { \
+ if (UPB_UNLIKELY(!dst)) { \
+ RETURN_GENERIC("couldn't allocate array in arena\n"); \
+ } \
+ } \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
+ } \
+ \
+ ptr += tagbytes; \
+ memcpy(dst, ptr, valbytes); \
+ ptr += valbytes; \
+ \
+ if (card == CARD_r) { \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, valbytes); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+#define FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, unpacked) \
+ FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked) \
+ \
+ ptr += tagbytes; \
+ int size = (uint8_t)ptr[0]; \
+ ptr++; \
+ if (size & 0x80) { \
+ ptr = fastdecode_longsize(ptr, &size); \
+ } \
+ \
+ if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckDataSizeAvailable( \
+ &d->input, ptr, size) || \
+ (size % valbytes) != 0)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ upb_Array** arr_p = fastdecode_fieldmem(msg, data); \
+ upb_Array* arr = *arr_p; \
+ uint8_t elem_size_lg2 = __builtin_ctz(valbytes); \
+ int elems = size / valbytes; \
+ \
+ if (UPB_LIKELY(!arr)) { \
+ *arr_p = arr = \
+ UPB_PRIVATE(_upb_Array_New)(&d->arena, elems, elem_size_lg2); \
+ if (!arr) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ } else { \
+ _upb_Array_ResizeUninitialized(arr, elems, &d->arena); \
+ } \
+ \
+ char* dst = _upb_array_ptr(arr); \
+ memcpy(dst, ptr, size); \
+ arr->UPB_PRIVATE(size) = elems; \
+ \
+ ptr += size; \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+#define FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, unpacked, packed) \
+ if (card == CARD_p) { \
+ FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, unpacked); \
+ } else { \
+ FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, packed); \
+ }
+
+/* Generate all combinations:
+ * {s,o,r,p} x {f4,f8} x {1bt,2bt} */
+
+#define F(card, valbytes, tagbytes) \
+ UPB_NOINLINE \
+ const char* upb_p##card##f##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
+ CARD_##card, upb_ppf##valbytes##_##tagbytes##bt, \
+ upb_prf##valbytes##_##tagbytes##bt); \
+ }
+
+#define TYPES(card, tagbytes) \
+ F(card, 4, tagbytes) \
+ F(card, 8, tagbytes)
+
+#define TAGBYTES(card) \
+ TYPES(card, 1) \
+ TYPES(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+TAGBYTES(p)
+
+#undef F
+#undef TYPES
+#undef TAGBYTES
+#undef FASTDECODE_UNPACKEDFIXED
+#undef FASTDECODE_PACKEDFIXED
+
+/* string fields **************************************************************/
+
+typedef const char* fastdecode_copystr_func(struct upb_Decoder* d,
+ const char* ptr, upb_Message* msg,
+ const upb_MiniTable* table,
+ uint64_t hasbits,
+ upb_StringView* dst);
+
+UPB_NOINLINE
+static const char* fastdecode_verifyutf8(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t data) {
+ upb_StringView* dst = (upb_StringView*)data;
+ if (!_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) {
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
+ }
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+}
+
+#define FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, validate_utf8) \
+ int size = (uint8_t)ptr[0]; /* Could plumb through hasbits. */ \
+ ptr++; \
+ if (size & 0x80) { \
+ ptr = fastdecode_longsize(ptr, &size); \
+ } \
+ \
+ if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, size))) { \
+ dst->size = 0; \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ const char* s_ptr = ptr; \
+ ptr = upb_EpsCopyInputStream_ReadString(&d->input, &s_ptr, size, &d->arena); \
+ if (!ptr) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory); \
+ dst->data = s_ptr; \
+ dst->size = size; \
+ \
+ if (validate_utf8) { \
+ data = (uint64_t)dst; \
+ UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
+ } else { \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
+ }
+
+UPB_NOINLINE
+static const char* fastdecode_longstring_utf8(struct upb_Decoder* d,
+ const char* ptr, upb_Message* msg,
+ intptr_t table, uint64_t hasbits,
+ uint64_t data) {
+ upb_StringView* dst = (upb_StringView*)data;
+ FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, true);
+}
+
+UPB_NOINLINE
+static const char* fastdecode_longstring_noutf8(
+ struct upb_Decoder* d, const char* ptr, upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t data) {
+ upb_StringView* dst = (upb_StringView*)data;
+ FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, false);
+}
+
+UPB_FORCEINLINE
+static void fastdecode_docopy(upb_Decoder* d, const char* ptr, uint32_t size,
+ int copy, char* data, size_t data_offset,
+ upb_StringView* dst) {
+ d->arena.UPB_PRIVATE(ptr) += copy;
+ dst->data = data + data_offset;
+ UPB_UNPOISON_MEMORY_REGION(data, copy);
+ memcpy(data, ptr, copy);
+ UPB_POISON_MEMORY_REGION(data + data_offset + size,
+ copy - data_offset - size);
+}
+
+#define FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
+ card, validate_utf8) \
+ upb_StringView* dst; \
+ fastdecode_arr farr; \
+ int64_t size; \
+ size_t arena_has; \
+ size_t common_has; \
+ char* buf; \
+ \
+ UPB_ASSERT(!upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0)); \
+ UPB_ASSERT(fastdecode_checktag(data, tagbytes)); \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
+ sizeof(upb_StringView), card); \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
+ } \
+ \
+ size = (uint8_t)ptr[tagbytes]; \
+ ptr += tagbytes + 1; \
+ dst->size = size; \
+ \
+ buf = d->arena.UPB_PRIVATE(ptr); \
+ arena_has = UPB_PRIVATE(_upb_ArenaHas)(&d->arena); \
+ common_has = UPB_MIN(arena_has, \
+ upb_EpsCopyInputStream_BytesAvailable(&d->input, ptr)); \
+ \
+ if (UPB_LIKELY(size <= 15 - tagbytes)) { \
+ if (arena_has < 16) goto longstr; \
+ fastdecode_docopy(d, ptr - tagbytes - 1, size, 16, buf, tagbytes + 1, \
+ dst); \
+ } else if (UPB_LIKELY(size <= 32)) { \
+ if (UPB_UNLIKELY(common_has < 32)) goto longstr; \
+ fastdecode_docopy(d, ptr, size, 32, buf, 0, dst); \
+ } else if (UPB_LIKELY(size <= 64)) { \
+ if (UPB_UNLIKELY(common_has < 64)) goto longstr; \
+ fastdecode_docopy(d, ptr, size, 64, buf, 0, dst); \
+ } else if (UPB_LIKELY(size < 128)) { \
+ if (UPB_UNLIKELY(common_has < 128)) goto longstr; \
+ fastdecode_docopy(d, ptr, size, 128, buf, 0, dst); \
+ } else { \
+ goto longstr; \
+ } \
+ \
+ ptr += size; \
+ \
+ if (card == CARD_r) { \
+ if (validate_utf8 && \
+ !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
+ } \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ if (card != CARD_r && validate_utf8) { \
+ data = (uint64_t)dst; \
+ UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
+ \
+ longstr: \
+ if (card == CARD_r) { \
+ fastdecode_commitarr(dst + 1, &farr, sizeof(upb_StringView)); \
+ } \
+ ptr--; \
+ if (validate_utf8) { \
+ UPB_MUSTTAIL return fastdecode_longstring_utf8(d, ptr, msg, table, \
+ hasbits, (uint64_t)dst); \
+ } else { \
+ UPB_MUSTTAIL return fastdecode_longstring_noutf8(d, ptr, msg, table, \
+ hasbits, (uint64_t)dst); \
+ }
+
+#define FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, card, \
+ copyfunc, validate_utf8) \
+ upb_StringView* dst; \
+ fastdecode_arr farr; \
+ int64_t size; \
+ \
+ if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
+ RETURN_GENERIC("string field tag mismatch\n"); \
+ } \
+ \
+ if (UPB_UNLIKELY( \
+ !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0))) { \
+ UPB_MUSTTAIL return copyfunc(UPB_PARSE_ARGS); \
+ } \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
+ sizeof(upb_StringView), card); \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
+ } \
+ \
+ size = (int8_t)ptr[tagbytes]; \
+ ptr += tagbytes + 1; \
+ \
+ if (UPB_UNLIKELY( \
+ !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, size))) { \
+ ptr--; \
+ if (validate_utf8) { \
+ return fastdecode_longstring_utf8(d, ptr, msg, table, hasbits, \
+ (uint64_t)dst); \
+ } else { \
+ return fastdecode_longstring_noutf8(d, ptr, msg, table, hasbits, \
+ (uint64_t)dst); \
+ } \
+ } \
+ \
+ dst->data = ptr; \
+ dst->size = size; \
+ ptr = upb_EpsCopyInputStream_ReadStringAliased(&d->input, &dst->data, \
+ dst->size); \
+ \
+ if (card == CARD_r) { \
+ if (validate_utf8 && \
+ !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
+ } \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ if (card != CARD_r && validate_utf8) { \
+ data = (uint64_t)dst; \
+ UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+/* Generate all combinations:
+ * {p,c} x {s,o,r} x {s, b} x {1bt,2bt} */
+
+#define s_VALIDATE true
+#define b_VALIDATE false
+
+#define F(card, tagbytes, type) \
+ UPB_NOINLINE \
+ const char* upb_c##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
+ CARD_##card, type##_VALIDATE); \
+ } \
+ const char* upb_p##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, \
+ CARD_##card, upb_c##card##type##_##tagbytes##bt, \
+ type##_VALIDATE); \
+ }
+
+#define UTF8(card, tagbytes) \
+ F(card, tagbytes, s) \
+ F(card, tagbytes, b)
+
+#define TAGBYTES(card) \
+ UTF8(card, 1) \
+ UTF8(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+
+#undef s_VALIDATE
+#undef b_VALIDATE
+#undef F
+#undef TAGBYTES
+#undef FASTDECODE_LONGSTRING
+#undef FASTDECODE_COPYSTRING
+#undef FASTDECODE_STRING
+
+/* message fields *************************************************************/
+
+UPB_INLINE
+upb_Message* decode_newmsg_ceil(upb_Decoder* d, const upb_MiniTable* m,
+ int msg_ceil_bytes) {
+ size_t size = m->UPB_PRIVATE(size) + sizeof(upb_Message_Internal);
+ char* msg_data;
+ if (UPB_LIKELY(msg_ceil_bytes > 0 &&
+ UPB_PRIVATE(_upb_ArenaHas)(&d->arena) >= msg_ceil_bytes)) {
+ UPB_ASSERT(size <= (size_t)msg_ceil_bytes);
+ msg_data = d->arena.UPB_PRIVATE(ptr);
+ d->arena.UPB_PRIVATE(ptr) += size;
+ UPB_UNPOISON_MEMORY_REGION(msg_data, msg_ceil_bytes);
+ memset(msg_data, 0, msg_ceil_bytes);
+ UPB_POISON_MEMORY_REGION(msg_data + size, msg_ceil_bytes - size);
+ } else {
+ msg_data = (char*)upb_Arena_Malloc(&d->arena, size);
+ memset(msg_data, 0, size);
+ }
+ return msg_data + sizeof(upb_Message_Internal);
+}
+
+typedef struct {
+ intptr_t table;
+ upb_Message* msg;
+} fastdecode_submsgdata;
+
+UPB_FORCEINLINE
+static const char* fastdecode_tosubmsg(upb_EpsCopyInputStream* e,
+ const char* ptr, void* ctx) {
+ upb_Decoder* d = (upb_Decoder*)e;
+ fastdecode_submsgdata* submsg = ctx;
+ ptr = fastdecode_dispatch(d, ptr, submsg->msg, submsg->table, 0, 0);
+ UPB_ASSUME(ptr != NULL);
+ return ptr;
+}
+
+#define FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, \
+ msg_ceil_bytes, card) \
+ \
+ if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
+ RETURN_GENERIC("submessage field tag mismatch\n"); \
+ } \
+ \
+ if (--d->depth == 0) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded); \
+ } \
+ \
+ upb_Message** dst; \
+ uint32_t submsg_idx = (data >> 16) & 0xff; \
+ const upb_MiniTable* tablep = decode_totablep(table); \
+ const upb_MiniTable* subtablep = upb_MiniTableSub_Message( \
+ *UPB_PRIVATE(_upb_MiniTable_GetSubByIndex)(tablep, submsg_idx)); \
+ fastdecode_submsgdata submsg = {decode_totable(subtablep)}; \
+ fastdecode_arr farr; \
+ \
+ if (subtablep->UPB_PRIVATE(table_mask) == (uint8_t)-1) { \
+ d->depth++; \
+ RETURN_GENERIC("submessage doesn't have fast tables."); \
+ } \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
+ sizeof(upb_Message*), card); \
+ \
+ if (card == CARD_s) { \
+ *(uint32_t*)msg |= hasbits; \
+ hasbits = 0; \
+ } \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_Message*)); \
+ } \
+ \
+ submsg.msg = *dst; \
+ \
+ if (card == CARD_r || UPB_LIKELY(!submsg.msg)) { \
+ *dst = submsg.msg = decode_newmsg_ceil(d, subtablep, msg_ceil_bytes); \
+ } \
+ \
+ ptr += tagbytes; \
+ ptr = fastdecode_delimited(d, ptr, fastdecode_tosubmsg, &submsg); \
+ \
+ if (UPB_UNLIKELY(ptr == NULL || d->end_group != DECODE_NOGROUP)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ if (card == CARD_r) { \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_Message*)); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ d->depth++; \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ d->depth++; \
+ return ptr; \
+ } \
+ } \
+ \
+ d->depth++; \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+#define F(card, tagbytes, size_ceil, ceil_arg) \
+ const char* upb_p##card##m_##tagbytes##bt_max##size_ceil##b( \
+ UPB_PARSE_PARAMS) { \
+ FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, ceil_arg, \
+ CARD_##card); \
+ }
+
+#define SIZES(card, tagbytes) \
+ F(card, tagbytes, 64, 64) \
+ F(card, tagbytes, 128, 128) \
+ F(card, tagbytes, 192, 192) \
+ F(card, tagbytes, 256, 256) \
+ F(card, tagbytes, max, -1)
+
+#define TAGBYTES(card) \
+ SIZES(card, 1) \
+ SIZES(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+
+#undef TAGBYTES
+#undef SIZES
+#undef F
+#undef FASTDECODE_SUBMSG
+
+#endif /* UPB_FASTTABLE */
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+UPB_NOINLINE UPB_PRIVATE(_upb_WireReader_LongVarint)
+ UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val) {
+ UPB_PRIVATE(_upb_WireReader_LongVarint) ret = {NULL, 0};
+ uint64_t byte;
+ int i;
+ for (i = 1; i < 10; i++) {
+ byte = (uint8_t)ptr[i];
+ val += (byte - 1) << (i * 7);
+ if (!(byte & 0x80)) {
+ ret.ptr = ptr + i + 1;
+ ret.val = val;
+ return ret;
+ }
+ }
+ return ret;
+}
+
+const char* UPB_PRIVATE(_upb_WireReader_SkipGroup)(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream) {
+ if (--depth_limit == 0) return NULL;
+ uint32_t end_group_tag = (tag & ~7ULL) | kUpb_WireType_EndGroup;
+ while (!upb_EpsCopyInputStream_IsDone(stream, &ptr)) {
+ uint32_t tag;
+ ptr = upb_WireReader_ReadTag(ptr, &tag);
+ if (!ptr) return NULL;
+ if (tag == end_group_tag) return ptr;
+ ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, stream);
+ if (!ptr) return NULL;
+ }
+ return ptr;
+}
+
+/*
+ * upb_table Implementation
+ *
+ * Implementation is heavily inspired by Lua's ltable.c.
+ */
+
+#include <string.h>
+
+
+// Must be last.
+
+#define UPB_MAXARRSIZE 16 // 2**16 = 64k.
+
+// From Chromium.
+#define ARRAY_SIZE(x) \
+ ((sizeof(x) / sizeof(0 [x])) / ((size_t)(!(sizeof(x) % sizeof(0 [x])))))
+
+static const double MAX_LOAD = 0.85;
+
+/* The minimum utilization of the array part of a mixed hash/array table. This
+ * is a speed/memory-usage tradeoff (though it's not straightforward because of
+ * cache effects). The lower this is, the more memory we'll use. */
+static const double MIN_DENSITY = 0.1;
+
+static bool is_pow2(uint64_t v) { return v == 0 || (v & (v - 1)) == 0; }
+
+static upb_value _upb_value_val(uint64_t val) {
+ upb_value ret;
+ _upb_value_setval(&ret, val);
+ return ret;
+}
+
+static int log2ceil(uint64_t v) {
+ int ret = 0;
+ bool pow2 = is_pow2(v);
+ while (v >>= 1) ret++;
+ ret = pow2 ? ret : ret + 1; // Ceiling.
+ return UPB_MIN(UPB_MAXARRSIZE, ret);
+}
+
+/* A type to represent the lookup key of either a strtable or an inttable. */
+typedef union {
+ uintptr_t num;
+ struct {
+ const char* str;
+ size_t len;
+ } str;
+} lookupkey_t;
+
+static lookupkey_t strkey2(const char* str, size_t len) {
+ lookupkey_t k;
+ k.str.str = str;
+ k.str.len = len;
+ return k;
+}
+
+static lookupkey_t intkey(uintptr_t key) {
+ lookupkey_t k;
+ k.num = key;
+ return k;
+}
+
+typedef uint32_t hashfunc_t(upb_tabkey key);
+typedef bool eqlfunc_t(upb_tabkey k1, lookupkey_t k2);
+
+/* Base table (shared code) ***************************************************/
+
+static uint32_t upb_inthash(uintptr_t key) { return (uint32_t)key; }
+
+static const upb_tabent* upb_getentry(const upb_table* t, uint32_t hash) {
+ return t->entries + (hash & t->mask);
+}
+
+static bool upb_arrhas(upb_tabval key) { return key.val != (uint64_t)-1; }
+
+static bool isfull(upb_table* t) { return t->count == t->max_count; }
+
+static bool init(upb_table* t, uint8_t size_lg2, upb_Arena* a) {
+ size_t bytes;
+
+ t->count = 0;
+ t->size_lg2 = size_lg2;
+ t->mask = upb_table_size(t) ? upb_table_size(t) - 1 : 0;
+ t->max_count = upb_table_size(t) * MAX_LOAD;
+ bytes = upb_table_size(t) * sizeof(upb_tabent);
+ if (bytes > 0) {
+ t->entries = upb_Arena_Malloc(a, bytes);
+ if (!t->entries) return false;
+ memset(t->entries, 0, bytes);
+ } else {
+ t->entries = NULL;
+ }
+ return true;
+}
+
+static upb_tabent* emptyent(upb_table* t, upb_tabent* e) {
+ upb_tabent* begin = t->entries;
+ upb_tabent* end = begin + upb_table_size(t);
+ for (e = e + 1; e < end; e++) {
+ if (upb_tabent_isempty(e)) return e;
+ }
+ for (e = begin; e < end; e++) {
+ if (upb_tabent_isempty(e)) return e;
+ }
+ UPB_ASSERT(false);
+ return NULL;
+}
+
+static upb_tabent* getentry_mutable(upb_table* t, uint32_t hash) {
+ return (upb_tabent*)upb_getentry(t, hash);
+}
+
+static const upb_tabent* findentry(const upb_table* t, lookupkey_t key,
+ uint32_t hash, eqlfunc_t* eql) {
+ const upb_tabent* e;
+
+ if (t->size_lg2 == 0) return NULL;
+ e = upb_getentry(t, hash);
+ if (upb_tabent_isempty(e)) return NULL;
+ while (1) {
+ if (eql(e->key, key)) return e;
+ if ((e = e->next) == NULL) return NULL;
+ }
+}
+
+static upb_tabent* findentry_mutable(upb_table* t, lookupkey_t key,
+ uint32_t hash, eqlfunc_t* eql) {
+ return (upb_tabent*)findentry(t, key, hash, eql);
+}
+
+static bool lookup(const upb_table* t, lookupkey_t key, upb_value* v,
+ uint32_t hash, eqlfunc_t* eql) {
+ const upb_tabent* e = findentry(t, key, hash, eql);
+ if (e) {
+ if (v) {
+ _upb_value_setval(v, e->val.val);
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/* The given key must not already exist in the table. */
+static void insert(upb_table* t, lookupkey_t key, upb_tabkey tabkey,
+ upb_value val, uint32_t hash, hashfunc_t* hashfunc,
+ eqlfunc_t* eql) {
+ upb_tabent* mainpos_e;
+ upb_tabent* our_e;
+
+ UPB_ASSERT(findentry(t, key, hash, eql) == NULL);
+
+ t->count++;
+ mainpos_e = getentry_mutable(t, hash);
+ our_e = mainpos_e;
+
+ if (upb_tabent_isempty(mainpos_e)) {
+ /* Our main position is empty; use it. */
+ our_e->next = NULL;
+ } else {
+ /* Collision. */
+ upb_tabent* new_e = emptyent(t, mainpos_e);
+ /* Head of collider's chain. */
+ upb_tabent* chain = getentry_mutable(t, hashfunc(mainpos_e->key));
+ if (chain == mainpos_e) {
+ /* Existing ent is in its main position (it has the same hash as us, and
+ * is the head of our chain). Insert to new ent and append to this chain.
+ */
+ new_e->next = mainpos_e->next;
+ mainpos_e->next = new_e;
+ our_e = new_e;
+ } else {
+ /* Existing ent is not in its main position (it is a node in some other
+ * chain). This implies that no existing ent in the table has our hash.
+ * Evict it (updating its chain) and use its ent for head of our chain. */
+ *new_e = *mainpos_e; /* copies next. */
+ while (chain->next != mainpos_e) {
+ chain = (upb_tabent*)chain->next;
+ UPB_ASSERT(chain);
+ }
+ chain->next = new_e;
+ our_e = mainpos_e;
+ our_e->next = NULL;
+ }
+ }
+ our_e->key = tabkey;
+ our_e->val.val = val.val;
+ UPB_ASSERT(findentry(t, key, hash, eql) == our_e);
+}
+
+static bool rm(upb_table* t, lookupkey_t key, upb_value* val,
+ upb_tabkey* removed, uint32_t hash, eqlfunc_t* eql) {
+ upb_tabent* chain = getentry_mutable(t, hash);
+ if (upb_tabent_isempty(chain)) return false;
+ if (eql(chain->key, key)) {
+ /* Element to remove is at the head of its chain. */
+ t->count--;
+ if (val) _upb_value_setval(val, chain->val.val);
+ if (removed) *removed = chain->key;
+ if (chain->next) {
+ upb_tabent* move = (upb_tabent*)chain->next;
+ *chain = *move;
+ move->key = 0; /* Make the slot empty. */
+ } else {
+ chain->key = 0; /* Make the slot empty. */
+ }
+ return true;
+ } else {
+ /* Element to remove is either in a non-head position or not in the
+ * table. */
+ while (chain->next && !eql(chain->next->key, key)) {
+ chain = (upb_tabent*)chain->next;
+ }
+ if (chain->next) {
+ /* Found element to remove. */
+ upb_tabent* rm = (upb_tabent*)chain->next;
+ t->count--;
+ if (val) _upb_value_setval(val, chain->next->val.val);
+ if (removed) *removed = rm->key;
+ rm->key = 0; /* Make the slot empty. */
+ chain->next = rm->next;
+ return true;
+ } else {
+ /* Element to remove is not in the table. */
+ return false;
+ }
+ }
+}
+
+static size_t next(const upb_table* t, size_t i) {
+ do {
+ if (++i >= upb_table_size(t)) return SIZE_MAX - 1; /* Distinct from -1. */
+ } while (upb_tabent_isempty(&t->entries[i]));
+
+ return i;
+}
+
+static size_t begin(const upb_table* t) { return next(t, -1); }
+
+/* upb_strtable ***************************************************************/
+
+/* A simple "subclass" of upb_table that only adds a hash function for strings.
+ */
+
+static upb_tabkey strcopy(lookupkey_t k2, upb_Arena* a) {
+ uint32_t len = (uint32_t)k2.str.len;
+ char* str = upb_Arena_Malloc(a, k2.str.len + sizeof(uint32_t) + 1);
+ if (str == NULL) return 0;
+ memcpy(str, &len, sizeof(uint32_t));
+ if (k2.str.len) memcpy(str + sizeof(uint32_t), k2.str.str, k2.str.len);
+ str[sizeof(uint32_t) + k2.str.len] = '\0';
+ return (uintptr_t)str;
+}
+
+/* Adapted from ABSL's wyhash. */
+
+static uint64_t UnalignedLoad64(const void* p) {
+ uint64_t val;
+ memcpy(&val, p, 8);
+ return val;
+}
+
+static uint32_t UnalignedLoad32(const void* p) {
+ uint32_t val;
+ memcpy(&val, p, 4);
+ return val;
+}
+
+#if defined(_MSC_VER) && defined(_M_X64)
+#include <intrin.h>
+#endif
+
+/* Computes a * b, returning the low 64 bits of the result and storing the high
+ * 64 bits in |*high|. */
+static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) {
+#ifdef __SIZEOF_INT128__
+ __uint128_t p = v0;
+ p *= v1;
+ *out_high = (uint64_t)(p >> 64);
+ return (uint64_t)p;
+#elif defined(_MSC_VER) && defined(_M_X64)
+ return _umul128(v0, v1, out_high);
+#else
+ uint64_t a32 = v0 >> 32;
+ uint64_t a00 = v0 & 0xffffffff;
+ uint64_t b32 = v1 >> 32;
+ uint64_t b00 = v1 & 0xffffffff;
+ uint64_t high = a32 * b32;
+ uint64_t low = a00 * b00;
+ uint64_t mid1 = a32 * b00;
+ uint64_t mid2 = a00 * b32;
+ low += (mid1 << 32) + (mid2 << 32);
+ // Omit carry bit, for mixing we do not care about exact numerical precision.
+ high += (mid1 >> 32) + (mid2 >> 32);
+ *out_high = high;
+ return low;
+#endif
+}
+
+static uint64_t WyhashMix(uint64_t v0, uint64_t v1) {
+ uint64_t high;
+ uint64_t low = upb_umul128(v0, v1, &high);
+ return low ^ high;
+}
+
+static uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
+ const uint64_t salt[]) {
+ const uint8_t* ptr = (const uint8_t*)data;
+ uint64_t starting_length = (uint64_t)len;
+ uint64_t current_state = seed ^ salt[0];
+
+ if (len > 64) {
+ // If we have more than 64 bytes, we're going to handle chunks of 64
+ // bytes at a time. We're going to build up two separate hash states
+ // which we will then hash together.
+ uint64_t duplicated_state = current_state;
+
+ do {
+ uint64_t a = UnalignedLoad64(ptr);
+ uint64_t b = UnalignedLoad64(ptr + 8);
+ uint64_t c = UnalignedLoad64(ptr + 16);
+ uint64_t d = UnalignedLoad64(ptr + 24);
+ uint64_t e = UnalignedLoad64(ptr + 32);
+ uint64_t f = UnalignedLoad64(ptr + 40);
+ uint64_t g = UnalignedLoad64(ptr + 48);
+ uint64_t h = UnalignedLoad64(ptr + 56);
+
+ uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state);
+ uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state);
+ current_state = (cs0 ^ cs1);
+
+ uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state);
+ uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state);
+ duplicated_state = (ds0 ^ ds1);
+
+ ptr += 64;
+ len -= 64;
+ } while (len > 64);
+
+ current_state = current_state ^ duplicated_state;
+ }
+
+ // We now have a data `ptr` with at most 64 bytes and the current state
+ // of the hashing state machine stored in current_state.
+ while (len > 16) {
+ uint64_t a = UnalignedLoad64(ptr);
+ uint64_t b = UnalignedLoad64(ptr + 8);
+
+ current_state = WyhashMix(a ^ salt[1], b ^ current_state);
+
+ ptr += 16;
+ len -= 16;
+ }
+
+ // We now have a data `ptr` with at most 16 bytes.
+ uint64_t a = 0;
+ uint64_t b = 0;
+ if (len > 8) {
+ // When we have at least 9 and at most 16 bytes, set A to the first 64
+ // bits of the input and B to the last 64 bits of the input. Yes, they will
+ // overlap in the middle if we are working with less than the full 16
+ // bytes.
+ a = UnalignedLoad64(ptr);
+ b = UnalignedLoad64(ptr + len - 8);
+ } else if (len > 3) {
+ // If we have at least 4 and at most 8 bytes, set A to the first 32
+ // bits and B to the last 32 bits.
+ a = UnalignedLoad32(ptr);
+ b = UnalignedLoad32(ptr + len - 4);
+ } else if (len > 0) {
+ // If we have at least 1 and at most 3 bytes, read all of the provided
+ // bits into A, with some adjustments.
+ a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
+ b = 0;
+ } else {
+ a = 0;
+ b = 0;
+ }
+
+ uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state);
+ uint64_t z = salt[1] ^ starting_length;
+ return WyhashMix(w, z);
+}
+
+const uint64_t kWyhashSalt[5] = {
+ 0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL,
+ 0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL,
+};
+
+uint32_t _upb_Hash(const void* p, size_t n, uint64_t seed) {
+ return Wyhash(p, n, seed, kWyhashSalt);
+}
+
+static uint32_t _upb_Hash_NoSeed(const char* p, size_t n) {
+ return _upb_Hash(p, n, 0);
+}
+
+static uint32_t strhash(upb_tabkey key) {
+ uint32_t len;
+ char* str = upb_tabstr(key, &len);
+ return _upb_Hash_NoSeed(str, len);
+}
+
+static bool streql(upb_tabkey k1, lookupkey_t k2) {
+ uint32_t len;
+ char* str = upb_tabstr(k1, &len);
+ return len == k2.str.len && (len == 0 || memcmp(str, k2.str.str, len) == 0);
+}
+
+bool upb_strtable_init(upb_strtable* t, size_t expected_size, upb_Arena* a) {
+ // Multiply by approximate reciprocal of MAX_LOAD (0.85), with pow2
+ // denominator.
+ size_t need_entries = (expected_size + 1) * 1204 / 1024;
+ UPB_ASSERT(need_entries >= expected_size * 0.85);
+ int size_lg2 = upb_Log2Ceiling(need_entries);
+ return init(&t->t, size_lg2, a);
+}
+
+void upb_strtable_clear(upb_strtable* t) {
+ size_t bytes = upb_table_size(&t->t) * sizeof(upb_tabent);
+ t->t.count = 0;
+ memset((char*)t->t.entries, 0, bytes);
+}
+
+bool upb_strtable_resize(upb_strtable* t, size_t size_lg2, upb_Arena* a) {
+ upb_strtable new_table;
+ if (!init(&new_table.t, size_lg2, a)) return false;
+
+ intptr_t iter = UPB_STRTABLE_BEGIN;
+ upb_StringView key;
+ upb_value val;
+ while (upb_strtable_next2(t, &key, &val, &iter)) {
+ upb_strtable_insert(&new_table, key.data, key.size, val, a);
+ }
+ *t = new_table;
+ return true;
+}
+
+bool upb_strtable_insert(upb_strtable* t, const char* k, size_t len,
+ upb_value v, upb_Arena* a) {
+ lookupkey_t key;
+ upb_tabkey tabkey;
+ uint32_t hash;
+
+ if (isfull(&t->t)) {
+ /* Need to resize. New table of double the size, add old elements to it. */
+ if (!upb_strtable_resize(t, t->t.size_lg2 + 1, a)) {
+ return false;
+ }
+ }
+
+ key = strkey2(k, len);
+ tabkey = strcopy(key, a);
+ if (tabkey == 0) return false;
+
+ hash = _upb_Hash_NoSeed(key.str.str, key.str.len);
+ insert(&t->t, key, tabkey, v, hash, &strhash, &streql);
+ return true;
+}
+
+bool upb_strtable_lookup2(const upb_strtable* t, const char* key, size_t len,
+ upb_value* v) {
+ uint32_t hash = _upb_Hash_NoSeed(key, len);
+ return lookup(&t->t, strkey2(key, len), v, hash, &streql);
+}
+
+bool upb_strtable_remove2(upb_strtable* t, const char* key, size_t len,
+ upb_value* val) {
+ uint32_t hash = _upb_Hash_NoSeed(key, len);
+ upb_tabkey tabkey;
+ return rm(&t->t, strkey2(key, len), val, &tabkey, hash, &streql);
+}
+
+/* Iteration */
+
+void upb_strtable_begin(upb_strtable_iter* i, const upb_strtable* t) {
+ i->t = t;
+ i->index = begin(&t->t);
+}
+
+void upb_strtable_next(upb_strtable_iter* i) {
+ i->index = next(&i->t->t, i->index);
+}
+
+bool upb_strtable_done(const upb_strtable_iter* i) {
+ if (!i->t) return true;
+ return i->index >= upb_table_size(&i->t->t) ||
+ upb_tabent_isempty(str_tabent(i));
+}
+
+upb_StringView upb_strtable_iter_key(const upb_strtable_iter* i) {
+ upb_StringView key;
+ uint32_t len;
+ UPB_ASSERT(!upb_strtable_done(i));
+ key.data = upb_tabstr(str_tabent(i)->key, &len);
+ key.size = len;
+ return key;
+}
+
+upb_value upb_strtable_iter_value(const upb_strtable_iter* i) {
+ UPB_ASSERT(!upb_strtable_done(i));
+ return _upb_value_val(str_tabent(i)->val.val);
+}
+
+void upb_strtable_iter_setdone(upb_strtable_iter* i) {
+ i->t = NULL;
+ i->index = SIZE_MAX;
+}
+
+bool upb_strtable_iter_isequal(const upb_strtable_iter* i1,
+ const upb_strtable_iter* i2) {
+ if (upb_strtable_done(i1) && upb_strtable_done(i2)) return true;
+ return i1->t == i2->t && i1->index == i2->index;
+}
+
+/* upb_inttable ***************************************************************/
+
+/* For inttables we use a hybrid structure where small keys are kept in an
+ * array and large keys are put in the hash table. */
+
+static uint32_t inthash(upb_tabkey key) { return upb_inthash(key); }
+
+static bool inteql(upb_tabkey k1, lookupkey_t k2) { return k1 == k2.num; }
+
+static upb_tabval* mutable_array(upb_inttable* t) {
+ return (upb_tabval*)t->array;
+}
+
+static upb_tabval* inttable_val(upb_inttable* t, uintptr_t key) {
+ if (key < t->array_size) {
+ return upb_arrhas(t->array[key]) ? &(mutable_array(t)[key]) : NULL;
+ } else {
+ upb_tabent* e =
+ findentry_mutable(&t->t, intkey(key), upb_inthash(key), &inteql);
+ return e ? &e->val : NULL;
+ }
+}
+
+static const upb_tabval* inttable_val_const(const upb_inttable* t,
+ uintptr_t key) {
+ return inttable_val((upb_inttable*)t, key);
+}
+
+size_t upb_inttable_count(const upb_inttable* t) {
+ return t->t.count + t->array_count;
+}
+
+static void check(upb_inttable* t) {
+ UPB_UNUSED(t);
+#if defined(UPB_DEBUG_TABLE) && !defined(NDEBUG)
+ {
+ // This check is very expensive (makes inserts/deletes O(N)).
+ size_t count = 0;
+ intptr_t iter = UPB_INTTABLE_BEGIN;
+ uintptr_t key;
+ upb_value val;
+ while (upb_inttable_next(t, &key, &val, &iter)) {
+ UPB_ASSERT(upb_inttable_lookup(t, key, NULL));
+ }
+ UPB_ASSERT(count == upb_inttable_count(t));
+ }
+#endif
+}
+
+bool upb_inttable_sizedinit(upb_inttable* t, size_t asize, int hsize_lg2,
+ upb_Arena* a) {
+ size_t array_bytes;
+
+ if (!init(&t->t, hsize_lg2, a)) return false;
+ /* Always make the array part at least 1 long, so that we know key 0
+ * won't be in the hash part, which simplifies things. */
+ t->array_size = UPB_MAX(1, asize);
+ t->array_count = 0;
+ array_bytes = t->array_size * sizeof(upb_value);
+ t->array = upb_Arena_Malloc(a, array_bytes);
+ if (!t->array) {
+ return false;
+ }
+ memset(mutable_array(t), 0xff, array_bytes);
+ check(t);
+ return true;
+}
+
+bool upb_inttable_init(upb_inttable* t, upb_Arena* a) {
+ return upb_inttable_sizedinit(t, 0, 4, a);
+}
+
+bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
+ upb_Arena* a) {
+ upb_tabval tabval;
+ tabval.val = val.val;
+ UPB_ASSERT(
+ upb_arrhas(tabval)); /* This will reject (uint64_t)-1. Fix this. */
+
+ if (key < t->array_size) {
+ UPB_ASSERT(!upb_arrhas(t->array[key]));
+ t->array_count++;
+ mutable_array(t)[key].val = val.val;
+ } else {
+ if (isfull(&t->t)) {
+ /* Need to resize the hash part, but we re-use the array part. */
+ size_t i;
+ upb_table new_table;
+
+ if (!init(&new_table, t->t.size_lg2 + 1, a)) {
+ return false;
+ }
+
+ for (i = begin(&t->t); i < upb_table_size(&t->t); i = next(&t->t, i)) {
+ const upb_tabent* e = &t->t.entries[i];
+ uint32_t hash;
+ upb_value v;
+
+ _upb_value_setval(&v, e->val.val);
+ hash = upb_inthash(e->key);
+ insert(&new_table, intkey(e->key), e->key, v, hash, &inthash, &inteql);
+ }
+
+ UPB_ASSERT(t->t.count == new_table.count);
+
+ t->t = new_table;
+ }
+ insert(&t->t, intkey(key), key, val, upb_inthash(key), &inthash, &inteql);
+ }
+ check(t);
+ return true;
+}
+
+bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v) {
+ const upb_tabval* table_v = inttable_val_const(t, key);
+ if (!table_v) return false;
+ if (v) _upb_value_setval(v, table_v->val);
+ return true;
+}
+
+bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val) {
+ upb_tabval* table_v = inttable_val(t, key);
+ if (!table_v) return false;
+ table_v->val = val.val;
+ return true;
+}
+
+bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val) {
+ bool success;
+ if (key < t->array_size) {
+ if (upb_arrhas(t->array[key])) {
+ upb_tabval empty = UPB_TABVALUE_EMPTY_INIT;
+ t->array_count--;
+ if (val) {
+ _upb_value_setval(val, t->array[key].val);
+ }
+ mutable_array(t)[key] = empty;
+ success = true;
+ } else {
+ success = false;
+ }
+ } else {
+ success = rm(&t->t, intkey(key), val, NULL, upb_inthash(key), &inteql);
+ }
+ check(t);
+ return success;
+}
+
+void upb_inttable_compact(upb_inttable* t, upb_Arena* a) {
+ /* A power-of-two histogram of the table keys. */
+ size_t counts[UPB_MAXARRSIZE + 1] = {0};
+
+ /* The max key in each bucket. */
+ uintptr_t max[UPB_MAXARRSIZE + 1] = {0};
+
+ {
+ intptr_t iter = UPB_INTTABLE_BEGIN;
+ uintptr_t key;
+ upb_value val;
+ while (upb_inttable_next(t, &key, &val, &iter)) {
+ int bucket = log2ceil(key);
+ max[bucket] = UPB_MAX(max[bucket], key);
+ counts[bucket]++;
+ }
+ }
+
+ /* Find the largest power of two that satisfies the MIN_DENSITY
+ * definition (while actually having some keys). */
+ size_t arr_count = upb_inttable_count(t);
+ int size_lg2;
+ upb_inttable new_t;
+
+ for (size_lg2 = ARRAY_SIZE(counts) - 1; size_lg2 > 0; size_lg2--) {
+ if (counts[size_lg2] == 0) {
+ /* We can halve again without losing any entries. */
+ continue;
+ } else if (arr_count >= (1 << size_lg2) * MIN_DENSITY) {
+ break;
+ }
+
+ arr_count -= counts[size_lg2];
+ }
+
+ UPB_ASSERT(arr_count <= upb_inttable_count(t));
+
+ {
+ /* Insert all elements into new, perfectly-sized table. */
+ size_t arr_size = max[size_lg2] + 1; /* +1 so arr[max] will fit. */
+ size_t hash_count = upb_inttable_count(t) - arr_count;
+ size_t hash_size = hash_count ? (hash_count / MAX_LOAD) + 1 : 0;
+ int hashsize_lg2 = log2ceil(hash_size);
+
+ upb_inttable_sizedinit(&new_t, arr_size, hashsize_lg2, a);
+
+ {
+ intptr_t iter = UPB_INTTABLE_BEGIN;
+ uintptr_t key;
+ upb_value val;
+ while (upb_inttable_next(t, &key, &val, &iter)) {
+ upb_inttable_insert(&new_t, key, val, a);
+ }
+ }
+
+ UPB_ASSERT(new_t.array_size == arr_size);
+ UPB_ASSERT(new_t.t.size_lg2 == hashsize_lg2);
+ }
+ *t = new_t;
+}
+
+// Iteration.
+
+bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
+ intptr_t* iter) {
+ intptr_t i = *iter;
+ if ((size_t)(i + 1) <= t->array_size) {
+ while ((size_t)++i < t->array_size) {
+ upb_tabval ent = t->array[i];
+ if (upb_arrhas(ent)) {
+ *key = i;
+ *val = _upb_value_val(ent.val);
+ *iter = i;
+ return true;
+ }
+ }
+ i--; // Back up to exactly one position before the start of the table.
+ }
+
+ size_t tab_idx = next(&t->t, i - t->array_size);
+ if (tab_idx < upb_table_size(&t->t)) {
+ upb_tabent* ent = &t->t.entries[tab_idx];
+ *key = ent->key;
+ *val = _upb_value_val(ent->val.val);
+ *iter = tab_idx + t->array_size;
+ return true;
+ }
+
+ return false;
+}
+
+void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter) {
+ intptr_t i = *iter;
+ if ((size_t)i < t->array_size) {
+ t->array_count--;
+ mutable_array(t)[i].val = -1;
+ } else {
+ upb_tabent* ent = &t->t.entries[i - t->array_size];
+ upb_tabent* prev = NULL;
+
+ // Linear search, not great.
+ upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
+ for (upb_tabent* e = t->t.entries; e != end; e++) {
+ if (e->next == ent) {
+ prev = e;
+ break;
+ }
+ }
+
+ if (prev) {
+ prev->next = ent->next;
+ }
+
+ t->t.count--;
+ ent->key = 0;
+ ent->next = NULL;
+ }
+}
+
+bool upb_strtable_next2(const upb_strtable* t, upb_StringView* key,
+ upb_value* val, intptr_t* iter) {
+ size_t tab_idx = next(&t->t, *iter);
+ if (tab_idx < upb_table_size(&t->t)) {
+ upb_tabent* ent = &t->t.entries[tab_idx];
+ uint32_t len;
+ key->data = upb_tabstr(ent->key, &len);
+ key->size = len;
+ *val = _upb_value_val(ent->val.val);
+ *iter = tab_idx;
+ return true;
+ }
+
+ return false;
+}
+
+void upb_strtable_removeiter(upb_strtable* t, intptr_t* iter) {
+ intptr_t i = *iter;
+ upb_tabent* ent = &t->t.entries[i];
+ upb_tabent* prev = NULL;
+
+ // Linear search, not great.
+ upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
+ for (upb_tabent* e = t->t.entries; e != end; e++) {
+ if (e->next == ent) {
+ prev = e;
+ break;
+ }
+ }
+
+ if (prev) {
+ prev->next = ent->next;
+ }
+
+ t->t.count--;
+ ent->key = 0;
+ ent->next = NULL;
+}
+
+void upb_strtable_setentryvalue(upb_strtable* t, intptr_t iter, upb_value v) {
+ upb_tabent* ent = &t->t.entries[iter];
+ ent->val.val = v.val;
+}
+
+
// Must be last.
const char* upb_BufToUint64(const char* ptr, const char* end, uint64_t* val) {
@@ -5494,1210 +11192,19 @@
}
-#include <stdlib.h>
-
-// Must be last.
-
-static void* upb_global_allocfunc(upb_alloc* alloc, void* ptr, size_t oldsize,
- size_t size) {
- UPB_UNUSED(alloc);
- UPB_UNUSED(oldsize);
- if (size == 0) {
- free(ptr);
- return NULL;
- } else {
- return realloc(ptr, size);
- }
-}
-
-upb_alloc upb_alloc_global = {&upb_global_allocfunc};
-
-
-
-// Must be last.
-
-struct _upb_MemBlock {
- // Atomic only for the benefit of SpaceAllocated().
- UPB_ATOMIC(_upb_MemBlock*) next;
- uint32_t size;
- // Data follows.
-};
-
-static const size_t memblock_reserve =
- UPB_ALIGN_UP(sizeof(_upb_MemBlock), UPB_MALLOC_ALIGN);
-
-typedef struct _upb_ArenaRoot {
- upb_Arena* root;
- uintptr_t tagged_count;
-} _upb_ArenaRoot;
-
-static _upb_ArenaRoot _upb_Arena_FindRoot(upb_Arena* a) {
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- while (_upb_Arena_IsTaggedPointer(poc)) {
- upb_Arena* next = _upb_Arena_PointerFromTagged(poc);
- UPB_ASSERT(a != next);
- uintptr_t next_poc =
- upb_Atomic_Load(&next->parent_or_count, memory_order_acquire);
-
- if (_upb_Arena_IsTaggedPointer(next_poc)) {
- // To keep complexity down, we lazily collapse levels of the tree. This
- // keeps it flat in the final case, but doesn't cost much incrementally.
- //
- // Path splitting keeps time complexity down, see:
- // https://en.wikipedia.org/wiki/Disjoint-set_data_structure
- //
- // We can safely use a relaxed atomic here because all threads doing this
- // will converge on the same value and we don't need memory orderings to
- // be visible.
- //
- // This is true because:
- // - If no fuses occur, this will eventually become the root.
- // - If fuses are actively occurring, the root may change, but the
- // invariant is that `parent_or_count` merely points to *a* parent.
- //
- // In other words, it is moving towards "the" root, and that root may move
- // further away over time, but the path towards that root will continue to
- // be valid and the creation of the path carries all the memory orderings
- // required.
- UPB_ASSERT(a != _upb_Arena_PointerFromTagged(next_poc));
- upb_Atomic_Store(&a->parent_or_count, next_poc, memory_order_relaxed);
- }
- a = next;
- poc = next_poc;
- }
- return (_upb_ArenaRoot){.root = a, .tagged_count = poc};
-}
-
-size_t upb_Arena_SpaceAllocated(upb_Arena* arena) {
- arena = _upb_Arena_FindRoot(arena).root;
- size_t memsize = 0;
-
- while (arena != NULL) {
- _upb_MemBlock* block =
- upb_Atomic_Load(&arena->blocks, memory_order_relaxed);
- while (block != NULL) {
- memsize += sizeof(_upb_MemBlock) + block->size;
- block = upb_Atomic_Load(&block->next, memory_order_relaxed);
- }
- arena = upb_Atomic_Load(&arena->next, memory_order_relaxed);
- }
-
- return memsize;
-}
-
-uint32_t upb_Arena_DebugRefCount(upb_Arena* a) {
- // These loads could probably be relaxed, but given that this is debug-only,
- // it's not worth introducing a new variant for it.
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- while (_upb_Arena_IsTaggedPointer(poc)) {
- a = _upb_Arena_PointerFromTagged(poc);
- poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- }
- return _upb_Arena_RefCountFromTagged(poc);
-}
-
-static void upb_Arena_AddBlock(upb_Arena* a, void* ptr, size_t size) {
- _upb_MemBlock* block = ptr;
-
- // Insert into linked list.
- block->size = (uint32_t)size;
- upb_Atomic_Init(&block->next, a->blocks);
- upb_Atomic_Store(&a->blocks, block, memory_order_release);
-
- a->head.ptr = UPB_PTR_AT(block, memblock_reserve, char);
- a->head.end = UPB_PTR_AT(block, size, char);
-
- UPB_POISON_MEMORY_REGION(a->head.ptr, a->head.end - a->head.ptr);
-}
-
-static bool upb_Arena_AllocBlock(upb_Arena* a, size_t size) {
- if (!a->block_alloc) return false;
- _upb_MemBlock* last_block = upb_Atomic_Load(&a->blocks, memory_order_acquire);
- size_t last_size = last_block != NULL ? last_block->size : 128;
- size_t block_size = UPB_MAX(size, last_size * 2) + memblock_reserve;
- _upb_MemBlock* block = upb_malloc(upb_Arena_BlockAlloc(a), block_size);
-
- if (!block) return false;
- upb_Arena_AddBlock(a, block, block_size);
- return true;
-}
-
-void* _upb_Arena_SlowMalloc(upb_Arena* a, size_t size) {
- if (!upb_Arena_AllocBlock(a, size)) return NULL; /* Out of memory. */
- UPB_ASSERT(_upb_ArenaHas(a) >= size);
- return upb_Arena_Malloc(a, size);
-}
-
-/* Public Arena API ***********************************************************/
-
-static upb_Arena* upb_Arena_InitSlow(upb_alloc* alloc) {
- const size_t first_block_overhead = sizeof(upb_Arena) + memblock_reserve;
- upb_Arena* a;
-
- /* We need to malloc the initial block. */
- char* mem;
- size_t n = first_block_overhead + 256;
- if (!alloc || !(mem = upb_malloc(alloc, n))) {
- return NULL;
- }
-
- a = UPB_PTR_AT(mem, n - sizeof(*a), upb_Arena);
- n -= sizeof(*a);
-
- a->block_alloc = upb_Arena_MakeBlockAlloc(alloc, 0);
- upb_Atomic_Init(&a->parent_or_count, _upb_Arena_TaggedFromRefcount(1));
- upb_Atomic_Init(&a->next, NULL);
- upb_Atomic_Init(&a->tail, a);
- upb_Atomic_Init(&a->blocks, NULL);
-
- upb_Arena_AddBlock(a, mem, n);
-
- return a;
-}
-
-upb_Arena* upb_Arena_Init(void* mem, size_t n, upb_alloc* alloc) {
- upb_Arena* a;
-
- if (n) {
- /* Align initial pointer up so that we return properly-aligned pointers. */
- void* aligned = (void*)UPB_ALIGN_UP((uintptr_t)mem, UPB_MALLOC_ALIGN);
- size_t delta = (uintptr_t)aligned - (uintptr_t)mem;
- n = delta <= n ? n - delta : 0;
- mem = aligned;
- }
-
- /* Round block size down to alignof(*a) since we will allocate the arena
- * itself at the end. */
- n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_Arena));
-
- if (UPB_UNLIKELY(n < sizeof(upb_Arena))) {
- return upb_Arena_InitSlow(alloc);
- }
-
- a = UPB_PTR_AT(mem, n - sizeof(*a), upb_Arena);
-
- upb_Atomic_Init(&a->parent_or_count, _upb_Arena_TaggedFromRefcount(1));
- upb_Atomic_Init(&a->next, NULL);
- upb_Atomic_Init(&a->tail, a);
- upb_Atomic_Init(&a->blocks, NULL);
- a->block_alloc = upb_Arena_MakeBlockAlloc(alloc, 1);
- a->head.ptr = mem;
- a->head.end = UPB_PTR_AT(mem, n - sizeof(*a), char);
-
- return a;
-}
-
-static void arena_dofree(upb_Arena* a) {
- UPB_ASSERT(_upb_Arena_RefCountFromTagged(a->parent_or_count) == 1);
-
- while (a != NULL) {
- // Load first since arena itself is likely from one of its blocks.
- upb_Arena* next_arena =
- (upb_Arena*)upb_Atomic_Load(&a->next, memory_order_acquire);
- upb_alloc* block_alloc = upb_Arena_BlockAlloc(a);
- _upb_MemBlock* block = upb_Atomic_Load(&a->blocks, memory_order_acquire);
- while (block != NULL) {
- // Load first since we are deleting block.
- _upb_MemBlock* next_block =
- upb_Atomic_Load(&block->next, memory_order_acquire);
- upb_free(block_alloc, block);
- block = next_block;
- }
- a = next_arena;
- }
-}
-
-void upb_Arena_Free(upb_Arena* a) {
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
-retry:
- while (_upb_Arena_IsTaggedPointer(poc)) {
- a = _upb_Arena_PointerFromTagged(poc);
- poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- }
-
- // compare_exchange or fetch_sub are RMW operations, which are more
- // expensive then direct loads. As an optimization, we only do RMW ops
- // when we need to update things for other threads to see.
- if (poc == _upb_Arena_TaggedFromRefcount(1)) {
- arena_dofree(a);
- return;
- }
-
- if (upb_Atomic_CompareExchangeWeak(
- &a->parent_or_count, &poc,
- _upb_Arena_TaggedFromRefcount(_upb_Arena_RefCountFromTagged(poc) - 1),
- memory_order_release, memory_order_acquire)) {
- // We were >1 and we decremented it successfully, so we are done.
- return;
- }
-
- // We failed our update, so someone has done something, retry the whole
- // process, but the failed exchange reloaded `poc` for us.
- goto retry;
-}
-
-static void _upb_Arena_DoFuseArenaLists(upb_Arena* const parent,
- upb_Arena* child) {
- upb_Arena* parent_tail = upb_Atomic_Load(&parent->tail, memory_order_relaxed);
- do {
- // Our tail might be stale, but it will always converge to the true tail.
- upb_Arena* parent_tail_next =
- upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
- while (parent_tail_next != NULL) {
- parent_tail = parent_tail_next;
- parent_tail_next =
- upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
- }
-
- upb_Arena* displaced =
- upb_Atomic_Exchange(&parent_tail->next, child, memory_order_relaxed);
- parent_tail = upb_Atomic_Load(&child->tail, memory_order_relaxed);
-
- // If we displaced something that got installed racily, we can simply
- // reinstall it on our new tail.
- child = displaced;
- } while (child != NULL);
-
- upb_Atomic_Store(&parent->tail, parent_tail, memory_order_relaxed);
-}
-
-static upb_Arena* _upb_Arena_DoFuse(upb_Arena* a1, upb_Arena* a2,
- uintptr_t* ref_delta) {
- // `parent_or_count` has two disctint modes
- // - parent pointer mode
- // - refcount mode
- //
- // In parent pointer mode, it may change what pointer it refers to in the
- // tree, but it will always approach a root. Any operation that walks the
- // tree to the root may collapse levels of the tree concurrently.
- _upb_ArenaRoot r1 = _upb_Arena_FindRoot(a1);
- _upb_ArenaRoot r2 = _upb_Arena_FindRoot(a2);
-
- if (r1.root == r2.root) return r1.root; // Already fused.
-
- // Avoid cycles by always fusing into the root with the lower address.
- if ((uintptr_t)r1.root > (uintptr_t)r2.root) {
- _upb_ArenaRoot tmp = r1;
- r1 = r2;
- r2 = tmp;
- }
-
- // The moment we install `r1` as the parent for `r2` all racing frees may
- // immediately begin decrementing `r1`'s refcount (including pending
- // increments to that refcount and their frees!). We need to add `r2`'s refs
- // now, so that `r1` can withstand any unrefs that come from r2.
- //
- // Note that while it is possible for `r2`'s refcount to increase
- // asynchronously, we will not actually do the reparenting operation below
- // unless `r2`'s refcount is unchanged from when we read it.
- //
- // Note that we may have done this previously, either to this node or a
- // different node, during a previous and failed DoFuse() attempt. But we will
- // not lose track of these refs because we always add them to our overall
- // delta.
- uintptr_t r2_untagged_count = r2.tagged_count & ~1;
- uintptr_t with_r2_refs = r1.tagged_count + r2_untagged_count;
- if (!upb_Atomic_CompareExchangeStrong(
- &r1.root->parent_or_count, &r1.tagged_count, with_r2_refs,
- memory_order_release, memory_order_acquire)) {
- return NULL;
- }
-
- // Perform the actual fuse by removing the refs from `r2` and swapping in the
- // parent pointer.
- if (!upb_Atomic_CompareExchangeStrong(
- &r2.root->parent_or_count, &r2.tagged_count,
- _upb_Arena_TaggedFromPointer(r1.root), memory_order_release,
- memory_order_acquire)) {
- // We'll need to remove the excess refs we added to r1 previously.
- *ref_delta += r2_untagged_count;
- return NULL;
- }
-
- // Now that the fuse has been performed (and can no longer fail) we need to
- // append `r2` to `r1`'s linked list.
- _upb_Arena_DoFuseArenaLists(r1.root, r2.root);
- return r1.root;
-}
-
-static bool _upb_Arena_FixupRefs(upb_Arena* new_root, uintptr_t ref_delta) {
- if (ref_delta == 0) return true; // No fixup required.
- uintptr_t poc =
- upb_Atomic_Load(&new_root->parent_or_count, memory_order_relaxed);
- if (_upb_Arena_IsTaggedPointer(poc)) return false;
- uintptr_t with_refs = poc - ref_delta;
- UPB_ASSERT(!_upb_Arena_IsTaggedPointer(with_refs));
- return upb_Atomic_CompareExchangeStrong(&new_root->parent_or_count, &poc,
- with_refs, memory_order_relaxed,
- memory_order_relaxed);
-}
-
-bool upb_Arena_Fuse(upb_Arena* a1, upb_Arena* a2) {
- if (a1 == a2) return true; // trivial fuse
-
- // Do not fuse initial blocks since we cannot lifetime extend them.
- // Any other fuse scenario is allowed.
- if (upb_Arena_HasInitialBlock(a1) || upb_Arena_HasInitialBlock(a2)) {
- return false;
- }
-
- // The number of refs we ultimately need to transfer to the new root.
- uintptr_t ref_delta = 0;
- while (true) {
- upb_Arena* new_root = _upb_Arena_DoFuse(a1, a2, &ref_delta);
- if (new_root != NULL && _upb_Arena_FixupRefs(new_root, ref_delta)) {
- return true;
- }
- }
-}
-
-bool upb_Arena_IncRefFor(upb_Arena* arena, const void* owner) {
- _upb_ArenaRoot r;
- if (upb_Arena_HasInitialBlock(arena)) return false;
-
-retry:
- r = _upb_Arena_FindRoot(arena);
- if (upb_Atomic_CompareExchangeWeak(
- &r.root->parent_or_count, &r.tagged_count,
- _upb_Arena_TaggedFromRefcount(
- _upb_Arena_RefCountFromTagged(r.tagged_count) + 1),
- memory_order_release, memory_order_acquire)) {
- // We incremented it successfully, so we are done.
- return true;
- }
- // We failed update due to parent switching on the arena.
- goto retry;
-}
-
-void upb_Arena_DecRefFor(upb_Arena* arena, const void* owner) {
- upb_Arena_Free(arena);
-}
-
-
-
-// Must be last.
-
-upb_MapInsertStatus upb_Message_InsertMapEntry(upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* map_entry_message,
- upb_Arena* arena) {
- const upb_MiniTable* map_entry_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(map_entry_mini_table);
- UPB_ASSERT(map_entry_mini_table->field_count == 2);
- const upb_MiniTableField* map_entry_key_field =
- &map_entry_mini_table->fields[0];
- const upb_MiniTableField* map_entry_value_field =
- &map_entry_mini_table->fields[1];
- // Map key/value cannot have explicit defaults,
- // hence assuming a zero default is valid.
- upb_MessageValue default_val;
- memset(&default_val, 0, sizeof(upb_MessageValue));
- upb_MessageValue map_entry_key;
- upb_MessageValue map_entry_value;
- _upb_Message_GetField(map_entry_message, map_entry_key_field, &default_val,
- &map_entry_key);
- _upb_Message_GetField(map_entry_message, map_entry_value_field, &default_val,
- &map_entry_value);
- return upb_Map_Insert(map, map_entry_key, map_entry_value, arena);
-}
-
-bool upb_Message_IsExactlyEqual(const upb_Message* m1, const upb_Message* m2,
- const upb_MiniTable* layout) {
- if (m1 == m2) return true;
-
- int opts = kUpb_EncodeOption_SkipUnknown | kUpb_EncodeOption_Deterministic;
- upb_Arena* a = upb_Arena_New();
-
- // Compare deterministically serialized payloads with no unknown fields.
- size_t size1, size2;
- char *data1, *data2;
- upb_EncodeStatus status1 = upb_Encode(m1, layout, opts, a, &data1, &size1);
- upb_EncodeStatus status2 = upb_Encode(m2, layout, opts, a, &data2, &size2);
-
- if (status1 != kUpb_EncodeStatus_Ok || status2 != kUpb_EncodeStatus_Ok) {
- // TODO: How should we fail here? (In Ruby we throw an exception.)
- upb_Arena_Free(a);
- return false;
- }
-
- const bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
- upb_Arena_Free(a);
- return ret;
-}
-
-
-#include <stdbool.h>
#include <string.h>
// Must be last.
-static bool upb_MessageField_IsMap(const upb_MiniTableField* field) {
- return upb_FieldMode_Get(field) == kUpb_FieldMode_Map;
-}
-
-static upb_StringView upb_Clone_StringView(upb_StringView str,
- upb_Arena* arena) {
- if (str.size == 0) {
- return upb_StringView_FromDataAndSize(NULL, 0);
- }
- void* cloned_data = upb_Arena_Malloc(arena, str.size);
- upb_StringView cloned_str =
- upb_StringView_FromDataAndSize(cloned_data, str.size);
- memcpy(cloned_data, str.data, str.size);
- return cloned_str;
-}
-
-static bool upb_Clone_MessageValue(void* value, upb_CType value_type,
- const upb_MiniTable* sub, upb_Arena* arena) {
- switch (value_type) {
- case kUpb_CType_Bool:
- case kUpb_CType_Float:
- case kUpb_CType_Int32:
- case kUpb_CType_UInt32:
- case kUpb_CType_Enum:
- case kUpb_CType_Double:
- case kUpb_CType_Int64:
- case kUpb_CType_UInt64:
- return true;
- case kUpb_CType_String:
- case kUpb_CType_Bytes: {
- upb_StringView source = *(upb_StringView*)value;
- int size = source.size;
- void* cloned_data = upb_Arena_Malloc(arena, size);
- if (cloned_data == NULL) {
- return false;
- }
- *(upb_StringView*)value =
- upb_StringView_FromDataAndSize(cloned_data, size);
- memcpy(cloned_data, source.data, size);
- return true;
- } break;
- case kUpb_CType_Message: {
- const upb_TaggedMessagePtr source = *(upb_TaggedMessagePtr*)value;
- bool is_empty = upb_TaggedMessagePtr_IsEmpty(source);
- if (is_empty) sub = &_kUpb_MiniTable_Empty;
- UPB_ASSERT(source);
- upb_Message* clone = upb_Message_DeepClone(
- _upb_TaggedMessagePtr_GetMessage(source), sub, arena);
- *(upb_TaggedMessagePtr*)value =
- _upb_TaggedMessagePtr_Pack(clone, is_empty);
- return clone != NULL;
- } break;
- }
- UPB_UNREACHABLE();
-}
-
-upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
- upb_CType value_type,
- const upb_MiniTable* map_entry_table,
- upb_Arena* arena) {
- upb_Map* cloned_map = _upb_Map_New(arena, map->key_size, map->val_size);
- if (cloned_map == NULL) {
- return NULL;
- }
- upb_MessageValue key, val;
- size_t iter = kUpb_Map_Begin;
- while (upb_Map_Next(map, &key, &val, &iter)) {
- const upb_MiniTableField* value_field = &map_entry_table->fields[1];
- const upb_MiniTable* value_sub =
- (value_field->UPB_PRIVATE(submsg_index) != kUpb_NoSub)
- ? upb_MiniTable_GetSubMessageTable(map_entry_table, value_field)
- : NULL;
- upb_CType value_field_type = upb_MiniTableField_CType(value_field);
- if (!upb_Clone_MessageValue(&val, value_field_type, value_sub, arena)) {
- return NULL;
- }
- if (upb_Map_Insert(cloned_map, key, val, arena) ==
- kUpb_MapInsertStatus_OutOfMemory) {
- return NULL;
- }
- }
- return cloned_map;
-}
-
-static upb_Map* upb_Message_Map_DeepClone(const upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* clone,
- upb_Arena* arena) {
- const upb_MiniTable* map_entry_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(map_entry_table);
-
- const upb_MiniTableField* key_field = &map_entry_table->fields[0];
- const upb_MiniTableField* value_field = &map_entry_table->fields[1];
-
- upb_Map* cloned_map = upb_Map_DeepClone(
- map, upb_MiniTableField_CType(key_field),
- upb_MiniTableField_CType(value_field), map_entry_table, arena);
- if (!cloned_map) {
- return NULL;
- }
- _upb_Message_SetNonExtensionField(clone, field, &cloned_map);
- return cloned_map;
-}
-
-upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
- const upb_MiniTable* sub, upb_Arena* arena) {
- size_t size = array->size;
- upb_Array* cloned_array =
- _upb_Array_New(arena, size, _upb_Array_CTypeSizeLg2(value_type));
- if (!cloned_array) {
- return NULL;
- }
- if (!_upb_Array_ResizeUninitialized(cloned_array, size, arena)) {
- return NULL;
- }
- for (size_t i = 0; i < size; ++i) {
- upb_MessageValue val = upb_Array_Get(array, i);
- if (!upb_Clone_MessageValue(&val, value_type, sub, arena)) {
- return false;
- }
- upb_Array_Set(cloned_array, i, val);
- }
- return cloned_array;
-}
-
-static bool upb_Message_Array_DeepClone(const upb_Array* array,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* clone, upb_Arena* arena) {
- _upb_MiniTableField_CheckIsArray(field);
- upb_Array* cloned_array = upb_Array_DeepClone(
- array, upb_MiniTableField_CType(field),
- upb_MiniTableField_CType(field) == kUpb_CType_Message &&
- field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
- ? upb_MiniTable_GetSubMessageTable(mini_table, field)
- : NULL,
- arena);
-
- // Clear out upb_Array* due to parent memcpy.
- _upb_Message_SetNonExtensionField(clone, field, &cloned_array);
- return true;
-}
-
-static bool upb_Clone_ExtensionValue(
- const upb_MiniTableExtension* mini_table_ext,
- const upb_Message_Extension* source, upb_Message_Extension* dest,
- upb_Arena* arena) {
- dest->data = source->data;
- return upb_Clone_MessageValue(
- &dest->data, upb_MiniTableField_CType(&mini_table_ext->field),
- mini_table_ext->sub.submsg, arena);
-}
-
-upb_Message* _upb_Message_Copy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- upb_StringView empty_string = upb_StringView_FromDataAndSize(NULL, 0);
- // Only copy message area skipping upb_Message_Internal.
- memcpy(dst, src, mini_table->size);
- for (size_t i = 0; i < mini_table->field_count; ++i) {
- const upb_MiniTableField* field = &mini_table->fields[i];
- if (!upb_IsRepeatedOrMap(field)) {
- switch (upb_MiniTableField_CType(field)) {
- case kUpb_CType_Message: {
- upb_TaggedMessagePtr tagged =
- upb_Message_GetTaggedMessagePtr(src, field, NULL);
- const upb_Message* sub_message =
- _upb_TaggedMessagePtr_GetMessage(tagged);
- if (sub_message != NULL) {
- // If the message is currently in an unlinked, "empty" state we keep
- // it that way, because we don't want to deal with decode options,
- // decode status, or possible parse failure here.
- bool is_empty = upb_TaggedMessagePtr_IsEmpty(tagged);
- const upb_MiniTable* sub_message_table =
- is_empty ? &_kUpb_MiniTable_Empty
- : upb_MiniTable_GetSubMessageTable(mini_table, field);
- upb_Message* dst_sub_message =
- upb_Message_DeepClone(sub_message, sub_message_table, arena);
- if (dst_sub_message == NULL) {
- return NULL;
- }
- _upb_Message_SetTaggedMessagePtr(
- dst, mini_table, field,
- _upb_TaggedMessagePtr_Pack(dst_sub_message, is_empty));
- }
- } break;
- case kUpb_CType_String:
- case kUpb_CType_Bytes: {
- upb_StringView str = upb_Message_GetString(src, field, empty_string);
- if (str.size != 0) {
- if (!upb_Message_SetString(
- dst, field, upb_Clone_StringView(str, arena), arena)) {
- return NULL;
- }
- }
- } break;
- default:
- // Scalar, already copied.
- break;
- }
- } else {
- if (upb_MessageField_IsMap(field)) {
- const upb_Map* map = upb_Message_GetMap(src, field);
- if (map != NULL) {
- if (!upb_Message_Map_DeepClone(map, mini_table, field, dst, arena)) {
- return NULL;
- }
- }
- } else {
- const upb_Array* array = upb_Message_GetArray(src, field);
- if (array != NULL) {
- if (!upb_Message_Array_DeepClone(array, mini_table, field, dst,
- arena)) {
- return NULL;
- }
- }
- }
- }
- }
- // Clone extensions.
- size_t ext_count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(src, &ext_count);
- for (size_t i = 0; i < ext_count; ++i) {
- const upb_Message_Extension* msg_ext = &ext[i];
- const upb_MiniTableField* field = &msg_ext->ext->field;
- upb_Message_Extension* dst_ext =
- _upb_Message_GetOrCreateExtension(dst, msg_ext->ext, arena);
- if (!dst_ext) return NULL;
- if (!upb_IsRepeatedOrMap(field)) {
- if (!upb_Clone_ExtensionValue(msg_ext->ext, msg_ext, dst_ext, arena)) {
- return NULL;
- }
- } else {
- upb_Array* msg_array = (upb_Array*)msg_ext->data.ptr;
- UPB_ASSERT(msg_array);
- upb_Array* cloned_array =
- upb_Array_DeepClone(msg_array, upb_MiniTableField_CType(field),
- msg_ext->ext->sub.submsg, arena);
- if (!cloned_array) {
- return NULL;
- }
- dst_ext->data.ptr = (void*)cloned_array;
- }
- }
-
- // Clone unknowns.
- size_t unknown_size = 0;
- const char* ptr = upb_Message_GetUnknown(src, &unknown_size);
- if (unknown_size != 0) {
- UPB_ASSERT(ptr);
- // Make a copy into destination arena.
- if (!_upb_Message_AddUnknown(dst, ptr, unknown_size, arena)) {
- return NULL;
- }
- }
- return dst;
-}
-
-bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table, upb_Arena* arena) {
- upb_Message_Clear(dst, mini_table);
- return _upb_Message_Copy(dst, src, mini_table, arena) != NULL;
-}
-
-// Deep clones a message using the provided target arena.
-//
-// Returns NULL on failure.
-upb_Message* upb_Message_DeepClone(const upb_Message* message,
- const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- upb_Message* clone = upb_Message_New(mini_table, arena);
- return _upb_Message_Copy(clone, message, mini_table, arena);
-}
-
-
-#include <string.h>
-
-// Must be last.
-
-const char _upb_Array_CTypeSizeLg2Table[] = {
- [kUpb_CType_Bool] = 0,
- [kUpb_CType_Float] = 2,
- [kUpb_CType_Int32] = 2,
- [kUpb_CType_UInt32] = 2,
- [kUpb_CType_Enum] = 2,
- [kUpb_CType_Message] = UPB_SIZE(2, 3),
- [kUpb_CType_Double] = 3,
- [kUpb_CType_Int64] = 3,
- [kUpb_CType_UInt64] = 3,
- [kUpb_CType_String] = UPB_SIZE(3, 4),
- [kUpb_CType_Bytes] = UPB_SIZE(3, 4),
-};
-
-upb_Array* upb_Array_New(upb_Arena* a, upb_CType type) {
- return _upb_Array_New(a, 4, _upb_Array_CTypeSizeLg2(type));
-}
-
-const void* upb_Array_DataPtr(const upb_Array* arr) {
- return _upb_array_ptr((upb_Array*)arr);
-}
-
-void* upb_Array_MutableDataPtr(upb_Array* arr) { return _upb_array_ptr(arr); }
-
-size_t upb_Array_Size(const upb_Array* arr) { return arr->size; }
-
-upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i) {
- upb_MessageValue ret;
- const char* data = _upb_array_constptr(arr);
- int lg2 = arr->data & 7;
- UPB_ASSERT(i < arr->size);
- memcpy(&ret, data + (i << lg2), 1 << lg2);
- return ret;
-}
-
-void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val) {
- char* data = _upb_array_ptr(arr);
- int lg2 = arr->data & 7;
- UPB_ASSERT(i < arr->size);
- memcpy(data + (i << lg2), &val, 1 << lg2);
-}
-
-bool upb_Array_Append(upb_Array* arr, upb_MessageValue val, upb_Arena* arena) {
- UPB_ASSERT(arena);
- if (!upb_Array_Resize(arr, arr->size + 1, arena)) {
- return false;
- }
- upb_Array_Set(arr, arr->size - 1, val);
- return true;
-}
-
-void upb_Array_Move(upb_Array* arr, size_t dst_idx, size_t src_idx,
- size_t count) {
- const int lg2 = arr->data & 7;
- char* data = _upb_array_ptr(arr);
- memmove(&data[dst_idx << lg2], &data[src_idx << lg2], count << lg2);
-}
-
-bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
- upb_Arena* arena) {
- UPB_ASSERT(arena);
- UPB_ASSERT(i <= arr->size);
- UPB_ASSERT(count + arr->size >= count);
- const size_t oldsize = arr->size;
- if (!upb_Array_Resize(arr, arr->size + count, arena)) {
- return false;
- }
- upb_Array_Move(arr, i + count, i, oldsize - i);
- return true;
-}
-
-/*
- * i end arr->size
- * |------------|XXXXXXXX|--------|
- */
-void upb_Array_Delete(upb_Array* arr, size_t i, size_t count) {
- const size_t end = i + count;
- UPB_ASSERT(i <= end);
- UPB_ASSERT(end <= arr->size);
- upb_Array_Move(arr, i, end, arr->size - end);
- arr->size -= count;
-}
-
-bool upb_Array_Resize(upb_Array* arr, size_t size, upb_Arena* arena) {
- const size_t oldsize = arr->size;
- if (UPB_UNLIKELY(!_upb_Array_ResizeUninitialized(arr, size, arena))) {
- return false;
- }
- const size_t newsize = arr->size;
- if (newsize > oldsize) {
- const int lg2 = arr->data & 7;
- char* data = _upb_array_ptr(arr);
- memset(data + (oldsize << lg2), 0, (newsize - oldsize) << lg2);
- }
- return true;
-}
-
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-bool _upb_array_realloc(upb_Array* arr, size_t min_capacity, upb_Arena* arena) {
- size_t new_capacity = UPB_MAX(arr->capacity, 4);
- int elem_size_lg2 = arr->data & 7;
- size_t old_bytes = arr->capacity << elem_size_lg2;
- size_t new_bytes;
- void* ptr = _upb_array_ptr(arr);
-
- // Log2 ceiling of size.
- while (new_capacity < min_capacity) new_capacity *= 2;
-
- new_bytes = new_capacity << elem_size_lg2;
- ptr = upb_Arena_Realloc(arena, ptr, old_bytes, new_bytes);
- if (!ptr) return false;
-
- arr->data = _upb_tag_arrptr(ptr, elem_size_lg2);
- arr->capacity = new_capacity;
- return true;
-}
-
-
-#include <string.h>
-
-
-// Must be last.
-
-// Strings/bytes are special-cased in maps.
-char _upb_Map_CTypeSizeTable[12] = {
- [kUpb_CType_Bool] = 1,
- [kUpb_CType_Float] = 4,
- [kUpb_CType_Int32] = 4,
- [kUpb_CType_UInt32] = 4,
- [kUpb_CType_Enum] = 4,
- [kUpb_CType_Message] = sizeof(void*),
- [kUpb_CType_Double] = 8,
- [kUpb_CType_Int64] = 8,
- [kUpb_CType_UInt64] = 8,
- [kUpb_CType_String] = UPB_MAPTYPE_STRING,
- [kUpb_CType_Bytes] = UPB_MAPTYPE_STRING,
-};
-
-upb_Map* upb_Map_New(upb_Arena* a, upb_CType key_type, upb_CType value_type) {
- return _upb_Map_New(a, _upb_Map_CTypeSize(key_type),
- _upb_Map_CTypeSize(value_type));
-}
-
-size_t upb_Map_Size(const upb_Map* map) { return _upb_Map_Size(map); }
-
-bool upb_Map_Get(const upb_Map* map, upb_MessageValue key,
- upb_MessageValue* val) {
- return _upb_Map_Get(map, &key, map->key_size, val, map->val_size);
-}
-
-void upb_Map_Clear(upb_Map* map) { _upb_Map_Clear(map); }
-
-upb_MapInsertStatus upb_Map_Insert(upb_Map* map, upb_MessageValue key,
- upb_MessageValue val, upb_Arena* arena) {
- UPB_ASSERT(arena);
- return (upb_MapInsertStatus)_upb_Map_Insert(map, &key, map->key_size, &val,
- map->val_size, arena);
-}
-
-bool upb_Map_Delete(upb_Map* map, upb_MessageValue key, upb_MessageValue* val) {
- upb_value v;
- const bool removed = _upb_Map_Delete(map, &key, map->key_size, &v);
- if (val) _upb_map_fromvalue(v, val, map->val_size);
- return removed;
-}
-
-bool upb_Map_Next(const upb_Map* map, upb_MessageValue* key,
- upb_MessageValue* val, size_t* iter) {
- upb_StringView k;
- upb_value v;
- const bool ok = upb_strtable_next2(&map->table, &k, &v, (intptr_t*)iter);
- if (ok) {
- _upb_map_fromkey(k, key, map->key_size);
- _upb_map_fromvalue(v, val, map->val_size);
- }
- return ok;
-}
-
-UPB_API void upb_Map_SetEntryValue(upb_Map* map, size_t iter,
- upb_MessageValue val) {
- upb_value v;
- _upb_map_tovalue(&val, map->val_size, &v, NULL);
- upb_strtable_setentryvalue(&map->table, iter, v);
-}
-
-bool upb_MapIterator_Next(const upb_Map* map, size_t* iter) {
- return _upb_map_next(map, iter);
-}
-
-bool upb_MapIterator_Done(const upb_Map* map, size_t iter) {
- upb_strtable_iter i;
- UPB_ASSERT(iter != kUpb_Map_Begin);
- i.t = &map->table;
- i.index = iter;
- return upb_strtable_done(&i);
-}
-
-// Returns the key and value for this entry of the map.
-upb_MessageValue upb_MapIterator_Key(const upb_Map* map, size_t iter) {
- upb_strtable_iter i;
- upb_MessageValue ret;
- i.t = &map->table;
- i.index = iter;
- _upb_map_fromkey(upb_strtable_iter_key(&i), &ret, map->key_size);
- return ret;
-}
-
-upb_MessageValue upb_MapIterator_Value(const upb_Map* map, size_t iter) {
- upb_strtable_iter i;
- upb_MessageValue ret;
- i.t = &map->table;
- i.index = iter;
- _upb_map_fromvalue(upb_strtable_iter_value(&i), &ret, map->val_size);
- return ret;
-}
-
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size) {
- upb_Map* map = upb_Arena_Malloc(a, sizeof(upb_Map));
- if (!map) return NULL;
-
- upb_strtable_init(&map->table, 4, a);
- map->key_size = key_size;
- map->val_size = value_size;
-
- return map;
-}
-
-
-
-// Must be last.
-
-static void _upb_mapsorter_getkeys(const void* _a, const void* _b, void* a_key,
- void* b_key, size_t size) {
- const upb_tabent* const* a = _a;
- const upb_tabent* const* b = _b;
- upb_StringView a_tabkey = upb_tabstrview((*a)->key);
- upb_StringView b_tabkey = upb_tabstrview((*b)->key);
- _upb_map_fromkey(a_tabkey, a_key, size);
- _upb_map_fromkey(b_tabkey, b_key, size);
-}
-
-static int _upb_mapsorter_cmpi64(const void* _a, const void* _b) {
- int64_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpu64(const void* _a, const void* _b) {
- uint64_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpi32(const void* _a, const void* _b) {
- int32_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpu32(const void* _a, const void* _b) {
- uint32_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpbool(const void* _a, const void* _b) {
- bool a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 1);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpstr(const void* _a, const void* _b) {
- upb_StringView a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, UPB_MAPTYPE_STRING);
- size_t common_size = UPB_MIN(a.size, b.size);
- int cmp = memcmp(a.data, b.data, common_size);
- if (cmp) return -cmp;
- return a.size < b.size ? -1 : a.size > b.size;
-}
-
-static int (*const compar[kUpb_FieldType_SizeOf])(const void*, const void*) = {
- [kUpb_FieldType_Int64] = _upb_mapsorter_cmpi64,
- [kUpb_FieldType_SFixed64] = _upb_mapsorter_cmpi64,
- [kUpb_FieldType_SInt64] = _upb_mapsorter_cmpi64,
-
- [kUpb_FieldType_UInt64] = _upb_mapsorter_cmpu64,
- [kUpb_FieldType_Fixed64] = _upb_mapsorter_cmpu64,
-
- [kUpb_FieldType_Int32] = _upb_mapsorter_cmpi32,
- [kUpb_FieldType_SInt32] = _upb_mapsorter_cmpi32,
- [kUpb_FieldType_SFixed32] = _upb_mapsorter_cmpi32,
- [kUpb_FieldType_Enum] = _upb_mapsorter_cmpi32,
-
- [kUpb_FieldType_UInt32] = _upb_mapsorter_cmpu32,
- [kUpb_FieldType_Fixed32] = _upb_mapsorter_cmpu32,
-
- [kUpb_FieldType_Bool] = _upb_mapsorter_cmpbool,
-
- [kUpb_FieldType_String] = _upb_mapsorter_cmpstr,
- [kUpb_FieldType_Bytes] = _upb_mapsorter_cmpstr,
-};
-
-static bool _upb_mapsorter_resize(_upb_mapsorter* s, _upb_sortedmap* sorted,
- int size) {
- sorted->start = s->size;
- sorted->pos = sorted->start;
- sorted->end = sorted->start + size;
-
- if (sorted->end > s->cap) {
- s->cap = upb_Log2CeilingSize(sorted->end);
- s->entries = realloc(s->entries, s->cap * sizeof(*s->entries));
- if (!s->entries) return false;
- }
-
- s->size = sorted->end;
- return true;
-}
-
-bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
- const upb_Map* map, _upb_sortedmap* sorted) {
- int map_size = _upb_Map_Size(map);
-
- if (!_upb_mapsorter_resize(s, sorted, map_size)) return false;
-
- // Copy non-empty entries from the table to s->entries.
- const void** dst = &s->entries[sorted->start];
- const upb_tabent* src = map->table.t.entries;
- const upb_tabent* end = src + upb_table_size(&map->table.t);
- for (; src < end; src++) {
- if (!upb_tabent_isempty(src)) {
- *dst = src;
- dst++;
- }
- }
- UPB_ASSERT(dst == &s->entries[sorted->end]);
-
- // Sort entries according to the key type.
- qsort(&s->entries[sorted->start], map_size, sizeof(*s->entries),
- compar[key_type]);
- return true;
-}
-
-static int _upb_mapsorter_cmpext(const void* _a, const void* _b) {
- const upb_Message_Extension* const* a = _a;
- const upb_Message_Extension* const* b = _b;
- uint32_t a_num = (*a)->ext->field.number;
- uint32_t b_num = (*b)->ext->field.number;
- assert(a_num != b_num);
- return a_num < b_num ? -1 : 1;
-}
-
-bool _upb_mapsorter_pushexts(_upb_mapsorter* s,
- const upb_Message_Extension* exts, size_t count,
- _upb_sortedmap* sorted) {
- if (!_upb_mapsorter_resize(s, sorted, count)) return false;
-
- for (size_t i = 0; i < count; i++) {
- s->entries[sorted->start + i] = &exts[i];
- }
-
- qsort(&s->entries[sorted->start], count, sizeof(*s->entries),
- _upb_mapsorter_cmpext);
- return true;
-}
-
-
-#include <math.h>
-
-
-// Must be last.
-
-const float kUpb_FltInfinity = INFINITY;
-const double kUpb_Infinity = INFINITY;
-const double kUpb_NaN = NAN;
-
-static const size_t overhead = sizeof(upb_Message_InternalData);
-
-upb_Message* upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- return _upb_Message_New(mini_table, arena);
-}
-
-static bool realloc_internal(upb_Message* msg, size_t need, upb_Arena* arena) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (!in->internal) {
- /* No internal data, allocate from scratch. */
- size_t size = UPB_MAX(128, upb_Log2CeilingSize(need + overhead));
- upb_Message_InternalData* internal = upb_Arena_Malloc(arena, size);
- if (!internal) return false;
- internal->size = size;
- internal->unknown_end = overhead;
- internal->ext_begin = size;
- in->internal = internal;
- } else if (in->internal->ext_begin - in->internal->unknown_end < need) {
- /* Internal data is too small, reallocate. */
- size_t new_size = upb_Log2CeilingSize(in->internal->size + need);
- size_t ext_bytes = in->internal->size - in->internal->ext_begin;
- size_t new_ext_begin = new_size - ext_bytes;
- upb_Message_InternalData* internal =
- upb_Arena_Realloc(arena, in->internal, in->internal->size, new_size);
- if (!internal) return false;
- if (ext_bytes) {
- /* Need to move extension data to the end. */
- char* ptr = (char*)internal;
- memmove(ptr + new_ext_begin, ptr + internal->ext_begin, ext_bytes);
- }
- internal->ext_begin = new_ext_begin;
- internal->size = new_size;
- in->internal = internal;
- }
- UPB_ASSERT(in->internal->ext_begin - in->internal->unknown_end >= need);
- return true;
-}
-
-bool _upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena) {
- if (!realloc_internal(msg, len, arena)) return false;
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- memcpy(UPB_PTR_AT(in->internal, in->internal->unknown_end, char), data, len);
- in->internal->unknown_end += len;
- return true;
-}
-
-void _upb_Message_DiscardUnknown_shallow(upb_Message* msg) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- in->internal->unknown_end = overhead;
- }
-}
-
-const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len) {
- const upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- *len = in->internal->unknown_end - overhead;
- return (char*)(in->internal + 1);
- } else {
- *len = 0;
- return NULL;
- }
-}
-
-void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- const char* internal_unknown_end =
- UPB_PTR_AT(in->internal, in->internal->unknown_end, char);
-#ifndef NDEBUG
- size_t full_unknown_size;
- const char* full_unknown = upb_Message_GetUnknown(msg, &full_unknown_size);
- UPB_ASSERT((uintptr_t)data >= (uintptr_t)full_unknown);
- UPB_ASSERT((uintptr_t)data < (uintptr_t)(full_unknown + full_unknown_size));
- UPB_ASSERT((uintptr_t)(data + len) > (uintptr_t)data);
- UPB_ASSERT((uintptr_t)(data + len) <= (uintptr_t)internal_unknown_end);
-#endif
- if ((data + len) != internal_unknown_end) {
- memmove((char*)data, data + len, internal_unknown_end - data - len);
- }
- in->internal->unknown_end -= len;
-}
-
-const upb_Message_Extension* _upb_Message_Getexts(const upb_Message* msg,
- size_t* count) {
- const upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- *count = (in->internal->size - in->internal->ext_begin) /
- sizeof(upb_Message_Extension);
- return UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
- } else {
- *count = 0;
- return NULL;
- }
-}
-
-const upb_Message_Extension* _upb_Message_Getext(
- const upb_Message* msg, const upb_MiniTableExtension* e) {
+const struct upb_Extension* _upb_Message_Getext(
+ const struct upb_Message* msg, const upb_MiniTableExtension* e) {
size_t n;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &n);
+ const struct upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &n);
- /* For now we use linear search exclusively to find extensions. If this
- * becomes an issue due to messages with lots of extensions, we can introduce
- * a table of some sort. */
+ // For now we use linear search exclusively to find extensions.
+ // If this becomes an issue due to messages with lots of extensions,
+ // we can introduce a table of some sort.
for (size_t i = 0; i < n; i++) {
if (ext[i].ext == e) {
return &ext[i];
@@ -6707,1110 +11214,79 @@
return NULL;
}
-upb_Message_Extension* _upb_Message_GetOrCreateExtension(
- upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* arena) {
- upb_Message_Extension* ext =
- (upb_Message_Extension*)_upb_Message_Getext(msg, e);
+const struct upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(
+ const struct upb_Message* msg, size_t* count) {
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ if (in) {
+ *count = (in->size - in->ext_begin) / sizeof(struct upb_Extension);
+ return UPB_PTR_AT(in, in->ext_begin, void);
+ } else {
+ *count = 0;
+ return NULL;
+ }
+}
+
+struct upb_Extension* _upb_Message_GetOrCreateExtension(
+ struct upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* a) {
+ struct upb_Extension* ext =
+ (struct upb_Extension*)_upb_Message_Getext(msg, e);
if (ext) return ext;
- if (!realloc_internal(msg, sizeof(upb_Message_Extension), arena)) return NULL;
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- in->internal->ext_begin -= sizeof(upb_Message_Extension);
- ext = UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
- memset(ext, 0, sizeof(upb_Message_Extension));
+ if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, sizeof(struct upb_Extension), a))
+ return NULL;
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ in->ext_begin -= sizeof(struct upb_Extension);
+ ext = UPB_PTR_AT(in, in->ext_begin, void);
+ memset(ext, 0, sizeof(struct upb_Extension));
ext->ext = e;
return ext;
}
-size_t upb_Message_ExtensionCount(const upb_Message* msg) {
- size_t count;
- _upb_Message_Getexts(msg, &count);
- return count;
-}
+#include <math.h>
+#include <string.h>
// Must be last.
-typedef struct {
- upb_MdDecoder base;
- upb_Arena* arena;
- upb_MiniTableEnum* enum_table;
- uint32_t enum_value_count;
- uint32_t enum_data_count;
- uint32_t enum_data_capacity;
-} upb_MdEnumDecoder;
+const float kUpb_FltInfinity = INFINITY;
+const double kUpb_Infinity = INFINITY;
+const double kUpb_NaN = NAN;
-static size_t upb_MiniTableEnum_Size(size_t count) {
- return sizeof(upb_MiniTableEnum) + count * sizeof(uint32_t);
-}
+bool UPB_PRIVATE(_upb_Message_Realloc)(struct upb_Message* msg, size_t need,
+ upb_Arena* a) {
+ const size_t overhead = sizeof(upb_Message_InternalData);
-static upb_MiniTableEnum* _upb_MiniTable_AddEnumDataMember(upb_MdEnumDecoder* d,
- uint32_t val) {
- if (d->enum_data_count == d->enum_data_capacity) {
- size_t old_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
- d->enum_data_capacity = UPB_MAX(2, d->enum_data_capacity * 2);
- size_t new_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
- d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz);
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
- }
- d->enum_table->data[d->enum_data_count++] = val;
- return d->enum_table;
-}
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (!in) {
+ // No internal data, allocate from scratch.
+ size_t size = UPB_MAX(128, upb_Log2CeilingSize(need + overhead));
+ in = upb_Arena_Malloc(a, size);
+ if (!in) return false;
-static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) {
- upb_MiniTableEnum* table = d->enum_table;
- d->enum_value_count++;
- if (table->value_count || (val > 512 && d->enum_value_count < val / 32)) {
- if (table->value_count == 0) {
- assert(d->enum_data_count == table->mask_limit / 32);
+ in->size = size;
+ in->unknown_end = overhead;
+ in->ext_begin = size;
+ owner->internal = in;
+ } else if (in->ext_begin - in->unknown_end < need) {
+ // Internal data is too small, reallocate.
+ size_t new_size = upb_Log2CeilingSize(in->size + need);
+ size_t ext_bytes = in->size - in->ext_begin;
+ size_t new_ext_begin = new_size - ext_bytes;
+ in = upb_Arena_Realloc(a, in, in->size, new_size);
+ if (!in) return false;
+
+ if (ext_bytes) {
+ // Need to move extension data to the end.
+ char* ptr = (char*)in;
+ memmove(ptr + new_ext_begin, ptr + in->ext_begin, ext_bytes);
}
- table = _upb_MiniTable_AddEnumDataMember(d, val);
- table->value_count++;
- } else {
- uint32_t new_mask_limit = ((val / 32) + 1) * 32;
- while (table->mask_limit < new_mask_limit) {
- table = _upb_MiniTable_AddEnumDataMember(d, 0);
- table->mask_limit += 32;
- }
- table->data[val / 32] |= 1ULL << (val % 32);
- }
-}
-
-static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum(
- upb_MdEnumDecoder* d, const char* data, size_t len) {
- // If the string is non-empty then it must begin with a version tag.
- if (len) {
- if (*data != kUpb_EncodedVersion_EnumV1) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid enum version: %c", *data);
- }
- data++;
- len--;
+ in->ext_begin = new_ext_begin;
+ in->size = new_size;
+ owner->internal = in;
}
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
-
- // Guarantee at least 64 bits of mask without checking mask size.
- d->enum_table->mask_limit = 64;
- d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
- d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
-
- d->enum_table->value_count = 0;
-
- const char* ptr = data;
- uint32_t base = 0;
-
- while (ptr < d->base.end) {
- char ch = *ptr++;
- if (ch <= kUpb_EncodedValue_MaxEnumMask) {
- uint32_t mask = _upb_FromBase92(ch);
- for (int i = 0; i < 5; i++, base++, mask >>= 1) {
- if (mask & 1) upb_MiniTableEnum_BuildValue(d, base);
- }
- } else if (kUpb_EncodedValue_MinSkip <= ch &&
- ch <= kUpb_EncodedValue_MaxSkip) {
- uint32_t skip;
- ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
- kUpb_EncodedValue_MinSkip,
- kUpb_EncodedValue_MaxSkip, &skip);
- base += skip;
- } else {
- upb_MdDecoder_ErrorJmp(&d->base, "Unexpected character: %c", ch);
- }
- }
-
- return d->enum_table;
-}
-
-static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum(
- upb_MdEnumDecoder* const decoder, const char* const data, size_t const len) {
- if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
- return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len);
-}
-
-upb_MiniTableEnum* upb_MiniDescriptor_BuildEnum(const char* data, size_t len,
- upb_Arena* arena,
- upb_Status* status) {
- upb_MdEnumDecoder decoder = {
- .base =
- {
- .end = UPB_PTRADD(data, len),
- .status = status,
- },
- .arena = arena,
- .enum_table = upb_Arena_Malloc(arena, upb_MiniTableEnum_Size(2)),
- .enum_value_count = 0,
- .enum_data_count = 0,
- .enum_data_capacity = 1,
- };
-
- return upb_MtDecoder_BuildMiniTableEnum(&decoder, data, len);
-}
-
-
-#include <inttypes.h>
-#include <stdlib.h>
-
-
-// Must be last.
-
-// Note: we sort by this number when calculating layout order.
-typedef enum {
- kUpb_LayoutItemType_OneofCase, // Oneof case.
- kUpb_LayoutItemType_OneofField, // Oneof field data.
- kUpb_LayoutItemType_Field, // Non-oneof field data.
-
- kUpb_LayoutItemType_Max = kUpb_LayoutItemType_Field,
-} upb_LayoutItemType;
-
-#define kUpb_LayoutItem_IndexSentinel ((uint16_t)-1)
-
-typedef struct {
- // Index of the corresponding field. When this is a oneof field, the field's
- // offset will be the index of the next field in a linked list.
- uint16_t field_index;
- uint16_t offset;
- upb_FieldRep rep;
- upb_LayoutItemType type;
-} upb_LayoutItem;
-
-typedef struct {
- upb_LayoutItem* data;
- size_t size;
- size_t capacity;
-} upb_LayoutItemVector;
-
-typedef struct {
- upb_MdDecoder base;
- upb_MiniTable* table;
- upb_MiniTableField* fields;
- upb_MiniTablePlatform platform;
- upb_LayoutItemVector vec;
- upb_Arena* arena;
-} upb_MtDecoder;
-
-// In each field's offset, we temporarily store a presence classifier:
-enum PresenceClass {
- kNoPresence = 0,
- kHasbitPresence = 1,
- kRequiredPresence = 2,
- kOneofBase = 3,
- // Negative values refer to a specific oneof with that number. Positive
- // values >= kOneofBase indicate that this field is in a oneof, and specify
- // the next field in this oneof's linked list.
-};
-
-static bool upb_MtDecoder_FieldIsPackable(upb_MiniTableField* field) {
- return (field->mode & kUpb_FieldMode_Array) &&
- upb_FieldType_IsPackable(field->UPB_PRIVATE(descriptortype));
-}
-
-typedef struct {
- uint16_t submsg_count;
- uint16_t subenum_count;
-} upb_SubCounts;
-
-static void upb_MiniTable_SetTypeAndSub(upb_MiniTableField* field,
- upb_FieldType type,
- upb_SubCounts* sub_counts,
- uint64_t msg_modifiers,
- bool is_proto3_enum) {
- if (is_proto3_enum) {
- UPB_ASSERT(type == kUpb_FieldType_Enum);
- type = kUpb_FieldType_Int32;
- field->mode |= kUpb_LabelFlags_IsAlternate;
- } else if (type == kUpb_FieldType_String &&
- !(msg_modifiers & kUpb_MessageModifier_ValidateUtf8)) {
- type = kUpb_FieldType_Bytes;
- field->mode |= kUpb_LabelFlags_IsAlternate;
- }
-
- field->UPB_PRIVATE(descriptortype) = type;
-
- if (upb_MtDecoder_FieldIsPackable(field) &&
- (msg_modifiers & kUpb_MessageModifier_DefaultIsPacked)) {
- field->mode |= kUpb_LabelFlags_IsPacked;
- }
-
- if (type == kUpb_FieldType_Message || type == kUpb_FieldType_Group) {
- field->UPB_PRIVATE(submsg_index) = sub_counts->submsg_count++;
- } else if (type == kUpb_FieldType_Enum) {
- // We will need to update this later once we know the total number of
- // submsg fields.
- field->UPB_PRIVATE(submsg_index) = sub_counts->subenum_count++;
- } else {
- field->UPB_PRIVATE(submsg_index) = kUpb_NoSub;
- }
-}
-
-static const char kUpb_EncodedToType[] = {
- [kUpb_EncodedType_Double] = kUpb_FieldType_Double,
- [kUpb_EncodedType_Float] = kUpb_FieldType_Float,
- [kUpb_EncodedType_Int64] = kUpb_FieldType_Int64,
- [kUpb_EncodedType_UInt64] = kUpb_FieldType_UInt64,
- [kUpb_EncodedType_Int32] = kUpb_FieldType_Int32,
- [kUpb_EncodedType_Fixed64] = kUpb_FieldType_Fixed64,
- [kUpb_EncodedType_Fixed32] = kUpb_FieldType_Fixed32,
- [kUpb_EncodedType_Bool] = kUpb_FieldType_Bool,
- [kUpb_EncodedType_String] = kUpb_FieldType_String,
- [kUpb_EncodedType_Group] = kUpb_FieldType_Group,
- [kUpb_EncodedType_Message] = kUpb_FieldType_Message,
- [kUpb_EncodedType_Bytes] = kUpb_FieldType_Bytes,
- [kUpb_EncodedType_UInt32] = kUpb_FieldType_UInt32,
- [kUpb_EncodedType_OpenEnum] = kUpb_FieldType_Enum,
- [kUpb_EncodedType_SFixed32] = kUpb_FieldType_SFixed32,
- [kUpb_EncodedType_SFixed64] = kUpb_FieldType_SFixed64,
- [kUpb_EncodedType_SInt32] = kUpb_FieldType_SInt32,
- [kUpb_EncodedType_SInt64] = kUpb_FieldType_SInt64,
- [kUpb_EncodedType_ClosedEnum] = kUpb_FieldType_Enum,
-};
-
-static void upb_MiniTable_SetField(upb_MtDecoder* d, uint8_t ch,
- upb_MiniTableField* field,
- uint64_t msg_modifiers,
- upb_SubCounts* sub_counts) {
- static const char kUpb_EncodedToFieldRep[] = {
- [kUpb_EncodedType_Double] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_Float] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_Int64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_UInt64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_Int32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_Fixed64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_Fixed32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_Bool] = kUpb_FieldRep_1Byte,
- [kUpb_EncodedType_String] = kUpb_FieldRep_StringView,
- [kUpb_EncodedType_Bytes] = kUpb_FieldRep_StringView,
- [kUpb_EncodedType_UInt32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_OpenEnum] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_SFixed32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_SFixed64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_SInt32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_SInt64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_ClosedEnum] = kUpb_FieldRep_4Byte,
- };
-
- char pointer_rep = d->platform == kUpb_MiniTablePlatform_32Bit
- ? kUpb_FieldRep_4Byte
- : kUpb_FieldRep_8Byte;
-
- int8_t type = _upb_FromBase92(ch);
- if (ch >= _upb_ToBase92(kUpb_EncodedType_RepeatedBase)) {
- type -= kUpb_EncodedType_RepeatedBase;
- field->mode = kUpb_FieldMode_Array;
- field->mode |= pointer_rep << kUpb_FieldRep_Shift;
- field->offset = kNoPresence;
- } else {
- field->mode = kUpb_FieldMode_Scalar;
- field->offset = kHasbitPresence;
- if (type == kUpb_EncodedType_Group || type == kUpb_EncodedType_Message) {
- field->mode |= pointer_rep << kUpb_FieldRep_Shift;
- } else if ((unsigned long)type >= sizeof(kUpb_EncodedToFieldRep)) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
- } else {
- field->mode |= kUpb_EncodedToFieldRep[type] << kUpb_FieldRep_Shift;
- }
- }
- if ((unsigned long)type >= sizeof(kUpb_EncodedToType)) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
- }
- upb_MiniTable_SetTypeAndSub(field, kUpb_EncodedToType[type], sub_counts,
- msg_modifiers, type == kUpb_EncodedType_OpenEnum);
-}
-
-static void upb_MtDecoder_ModifyField(upb_MtDecoder* d,
- uint32_t message_modifiers,
- uint32_t field_modifiers,
- upb_MiniTableField* field) {
- if (field_modifiers & kUpb_EncodedFieldModifier_FlipPacked) {
- if (!upb_MtDecoder_FieldIsPackable(field)) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Cannot flip packed on unpackable field %" PRIu32,
- field->number);
- }
- field->mode ^= kUpb_LabelFlags_IsPacked;
- }
-
- if (field_modifiers & kUpb_EncodedFieldModifier_FlipValidateUtf8) {
- if (field->UPB_PRIVATE(descriptortype) != kUpb_FieldType_Bytes ||
- !(field->mode & kUpb_LabelFlags_IsAlternate)) {
- upb_MdDecoder_ErrorJmp(
- &d->base,
- "Cannot flip ValidateUtf8 on field %" PRIu32 ", type=%d, mode=%d",
- field->number, (int)field->UPB_PRIVATE(descriptortype),
- (int)field->mode);
- }
- field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_String;
- field->mode &= ~kUpb_LabelFlags_IsAlternate;
- }
-
- bool singular = field_modifiers & kUpb_EncodedFieldModifier_IsProto3Singular;
- bool required = field_modifiers & kUpb_EncodedFieldModifier_IsRequired;
-
- // Validate.
- if ((singular || required) && field->offset != kHasbitPresence) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Invalid modifier(s) for repeated field %" PRIu32,
- field->number);
- }
- if (singular && required) {
- upb_MdDecoder_ErrorJmp(
- &d->base, "Field %" PRIu32 " cannot be both singular and required",
- field->number);
- }
-
- if (singular) field->offset = kNoPresence;
- if (required) {
- field->offset = kRequiredPresence;
- }
-}
-
-static void upb_MtDecoder_PushItem(upb_MtDecoder* d, upb_LayoutItem item) {
- if (d->vec.size == d->vec.capacity) {
- size_t new_cap = UPB_MAX(8, d->vec.size * 2);
- d->vec.data = realloc(d->vec.data, new_cap * sizeof(*d->vec.data));
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->vec.data);
- d->vec.capacity = new_cap;
- }
- d->vec.data[d->vec.size++] = item;
-}
-
-static void upb_MtDecoder_PushOneof(upb_MtDecoder* d, upb_LayoutItem item) {
- if (item.field_index == kUpb_LayoutItem_IndexSentinel) {
- upb_MdDecoder_ErrorJmp(&d->base, "Empty oneof");
- }
- item.field_index -= kOneofBase;
-
- // Push oneof data.
- item.type = kUpb_LayoutItemType_OneofField;
- upb_MtDecoder_PushItem(d, item);
-
- // Push oneof case.
- item.rep = kUpb_FieldRep_4Byte; // Field Number.
- item.type = kUpb_LayoutItemType_OneofCase;
- upb_MtDecoder_PushItem(d, item);
-}
-
-size_t upb_MtDecoder_SizeOfRep(upb_FieldRep rep,
- upb_MiniTablePlatform platform) {
- static const uint8_t kRepToSize32[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 8,
- [kUpb_FieldRep_8Byte] = 8,
- };
- static const uint8_t kRepToSize64[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 16,
- [kUpb_FieldRep_8Byte] = 8,
- };
- UPB_ASSERT(sizeof(upb_StringView) ==
- UPB_SIZE(kRepToSize32, kRepToSize64)[kUpb_FieldRep_StringView]);
- return platform == kUpb_MiniTablePlatform_32Bit ? kRepToSize32[rep]
- : kRepToSize64[rep];
-}
-
-size_t upb_MtDecoder_AlignOfRep(upb_FieldRep rep,
- upb_MiniTablePlatform platform) {
- static const uint8_t kRepToAlign32[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 4,
- [kUpb_FieldRep_8Byte] = 8,
- };
- static const uint8_t kRepToAlign64[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 8,
- [kUpb_FieldRep_8Byte] = 8,
- };
- UPB_ASSERT(UPB_ALIGN_OF(upb_StringView) ==
- UPB_SIZE(kRepToAlign32, kRepToAlign64)[kUpb_FieldRep_StringView]);
- return platform == kUpb_MiniTablePlatform_32Bit ? kRepToAlign32[rep]
- : kRepToAlign64[rep];
-}
-
-static const char* upb_MtDecoder_DecodeOneofField(upb_MtDecoder* d,
- const char* ptr,
- char first_ch,
- upb_LayoutItem* item) {
- uint32_t field_num;
- ptr = upb_MdDecoder_DecodeBase92Varint(
- &d->base, ptr, first_ch, kUpb_EncodedValue_MinOneofField,
- kUpb_EncodedValue_MaxOneofField, &field_num);
- upb_MiniTableField* f =
- (void*)upb_MiniTable_FindFieldByNumber(d->table, field_num);
-
- if (!f) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Couldn't add field number %" PRIu32
- " to oneof, no such field number.",
- field_num);
- }
- if (f->offset != kHasbitPresence) {
- upb_MdDecoder_ErrorJmp(
- &d->base,
- "Cannot add repeated, required, or singular field %" PRIu32
- " to oneof.",
- field_num);
- }
-
- // Oneof storage must be large enough to accommodate the largest member.
- int rep = f->mode >> kUpb_FieldRep_Shift;
- if (upb_MtDecoder_SizeOfRep(rep, d->platform) >
- upb_MtDecoder_SizeOfRep(item->rep, d->platform)) {
- item->rep = rep;
- }
- // Prepend this field to the linked list.
- f->offset = item->field_index;
- item->field_index = (f - d->fields) + kOneofBase;
- return ptr;
-}
-
-static const char* upb_MtDecoder_DecodeOneofs(upb_MtDecoder* d,
- const char* ptr) {
- upb_LayoutItem item = {.rep = 0,
- .field_index = kUpb_LayoutItem_IndexSentinel};
- while (ptr < d->base.end) {
- char ch = *ptr++;
- if (ch == kUpb_EncodedValue_FieldSeparator) {
- // Field separator, no action needed.
- } else if (ch == kUpb_EncodedValue_OneofSeparator) {
- // End of oneof.
- upb_MtDecoder_PushOneof(d, item);
- item.field_index = kUpb_LayoutItem_IndexSentinel; // Move to next oneof.
- } else {
- ptr = upb_MtDecoder_DecodeOneofField(d, ptr, ch, &item);
- }
- }
-
- // Push final oneof.
- upb_MtDecoder_PushOneof(d, item);
- return ptr;
-}
-
-static const char* upb_MtDecoder_ParseModifier(upb_MtDecoder* d,
- const char* ptr, char first_ch,
- upb_MiniTableField* last_field,
- uint64_t* msg_modifiers) {
- uint32_t mod;
- ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, first_ch,
- kUpb_EncodedValue_MinModifier,
- kUpb_EncodedValue_MaxModifier, &mod);
- if (last_field) {
- upb_MtDecoder_ModifyField(d, *msg_modifiers, mod, last_field);
- } else {
- if (!d->table) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Extensions cannot have message modifiers");
- }
- *msg_modifiers = mod;
- }
-
- return ptr;
-}
-
-static void upb_MtDecoder_AllocateSubs(upb_MtDecoder* d,
- upb_SubCounts sub_counts) {
- uint32_t total_count = sub_counts.submsg_count + sub_counts.subenum_count;
- size_t subs_bytes = sizeof(*d->table->subs) * total_count;
- upb_MiniTableSub* subs = upb_Arena_Malloc(d->arena, subs_bytes);
- upb_MdDecoder_CheckOutOfMemory(&d->base, subs);
- uint32_t i = 0;
- for (; i < sub_counts.submsg_count; i++) {
- subs[i].submsg = &_kUpb_MiniTable_Empty;
- }
- if (sub_counts.subenum_count) {
- upb_MiniTableField* f = d->fields;
- upb_MiniTableField* end_f = f + d->table->field_count;
- for (; f < end_f; f++) {
- if (f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum) {
- f->UPB_PRIVATE(submsg_index) += sub_counts.submsg_count;
- }
- }
- for (; i < sub_counts.submsg_count + sub_counts.subenum_count; i++) {
- subs[i].subenum = NULL;
- }
- }
- d->table->subs = subs;
-}
-
-static const char* upb_MtDecoder_Parse(upb_MtDecoder* d, const char* ptr,
- size_t len, void* fields,
- size_t field_size, uint16_t* field_count,
- upb_SubCounts* sub_counts) {
- uint64_t msg_modifiers = 0;
- uint32_t last_field_number = 0;
- upb_MiniTableField* last_field = NULL;
- bool need_dense_below = d->table != NULL;
-
- d->base.end = UPB_PTRADD(ptr, len);
-
- while (ptr < d->base.end) {
- char ch = *ptr++;
- if (ch <= kUpb_EncodedValue_MaxField) {
- if (!d->table && last_field) {
- // For extensions, consume only a single field and then return.
- return --ptr;
- }
- upb_MiniTableField* field = fields;
- *field_count += 1;
- fields = (char*)fields + field_size;
- field->number = ++last_field_number;
- last_field = field;
- upb_MiniTable_SetField(d, ch, field, msg_modifiers, sub_counts);
- } else if (kUpb_EncodedValue_MinModifier <= ch &&
- ch <= kUpb_EncodedValue_MaxModifier) {
- ptr = upb_MtDecoder_ParseModifier(d, ptr, ch, last_field, &msg_modifiers);
- if (msg_modifiers & kUpb_MessageModifier_IsExtendable) {
- d->table->ext |= kUpb_ExtMode_Extendable;
- }
- } else if (ch == kUpb_EncodedValue_End) {
- if (!d->table) {
- upb_MdDecoder_ErrorJmp(&d->base, "Extensions cannot have oneofs.");
- }
- ptr = upb_MtDecoder_DecodeOneofs(d, ptr);
- } else if (kUpb_EncodedValue_MinSkip <= ch &&
- ch <= kUpb_EncodedValue_MaxSkip) {
- if (need_dense_below) {
- d->table->dense_below = d->table->field_count;
- need_dense_below = false;
- }
- uint32_t skip;
- ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
- kUpb_EncodedValue_MinSkip,
- kUpb_EncodedValue_MaxSkip, &skip);
- last_field_number += skip;
- last_field_number--; // Next field seen will increment.
- } else {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid char: %c", ch);
- }
- }
-
- if (need_dense_below) {
- d->table->dense_below = d->table->field_count;
- }
-
- return ptr;
-}
-
-static void upb_MtDecoder_ParseMessage(upb_MtDecoder* d, const char* data,
- size_t len) {
- // Buffer length is an upper bound on the number of fields. We will return
- // what we don't use.
- d->fields = upb_Arena_Malloc(d->arena, sizeof(*d->fields) * len);
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->fields);
-
- upb_SubCounts sub_counts = {0, 0};
- d->table->field_count = 0;
- d->table->fields = d->fields;
- upb_MtDecoder_Parse(d, data, len, d->fields, sizeof(*d->fields),
- &d->table->field_count, &sub_counts);
-
- upb_Arena_ShrinkLast(d->arena, d->fields, sizeof(*d->fields) * len,
- sizeof(*d->fields) * d->table->field_count);
- d->table->fields = d->fields;
- upb_MtDecoder_AllocateSubs(d, sub_counts);
-}
-
-int upb_MtDecoder_CompareFields(const void* _a, const void* _b) {
- const upb_LayoutItem* a = _a;
- const upb_LayoutItem* b = _b;
- // Currently we just sort by:
- // 1. rep (smallest fields first)
- // 2. type (oneof cases first)
- // 2. field_index (smallest numbers first)
- // The main goal of this is to reduce space lost to padding.
- // Later we may have more subtle reasons to prefer a different ordering.
- const int rep_bits = upb_Log2Ceiling(kUpb_FieldRep_Max);
- const int type_bits = upb_Log2Ceiling(kUpb_LayoutItemType_Max);
- const int idx_bits = (sizeof(a->field_index) * 8);
- UPB_ASSERT(idx_bits + rep_bits + type_bits < 32);
-#define UPB_COMBINE(rep, ty, idx) (((rep << type_bits) | ty) << idx_bits) | idx
- uint32_t a_packed = UPB_COMBINE(a->rep, a->type, a->field_index);
- uint32_t b_packed = UPB_COMBINE(b->rep, b->type, b->field_index);
- assert(a_packed != b_packed);
-#undef UPB_COMBINE
- return a_packed < b_packed ? -1 : 1;
-}
-
-static bool upb_MtDecoder_SortLayoutItems(upb_MtDecoder* d) {
- // Add items for all non-oneof fields (oneofs were already added).
- int n = d->table->field_count;
- for (int i = 0; i < n; i++) {
- upb_MiniTableField* f = &d->fields[i];
- if (f->offset >= kOneofBase) continue;
- upb_LayoutItem item = {.field_index = i,
- .rep = f->mode >> kUpb_FieldRep_Shift,
- .type = kUpb_LayoutItemType_Field};
- upb_MtDecoder_PushItem(d, item);
- }
-
- if (d->vec.size) {
- qsort(d->vec.data, d->vec.size, sizeof(*d->vec.data),
- upb_MtDecoder_CompareFields);
- }
-
- return true;
-}
-
-static size_t upb_MiniTable_DivideRoundUp(size_t n, size_t d) {
- return (n + d - 1) / d;
-}
-
-static void upb_MtDecoder_AssignHasbits(upb_MtDecoder* d) {
- upb_MiniTable* ret = d->table;
- int n = ret->field_count;
- int last_hasbit = 0; // 0 cannot be used.
-
- // First assign required fields, which must have the lowest hasbits.
- for (int i = 0; i < n; i++) {
- upb_MiniTableField* field = (upb_MiniTableField*)&ret->fields[i];
- if (field->offset == kRequiredPresence) {
- field->presence = ++last_hasbit;
- } else if (field->offset == kNoPresence) {
- field->presence = 0;
- }
- }
- ret->required_count = last_hasbit;
-
- if (ret->required_count > 63) {
- upb_MdDecoder_ErrorJmp(&d->base, "Too many required fields");
- }
-
- // Next assign non-required hasbit fields.
- for (int i = 0; i < n; i++) {
- upb_MiniTableField* field = (upb_MiniTableField*)&ret->fields[i];
- if (field->offset == kHasbitPresence) {
- field->presence = ++last_hasbit;
- }
- }
-
- ret->size = last_hasbit ? upb_MiniTable_DivideRoundUp(last_hasbit + 1, 8) : 0;
-}
-
-size_t upb_MtDecoder_Place(upb_MtDecoder* d, upb_FieldRep rep) {
- size_t size = upb_MtDecoder_SizeOfRep(rep, d->platform);
- size_t align = upb_MtDecoder_AlignOfRep(rep, d->platform);
- size_t ret = UPB_ALIGN_UP(d->table->size, align);
- static const size_t max = UINT16_MAX;
- size_t new_size = ret + size;
- if (new_size > max) {
- upb_MdDecoder_ErrorJmp(
- &d->base, "Message size exceeded maximum size of %zu bytes", max);
- }
- d->table->size = new_size;
- return ret;
-}
-
-static void upb_MtDecoder_AssignOffsets(upb_MtDecoder* d) {
- upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
-
- // Compute offsets.
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- item->offset = upb_MtDecoder_Place(d, item->rep);
- }
-
- // Assign oneof case offsets. We must do these first, since assigning
- // actual offsets will overwrite the links of the linked list.
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- if (item->type != kUpb_LayoutItemType_OneofCase) continue;
- upb_MiniTableField* f = &d->fields[item->field_index];
- while (true) {
- f->presence = ~item->offset;
- if (f->offset == kUpb_LayoutItem_IndexSentinel) break;
- UPB_ASSERT(f->offset - kOneofBase < d->table->field_count);
- f = &d->fields[f->offset - kOneofBase];
- }
- }
-
- // Assign offsets.
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- upb_MiniTableField* f = &d->fields[item->field_index];
- switch (item->type) {
- case kUpb_LayoutItemType_OneofField:
- while (true) {
- uint16_t next_offset = f->offset;
- f->offset = item->offset;
- if (next_offset == kUpb_LayoutItem_IndexSentinel) break;
- f = &d->fields[next_offset - kOneofBase];
- }
- break;
- case kUpb_LayoutItemType_Field:
- f->offset = item->offset;
- break;
- default:
- break;
- }
- }
-
- // The fasttable parser (supported on 64-bit only) depends on this being a
- // multiple of 8 in order to satisfy UPB_MALLOC_ALIGN, which is also 8.
- //
- // On 32-bit we could potentially make this smaller, but there is no
- // compelling reason to optimize this right now.
- d->table->size = UPB_ALIGN_UP(d->table->size, 8);
-}
-
-static void upb_MtDecoder_ValidateEntryField(upb_MtDecoder* d,
- const upb_MiniTableField* f,
- uint32_t expected_num) {
- const char* name = expected_num == 1 ? "key" : "val";
- if (f->number != expected_num) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "map %s did not have expected number (%d vs %d)",
- name, expected_num, (int)f->number);
- }
-
- if (upb_IsRepeatedOrMap(f)) {
- upb_MdDecoder_ErrorJmp(
- &d->base, "map %s cannot be repeated or map, or be in oneof", name);
- }
-
- uint32_t not_ok_types;
- if (expected_num == 1) {
- not_ok_types = (1 << kUpb_FieldType_Float) | (1 << kUpb_FieldType_Double) |
- (1 << kUpb_FieldType_Message) | (1 << kUpb_FieldType_Group) |
- (1 << kUpb_FieldType_Bytes) | (1 << kUpb_FieldType_Enum);
- } else {
- not_ok_types = 1 << kUpb_FieldType_Group;
- }
-
- if ((1 << upb_MiniTableField_Type(f)) & not_ok_types) {
- upb_MdDecoder_ErrorJmp(&d->base, "map %s cannot have type %d", name,
- (int)f->UPB_PRIVATE(descriptortype));
- }
-}
-
-static void upb_MtDecoder_ParseMap(upb_MtDecoder* d, const char* data,
- size_t len) {
- upb_MtDecoder_ParseMessage(d, data, len);
- upb_MtDecoder_AssignHasbits(d);
-
- if (UPB_UNLIKELY(d->table->field_count != 2)) {
- upb_MdDecoder_ErrorJmp(&d->base, "%hu fields in map",
- d->table->field_count);
- UPB_UNREACHABLE();
- }
-
- upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- if (item->type == kUpb_LayoutItemType_OneofCase) {
- upb_MdDecoder_ErrorJmp(&d->base, "Map entry cannot have oneof");
- }
- }
-
- upb_MtDecoder_ValidateEntryField(d, &d->table->fields[0], 1);
- upb_MtDecoder_ValidateEntryField(d, &d->table->fields[1], 2);
-
- // Map entries have a pre-determined layout, regardless of types.
- // NOTE: sync with mini_table/message_internal.h.
- const size_t kv_size = d->platform == kUpb_MiniTablePlatform_32Bit ? 8 : 16;
- const size_t hasbit_size = 8;
- d->fields[0].offset = hasbit_size;
- d->fields[1].offset = hasbit_size + kv_size;
- d->table->size = UPB_ALIGN_UP(hasbit_size + kv_size + kv_size, 8);
-
- // Map entries have a special bit set to signal it's a map entry, used in
- // upb_MiniTable_SetSubMessage() below.
- d->table->ext |= kUpb_ExtMode_IsMapEntry;
-}
-
-static void upb_MtDecoder_ParseMessageSet(upb_MtDecoder* d, const char* data,
- size_t len) {
- if (len > 0) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid message set encode length: %zu",
- len);
- }
-
- upb_MiniTable* ret = d->table;
- ret->size = 0;
- ret->field_count = 0;
- ret->ext = kUpb_ExtMode_IsMessageSet;
- ret->dense_below = 0;
- ret->table_mask = -1;
- ret->required_count = 0;
-}
-
-static upb_MiniTable* upb_MtDecoder_DoBuildMiniTableWithBuf(
- upb_MtDecoder* decoder, const char* data, size_t len, void** buf,
- size_t* buf_size) {
- upb_MdDecoder_CheckOutOfMemory(&decoder->base, decoder->table);
-
- decoder->table->size = 0;
- decoder->table->field_count = 0;
- decoder->table->ext = kUpb_ExtMode_NonExtendable;
- decoder->table->dense_below = 0;
- decoder->table->table_mask = -1;
- decoder->table->required_count = 0;
-
- // Strip off and verify the version tag.
- if (!len--) goto done;
- const char vers = *data++;
-
- switch (vers) {
- case kUpb_EncodedVersion_MapV1:
- upb_MtDecoder_ParseMap(decoder, data, len);
- break;
-
- case kUpb_EncodedVersion_MessageV1:
- upb_MtDecoder_ParseMessage(decoder, data, len);
- upb_MtDecoder_AssignHasbits(decoder);
- upb_MtDecoder_SortLayoutItems(decoder);
- upb_MtDecoder_AssignOffsets(decoder);
- break;
-
- case kUpb_EncodedVersion_MessageSetV1:
- upb_MtDecoder_ParseMessageSet(decoder, data, len);
- break;
-
- default:
- upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid message version: %c",
- vers);
- }
-
-done:
- *buf = decoder->vec.data;
- *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
- return decoder->table;
-}
-
-static upb_MiniTable* upb_MtDecoder_BuildMiniTableWithBuf(
- upb_MtDecoder* const decoder, const char* const data, const size_t len,
- void** const buf, size_t* const buf_size) {
- if (UPB_SETJMP(decoder->base.err) != 0) {
- *buf = decoder->vec.data;
- *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
- return NULL;
- }
-
- return upb_MtDecoder_DoBuildMiniTableWithBuf(decoder, data, len, buf,
- buf_size);
-}
-
-upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
- upb_MiniTablePlatform platform,
- upb_Arena* arena, void** buf,
- size_t* buf_size,
- upb_Status* status) {
- upb_MtDecoder decoder = {
- .base = {.status = status},
- .platform = platform,
- .vec =
- {
- .data = *buf,
- .capacity = *buf_size / sizeof(*decoder.vec.data),
- .size = 0,
- },
- .arena = arena,
- .table = upb_Arena_Malloc(arena, sizeof(*decoder.table)),
- };
-
- return upb_MtDecoder_BuildMiniTableWithBuf(&decoder, data, len, buf,
- buf_size);
-}
-
-static const char* upb_MtDecoder_DoBuildMiniTableExtension(
- upb_MtDecoder* decoder, const char* data, size_t len,
- upb_MiniTableExtension* ext, const upb_MiniTable* extendee,
- upb_MiniTableSub sub) {
- // If the string is non-empty then it must begin with a version tag.
- if (len) {
- if (*data != kUpb_EncodedVersion_ExtensionV1) {
- upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid ext version: %c", *data);
- }
- data++;
- len--;
- }
-
- uint16_t count = 0;
- upb_SubCounts sub_counts = {0, 0};
- const char* ret = upb_MtDecoder_Parse(decoder, data, len, ext, sizeof(*ext),
- &count, &sub_counts);
- if (!ret || count != 1) return NULL;
-
- upb_MiniTableField* f = &ext->field;
-
- f->mode |= kUpb_LabelFlags_IsExtension;
- f->offset = 0;
- f->presence = 0;
-
- if (extendee->ext & kUpb_ExtMode_IsMessageSet) {
- // Extensions of MessageSet must be messages.
- if (!upb_IsSubMessage(f)) return NULL;
-
- // Extensions of MessageSet must be non-repeating.
- if ((f->mode & kUpb_FieldMode_Mask) == kUpb_FieldMode_Array) return NULL;
- }
-
- ext->extendee = extendee;
- ext->sub = sub;
-
- return ret;
-}
-
-static const char* upb_MtDecoder_BuildMiniTableExtension(
- upb_MtDecoder* const decoder, const char* const data, const size_t len,
- upb_MiniTableExtension* const ext, const upb_MiniTable* const extendee,
- const upb_MiniTableSub sub) {
- if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
- return upb_MtDecoder_DoBuildMiniTableExtension(decoder, data, len, ext,
- extendee, sub);
-}
-
-const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
- upb_MiniTableExtension* ext,
- const upb_MiniTable* extendee,
- upb_MiniTableSub sub,
- upb_MiniTablePlatform platform,
- upb_Status* status) {
- upb_MtDecoder decoder = {
- .base = {.status = status},
- .arena = NULL,
- .table = NULL,
- .platform = platform,
- };
-
- return upb_MtDecoder_BuildMiniTableExtension(&decoder, data, len, ext,
- extendee, sub);
-}
-
-upb_MiniTableExtension* _upb_MiniTableExtension_Build(
- const char* data, size_t len, const upb_MiniTable* extendee,
- upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
- upb_Status* status) {
- upb_MiniTableExtension* ext =
- upb_Arena_Malloc(arena, sizeof(upb_MiniTableExtension));
- if (UPB_UNLIKELY(!ext)) return NULL;
-
- const char* ptr = _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
- platform, status);
- if (UPB_UNLIKELY(!ptr)) return NULL;
-
- return ext;
-}
-
-upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
- upb_MiniTablePlatform platform,
- upb_Arena* arena, upb_Status* status) {
- void* buf = NULL;
- size_t size = 0;
- upb_MiniTable* ret = upb_MiniTable_BuildWithBuf(data, len, platform, arena,
- &buf, &size, status);
- free(buf);
- return ret;
-}
-
-
-// Must be last.
-
-bool upb_MiniTable_SetSubMessage(upb_MiniTable* table,
- upb_MiniTableField* field,
- const upb_MiniTable* sub) {
- UPB_ASSERT((uintptr_t)table->fields <= (uintptr_t)field &&
- (uintptr_t)field <
- (uintptr_t)(table->fields + table->field_count));
- UPB_ASSERT(sub);
-
- const bool sub_is_map = sub->ext & kUpb_ExtMode_IsMapEntry;
-
- switch (field->UPB_PRIVATE(descriptortype)) {
- case kUpb_FieldType_Message:
- if (sub_is_map) {
- const bool table_is_map = table->ext & kUpb_ExtMode_IsMapEntry;
- if (UPB_UNLIKELY(table_is_map)) return false;
-
- field->mode = (field->mode & ~kUpb_FieldMode_Mask) | kUpb_FieldMode_Map;
- }
- break;
-
- case kUpb_FieldType_Group:
- if (UPB_UNLIKELY(sub_is_map)) return false;
- break;
-
- default:
- return false;
- }
-
- upb_MiniTableSub* table_sub =
- (void*)&table->subs[field->UPB_PRIVATE(submsg_index)];
- // TODO: Add this assert back once YouTube is updated to not call
- // this function repeatedly.
- // UPB_ASSERT(table_sub->submsg == &_kUpb_MiniTable_Empty);
- table_sub->submsg = sub;
- return true;
-}
-
-bool upb_MiniTable_SetSubEnum(upb_MiniTable* table, upb_MiniTableField* field,
- const upb_MiniTableEnum* sub) {
- UPB_ASSERT((uintptr_t)table->fields <= (uintptr_t)field &&
- (uintptr_t)field <
- (uintptr_t)(table->fields + table->field_count));
- UPB_ASSERT(sub);
-
- upb_MiniTableSub* table_sub =
- (void*)&table->subs[field->UPB_PRIVATE(submsg_index)];
- table_sub->subenum = sub;
- return true;
-}
-
-uint32_t upb_MiniTable_GetSubList(const upb_MiniTable* mt,
- const upb_MiniTableField** subs) {
- uint32_t msg_count = 0;
- uint32_t enum_count = 0;
-
- for (int i = 0; i < mt->field_count; i++) {
- const upb_MiniTableField* f = &mt->fields[i];
- if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
- *subs = f;
- ++subs;
- msg_count++;
- }
- }
-
- for (int i = 0; i < mt->field_count; i++) {
- const upb_MiniTableField* f = &mt->fields[i];
- if (upb_MiniTableField_CType(f) == kUpb_CType_Enum) {
- *subs = f;
- ++subs;
- enum_count++;
- }
- }
-
- return (msg_count << 16) | enum_count;
-}
-
-// The list of sub_tables and sub_enums must exactly match the number and order
-// of sub-message fields and sub-enum fields given by upb_MiniTable_GetSubList()
-// above.
-bool upb_MiniTable_Link(upb_MiniTable* mt, const upb_MiniTable** sub_tables,
- size_t sub_table_count,
- const upb_MiniTableEnum** sub_enums,
- size_t sub_enum_count) {
- uint32_t msg_count = 0;
- uint32_t enum_count = 0;
-
- for (int i = 0; i < mt->field_count; i++) {
- upb_MiniTableField* f = (upb_MiniTableField*)&mt->fields[i];
- if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
- const upb_MiniTable* sub = sub_tables[msg_count++];
- if (msg_count > sub_table_count) return false;
- if (sub != NULL) {
- if (!upb_MiniTable_SetSubMessage(mt, f, sub)) return false;
- }
- }
- }
-
- for (int i = 0; i < mt->field_count; i++) {
- upb_MiniTableField* f = (upb_MiniTableField*)&mt->fields[i];
- if (upb_MiniTableField_IsClosedEnum(f)) {
- const upb_MiniTableEnum* sub = sub_enums[enum_count++];
- if (enum_count > sub_enum_count) return false;
- if (sub != NULL) {
- if (!upb_MiniTable_SetSubEnum(mt, f, sub)) return false;
- }
- }
- }
-
+ UPB_ASSERT(in->ext_begin - in->unknown_end >= need);
return true;
}
@@ -8145,148 +11621,20 @@
}
+#include <stddef.h>
// Must be last.
-#define EXTREG_KEY_SIZE (sizeof(upb_MiniTable*) + sizeof(uint32_t))
-
-struct upb_ExtensionRegistry {
- upb_Arena* arena;
- upb_strtable exts; // Key is upb_MiniTable* concatenated with fieldnum.
-};
-
-static void extreg_key(char* buf, const upb_MiniTable* l, uint32_t fieldnum) {
- memcpy(buf, &l, sizeof(l));
- memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum));
-}
-
-upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena) {
- upb_ExtensionRegistry* r = upb_Arena_Malloc(arena, sizeof(*r));
- if (!r) return NULL;
- r->arena = arena;
- if (!upb_strtable_init(&r->exts, 8, arena)) return NULL;
- return r;
-}
-
-UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension* e) {
- char buf[EXTREG_KEY_SIZE];
- extreg_key(buf, e->extendee, e->field.number);
- if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
- return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
- upb_value_constptr(e), r->arena);
-}
-
-bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension** e,
- size_t count) {
- const upb_MiniTableExtension** start = e;
- const upb_MiniTableExtension** end = UPB_PTRADD(e, count);
- for (; e < end; e++) {
- if (!upb_ExtensionRegistry_Add(r, *e)) goto failure;
- }
- return true;
-
-failure:
- // Back out the entries previously added.
- for (end = e, e = start; e < end; e++) {
- const upb_MiniTableExtension* ext = *e;
- char buf[EXTREG_KEY_SIZE];
- extreg_key(buf, ext->extendee, ext->field.number);
- upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
- }
- return false;
-}
-
-const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
- const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num) {
- char buf[EXTREG_KEY_SIZE];
- upb_value v;
- extreg_key(buf, t, num);
- if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) {
- return upb_value_getconstptr(v);
- } else {
- return NULL;
- }
-}
-
-
-#include <inttypes.h>
-
-
-// Must be last.
-
-const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
- const upb_MiniTable* t, uint32_t number) {
- const size_t i = ((size_t)number) - 1; // 0 wraps to SIZE_MAX
-
- // Ideal case: index into dense fields
- if (i < t->dense_below) {
- UPB_ASSERT(t->fields[i].number == number);
- return &t->fields[i];
- }
-
- // Slow case: binary search
- int lo = t->dense_below;
- int hi = t->field_count - 1;
- while (lo <= hi) {
- int mid = (lo + hi) / 2;
- uint32_t num = t->fields[mid].number;
- if (num < number) {
- lo = mid + 1;
- continue;
- }
- if (num > number) {
- hi = mid - 1;
- continue;
- }
- return &t->fields[mid];
- }
- return NULL;
-}
-
-static bool upb_MiniTable_Is_Oneof(const upb_MiniTableField* f) {
- return f->presence < 0;
-}
-
-const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
- const upb_MiniTableField* f) {
- if (UPB_UNLIKELY(!upb_MiniTable_Is_Oneof(f))) {
- return NULL;
- }
- const upb_MiniTableField* ptr = &m->fields[0];
- const upb_MiniTableField* end = &m->fields[m->field_count];
- for (; ptr < end; ptr++) {
- if (ptr->presence == (*f).presence) {
- return ptr;
- }
- }
- return NULL;
-}
-
-bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
- const upb_MiniTableField** f) {
- const upb_MiniTableField* ptr = *f;
- const upb_MiniTableField* end = &m->fields[m->field_count];
- while (++ptr < end) {
- if (ptr->presence == (*f)->presence) {
- *f = ptr;
- return true;
- }
- }
- return false;
-}
-
-
-const struct upb_MiniTable _kUpb_MiniTable_Empty = {
- .subs = NULL,
- .fields = NULL,
- .size = 0,
- .field_count = 0,
- .ext = kUpb_ExtMode_NonExtendable,
- .dense_below = 0,
- .table_mask = -1,
- .required_count = 0,
+// A MiniTable for an empty message, used for unlinked sub-messages.
+const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty) = {
+ .UPB_PRIVATE(subs) = NULL,
+ .UPB_PRIVATE(fields) = NULL,
+ .UPB_PRIVATE(size) = 0,
+ .UPB_PRIVATE(field_count) = 0,
+ .UPB_PRIVATE(ext) = kUpb_ExtMode_NonExtendable,
+ .UPB_PRIVATE(dense_below) = 0,
+ .UPB_PRIVATE(table_mask) = -1,
+ .UPB_PRIVATE(required_count) = 0,
};
@@ -8333,8 +11681,12 @@
if (!s->extreg) goto err;
s->platform = kUpb_MiniTablePlatform_Native;
- s->feature_set_defaults = UPB_DESC(FeatureSetDefaults_parse)(
- serialized_defaults, sizeof(serialized_defaults) - 1, s->arena);
+
+ upb_Status status;
+ if (!upb_DefPool_SetFeatureSetDefaults(
+ s, serialized_defaults, sizeof(serialized_defaults) - 1, &status)) {
+ goto err;
+ }
if (!s->feature_set_defaults) goto err;
@@ -8350,6 +11702,58 @@
return s->feature_set_defaults;
}
+bool upb_DefPool_SetFeatureSetDefaults(upb_DefPool* s,
+ const char* serialized_defaults,
+ size_t serialized_len,
+ upb_Status* status) {
+ const UPB_DESC(FeatureSetDefaults)* defaults = UPB_DESC(
+ FeatureSetDefaults_parse)(serialized_defaults, serialized_len, s->arena);
+ if (!defaults) {
+ upb_Status_SetErrorFormat(status, "Failed to parse defaults");
+ return false;
+ }
+ if (upb_strtable_count(&s->files) > 0) {
+ upb_Status_SetErrorFormat(status,
+ "Feature set defaults can't be changed once the "
+ "pool has started building");
+ return false;
+ }
+ int min_edition = UPB_DESC(FeatureSetDefaults_minimum_edition(defaults));
+ int max_edition = UPB_DESC(FeatureSetDefaults_maximum_edition(defaults));
+ if (min_edition > max_edition) {
+ upb_Status_SetErrorFormat(status, "Invalid edition range %s to %s",
+ upb_FileDef_EditionName(min_edition),
+ upb_FileDef_EditionName(max_edition));
+ return false;
+ }
+ size_t size;
+ const UPB_DESC(
+ FeatureSetDefaults_FeatureSetEditionDefault)* const* default_list =
+ UPB_DESC(FeatureSetDefaults_defaults(defaults, &size));
+ int prev_edition = UPB_DESC(EDITION_UNKNOWN);
+ for (size_t i = 0; i < size; ++i) {
+ int edition = UPB_DESC(
+ FeatureSetDefaults_FeatureSetEditionDefault_edition(default_list[i]));
+ if (edition == UPB_DESC(EDITION_UNKNOWN)) {
+ upb_Status_SetErrorFormat(status, "Invalid edition UNKNOWN specified");
+ return false;
+ }
+ if (edition <= prev_edition) {
+ upb_Status_SetErrorFormat(status,
+ "Feature set defaults are not strictly "
+ "increasing, %s is greater than or equal to %s",
+ upb_FileDef_EditionName(prev_edition),
+ upb_FileDef_EditionName(edition));
+ return false;
+ }
+ prev_edition = edition;
+ }
+
+ // Copy the defaults into the pool.
+ s->feature_set_defaults = defaults;
+ return true;
+}
+
bool _upb_DefPool_InsertExt(upb_DefPool* s, const upb_MiniTableExtension* ext,
const upb_FieldDef* f) {
return upb_inttable_insert(&s->exts, (uintptr_t)ext, upb_value_constptr(f),
@@ -8717,7 +12121,7 @@
const upb_FieldDef* f = upb_value_getconstptr(val);
if (upb_FieldDef_ContainingType(f) == m) n++;
}
- const upb_FieldDef** exts = malloc(n * sizeof(*exts));
+ const upb_FieldDef** exts = upb_gmalloc(n * sizeof(*exts));
iter = UPB_INTTABLE_BEGIN;
size_t i = 0;
while (upb_inttable_next(&s->exts, &key, &val, &iter)) {
@@ -8780,6 +12184,10 @@
}
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
// Must be last.
@@ -8835,6 +12243,11 @@
return e->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_EnumDef_ResolvedFeatures(const upb_EnumDef* e) {
+ return e->resolved_features;
+}
+
const char* upb_EnumDef_FullName(const upb_EnumDef* e) { return e->full_name; }
const char* upb_EnumDef_Name(const upb_EnumDef* e) {
@@ -9030,8 +12443,7 @@
if (upb_EnumDef_IsClosed(e)) {
if (ctx->layout) {
- UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count);
- e->layout = ctx->layout->enums[ctx->enum_count++];
+ e->layout = upb_MiniTableFile_Enum(ctx->layout, ctx->enum_count++);
} else {
e->layout = create_enumlayout(ctx, e);
}
@@ -9163,6 +12575,11 @@
return v->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_EnumValueDef_ResolvedFeatures(const upb_EnumValueDef* e) {
+ return e->resolved_features;
+}
+
const upb_EnumDef* upb_EnumValueDef_Enum(const upb_EnumValueDef* v) {
return v->parent;
}
@@ -9321,6 +12738,9 @@
#include <ctype.h>
#include <errno.h>
#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
// Must be last.
@@ -9381,43 +12801,17 @@
return f->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_FieldDef_ResolvedFeatures(const upb_FieldDef* f) {
+ return f->resolved_features;
+}
+
const char* upb_FieldDef_FullName(const upb_FieldDef* f) {
return f->full_name;
}
upb_CType upb_FieldDef_CType(const upb_FieldDef* f) {
- switch (f->type_) {
- case kUpb_FieldType_Double:
- return kUpb_CType_Double;
- case kUpb_FieldType_Float:
- return kUpb_CType_Float;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_SInt64:
- case kUpb_FieldType_SFixed64:
- return kUpb_CType_Int64;
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_SFixed32:
- case kUpb_FieldType_SInt32:
- return kUpb_CType_Int32;
- case kUpb_FieldType_UInt64:
- case kUpb_FieldType_Fixed64:
- return kUpb_CType_UInt64;
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Fixed32:
- return kUpb_CType_UInt32;
- case kUpb_FieldType_Enum:
- return kUpb_CType_Enum;
- case kUpb_FieldType_Bool:
- return kUpb_CType_Bool;
- case kUpb_FieldType_String:
- return kUpb_CType_String;
- case kUpb_FieldType_Bytes:
- return kUpb_CType_Bytes;
- case kUpb_FieldType_Group:
- case kUpb_FieldType_Message:
- return kUpb_CType_Message;
- }
- UPB_UNREACHABLE();
+ return upb_FieldType_CType(f->type_);
}
upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f) {
@@ -9543,7 +12937,7 @@
file, f->layout_index);
} else {
const upb_MiniTable* layout = upb_MessageDef_MiniTable(f->msgdef);
- return &layout->fields[f->layout_index];
+ return &layout->UPB_PRIVATE(fields)[f->layout_index];
}
}
@@ -9917,7 +13311,8 @@
bool implicit = false;
if (syntax != kUpb_Syntax_Editions) {
- upb_Message_Clear(ctx->legacy_features, UPB_DESC_MINITABLE(FeatureSet));
+ upb_Message_Clear(UPB_UPCAST(ctx->legacy_features),
+ UPB_DESC_MINITABLE(FeatureSet));
if (_upb_FieldDef_InferLegacyFeatures(ctx, f, field_proto, f->opts, syntax,
ctx->legacy_features)) {
implicit = true;
@@ -9925,6 +13320,25 @@
}
}
+ if (UPB_DESC(FieldDescriptorProto_has_oneof_index)(field_proto)) {
+ int oneof_index = UPB_DESC(FieldDescriptorProto_oneof_index)(field_proto);
+
+ if (!m) {
+ _upb_DefBuilder_Errf(ctx, "oneof field (%s) has no containing msg",
+ f->full_name);
+ }
+
+ if (oneof_index >= upb_MessageDef_OneofCount(m)) {
+ _upb_DefBuilder_Errf(ctx, "oneof_index out of range (%s)", f->full_name);
+ }
+
+ upb_OneofDef* oneof = (upb_OneofDef*)upb_MessageDef_Oneof(m, oneof_index);
+ f->scope.oneof = oneof;
+ parent_features = upb_OneofDef_ResolvedFeatures(oneof);
+
+ _upb_OneofDef_Insert(ctx, oneof, f, name.data, name.size);
+ }
+
f->resolved_features = _upb_DefBuilder_DoResolveFeatures(
ctx, parent_features, unresolved_features, implicit);
@@ -9988,26 +13402,10 @@
f->sub.unresolved = field_proto;
if (UPB_DESC(FieldDescriptorProto_has_oneof_index)(field_proto)) {
- int oneof_index = UPB_DESC(FieldDescriptorProto_oneof_index)(field_proto);
-
if (upb_FieldDef_Label(f) != kUpb_Label_Optional) {
_upb_DefBuilder_Errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
f->full_name);
}
-
- if (!m) {
- _upb_DefBuilder_Errf(ctx, "oneof field (%s) has no containing msg",
- f->full_name);
- }
-
- if (oneof_index >= upb_MessageDef_OneofCount(m)) {
- _upb_DefBuilder_Errf(ctx, "oneof_index out of range (%s)", f->full_name);
- }
-
- upb_OneofDef* oneof = (upb_OneofDef*)upb_MessageDef_Oneof(m, oneof_index);
- f->scope.oneof = oneof;
-
- _upb_OneofDef_Insert(ctx, oneof, f, name.data, name.size);
}
f->has_presence =
@@ -10036,7 +13434,8 @@
f->layout_index = ctx->ext_count++;
if (ctx->layout) {
- UPB_ASSERT(_upb_FieldDef_ExtensionMiniTable(f)->field.number == f->number_);
+ UPB_ASSERT(upb_MiniTableExtension_Number(
+ _upb_FieldDef_ExtensionMiniTable(f)) == f->number_);
}
}
@@ -10231,7 +13630,7 @@
const upb_MiniTableExtension* ext = _upb_FieldDef_ExtensionMiniTable(f);
if (ctx->layout) {
- UPB_ASSERT(upb_FieldDef_Number(f) == ext->field.number);
+ UPB_ASSERT(upb_FieldDef_Number(f) == upb_MiniTableExtension_Number(ext));
} else {
upb_StringView desc;
if (!upb_FieldDef_MiniDescriptorEncode(f, ctx->tmp_arena, &desc)) {
@@ -10241,9 +13640,11 @@
upb_MiniTableExtension* mut_ext = (upb_MiniTableExtension*)ext;
upb_MiniTableSub sub = {NULL};
if (upb_FieldDef_IsSubMessage(f)) {
- sub.submsg = upb_MessageDef_MiniTable(f->sub.msgdef);
+ const upb_MiniTable* submsg = upb_MessageDef_MiniTable(f->sub.msgdef);
+ sub = upb_MiniTableSub_FromMessage(submsg);
} else if (_upb_FieldDef_IsClosedEnum(f)) {
- sub.subenum = _upb_EnumDef_MiniTable(f->sub.enumdef);
+ const upb_MiniTableEnum* subenum = _upb_EnumDef_MiniTable(f->sub.enumdef);
+ sub = upb_MiniTableSub_FromEnum(subenum);
}
bool ok2 = upb_MiniTableExtension_Init(desc.data, desc.size, mut_ext,
upb_MessageDef_MiniTable(f->msgdef),
@@ -10299,6 +13700,8 @@
#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
// Must be last.
@@ -10331,6 +13734,20 @@
upb_Syntax syntax;
};
+UPB_API const char* upb_FileDef_EditionName(int edition) {
+ // TODO Synchronize this with descriptor.proto better.
+ switch (edition) {
+ case UPB_DESC(EDITION_PROTO2):
+ return "PROTO2";
+ case UPB_DESC(EDITION_PROTO3):
+ return "PROTO3";
+ case UPB_DESC(EDITION_2023):
+ return "2023";
+ default:
+ return "UNKNOWN";
+ }
+}
+
const UPB_DESC(FileOptions) * upb_FileDef_Options(const upb_FileDef* f) {
return f->opts;
}
@@ -10463,11 +13880,21 @@
int min = UPB_DESC(FeatureSetDefaults_minimum_edition)(defaults);
int max = UPB_DESC(FeatureSetDefaults_maximum_edition)(defaults);
- if (edition < min || edition > max) {
+ if (edition < min) {
_upb_DefBuilder_Errf(ctx,
- "Edition %d is outside the supported range [%d, %d] "
+ "Edition %s is earlier than the minimum edition %s "
"given in the defaults",
- edition, min, max);
+ upb_FileDef_EditionName(edition),
+ upb_FileDef_EditionName(min));
+ return NULL;
+ }
+ if (edition > max) {
+ _upb_DefBuilder_Errf(ctx,
+ "Edition %s is later than the maximum edition %s "
+ "given in the defaults",
+ upb_FileDef_EditionName(edition),
+ upb_FileDef_EditionName(max));
+ return NULL;
}
size_t n;
@@ -10481,6 +13908,11 @@
}
ret = UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault_features)(d[i]);
}
+ if (ret == NULL) {
+ _upb_DefBuilder_Errf(ctx, "No valid default found for edition %s",
+ upb_FileDef_EditionName(edition));
+ return NULL;
+ }
return ret;
}
@@ -10512,11 +13944,12 @@
if (ctx->layout) {
// We are using the ext layouts that were passed in.
- file->ext_layouts = ctx->layout->exts;
- if (ctx->layout->ext_count != file->ext_count) {
+ file->ext_layouts = ctx->layout->UPB_PRIVATE(exts);
+ const int mt_ext_count = upb_MiniTableFile_ExtensionCount(ctx->layout);
+ if (mt_ext_count != file->ext_count) {
_upb_DefBuilder_Errf(ctx,
"Extension count did not match layout (%d vs %d)",
- ctx->layout->ext_count, file->ext_count);
+ mt_ext_count, file->ext_count);
}
} else {
// We are building ext layouts from scratch.
@@ -10691,7 +14124,8 @@
* initialized to zeroes.
*
* We have to allocate an extra pointer for upb's internal metadata. */
-static const char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
+static UPB_ALIGN_AS(8) const
+ char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
const char* kUpbDefOptDefault = &opt_default_buf[sizeof(void*)];
const char* _upb_DefBuilder_FullToShort(const char* fullname) {
@@ -10781,15 +14215,15 @@
if (sym.size == 0) goto notfound;
upb_value v;
if (sym.data[0] == '.') {
- /* Symbols starting with '.' are absolute, so we do a single lookup.
- * Slice to omit the leading '.' */
+ // Symbols starting with '.' are absolute, so we do a single lookup.
+ // Slice to omit the leading '.'
if (!_upb_DefPool_LookupSym(ctx->symtab, sym.data + 1, sym.size - 1, &v)) {
goto notfound;
}
} else {
- /* Remove components from base until we find an entry or run out. */
+ // Remove components from base until we find an entry or run out.
size_t baselen = base ? strlen(base) : 0;
- char* tmp = malloc(sym.size + baselen + 1);
+ char* tmp = upb_gmalloc(sym.size + baselen + 1);
while (1) {
char* p = tmp;
if (baselen) {
@@ -10803,11 +14237,11 @@
break;
}
if (!remove_component(tmp, &baselen)) {
- free(tmp);
+ upb_gfree(tmp);
goto notfound;
}
}
- free(tmp);
+ upb_gfree(tmp);
}
*type = _upb_DefType_Type(v);
@@ -11032,8 +14466,8 @@
return false;
}
- *set =
- upb_Message_DeepClone(parent, UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
+ *set = (UPB_DESC(FeatureSet*))upb_Message_DeepClone(
+ UPB_UPCAST(parent), UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
if (!*set) _upb_DefBuilder_OomErr(ctx);
v = upb_value_ptr(*set);
@@ -11070,7 +14504,7 @@
}
upb_DecodeStatus dec_status =
- upb_Decode(child_bytes, child_size, resolved,
+ upb_Decode(child_bytes, child_size, UPB_UPCAST(resolved),
UPB_DESC_MINITABLE(FeatureSet), NULL, 0, ctx->arena);
if (dec_status != kUpb_DecodeStatus_Ok) _upb_DefBuilder_OomErr(ctx);
@@ -11102,6 +14536,7 @@
}
+#include <stdint.h>
#include <string.h>
@@ -11130,9 +14565,7 @@
upb_MessageValue upb_Message_GetFieldByDef(const upb_Message* msg,
const upb_FieldDef* f) {
upb_MessageValue default_val = upb_FieldDef_Default(f);
- upb_MessageValue ret;
- _upb_Message_GetField(msg, upb_FieldDef_MiniTable(f), &default_val, &ret);
- return ret;
+ return upb_Message_GetField(msg, upb_FieldDef_MiniTable(f), default_val);
}
upb_MutableMessageValue upb_Message_Mutable(upb_Message* msg,
@@ -11176,7 +14609,7 @@
bool upb_Message_SetFieldByDef(upb_Message* msg, const upb_FieldDef* f,
upb_MessageValue val, upb_Arena* a) {
- return _upb_Message_SetField(msg, upb_FieldDef_MiniTable(f), &val, a);
+ return upb_Message_SetField(msg, upb_FieldDef_MiniTable(f), val, a);
}
void upb_Message_ClearFieldByDef(upb_Message* msg, const upb_FieldDef* f) {
@@ -11204,7 +14637,7 @@
if (upb_MiniTableField_HasPresence(field)) {
if (!upb_Message_HasFieldByDef(msg, f)) continue;
} else {
- switch (upb_FieldMode_Get(field)) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(field)) {
case kUpb_FieldMode_Map:
if (!val.map_val || upb_Map_Size(val.map_val) == 0) continue;
break;
@@ -11212,7 +14645,8 @@
if (!val.array_val || upb_Array_Size(val.array_val) == 0) continue;
break;
case kUpb_FieldMode_Scalar:
- if (!_upb_MiniTable_ValueIsNonZero(&val, field)) continue;
+ if (UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, &val))
+ continue;
break;
}
}
@@ -11226,7 +14660,7 @@
if (ext_pool) {
// Return any extensions that are set.
size_t count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &count);
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
if (i - n < count) {
ext += count - 1 - (i - n);
memcpy(out_val, &ext->data, sizeof(*out_val));
@@ -11296,6 +14730,10 @@
}
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
// Must be last.
@@ -11410,6 +14848,11 @@
return m->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_MessageDef_ResolvedFeatures(const upb_MessageDef* m) {
+ return m->resolved_features;
+}
+
const char* upb_MessageDef_FullName(const upb_MessageDef* m) {
return m->full_name;
}
@@ -11703,9 +15146,8 @@
if (ctx->layout == NULL) {
m->layout = _upb_MessageDef_MakeMiniTable(ctx, m);
} else {
- UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count);
- m->layout = ctx->layout->msgs[ctx->msg_count++];
- UPB_ASSERT(m->field_count == m->layout->field_count);
+ m->layout = upb_MiniTableFile_Message(ctx->layout, ctx->msg_count++);
+ UPB_ASSERT(m->field_count == m->layout->UPB_PRIVATE(field_count));
// We don't need the result of this call, but it will assign layout_index
// for all the fields in O(n lg n) time.
@@ -11741,9 +15183,9 @@
UPB_ASSERT(layout_index < m->field_count);
upb_MiniTableField* mt_f =
- (upb_MiniTableField*)&m->layout->fields[layout_index];
+ (upb_MiniTableField*)&m->layout->UPB_PRIVATE(fields)[layout_index];
if (sub_m) {
- if (!mt->subs) {
+ if (!mt->UPB_PRIVATE(subs)) {
_upb_DefBuilder_Errf(ctx, "unexpected submsg for (%s)", m->full_name);
}
UPB_ASSERT(mt_f);
@@ -11763,8 +15205,9 @@
for (int i = 0; i < m->field_count; i++) {
const upb_FieldDef* f = upb_MessageDef_Field(m, i);
const int layout_index = _upb_FieldDef_LayoutIndex(f);
- UPB_ASSERT(layout_index < m->layout->field_count);
- const upb_MiniTableField* mt_f = &m->layout->fields[layout_index];
+ UPB_ASSERT(layout_index < m->layout->UPB_PRIVATE(field_count));
+ const upb_MiniTableField* mt_f =
+ &m->layout->UPB_PRIVATE(fields)[layout_index];
UPB_ASSERT(upb_FieldDef_Type(f) == upb_MiniTableField_Type(mt_f));
UPB_ASSERT(upb_FieldDef_CType(f) == upb_MiniTableField_CType(mt_f));
UPB_ASSERT(upb_FieldDef_HasPresence(f) ==
@@ -12103,6 +15546,11 @@
return m->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_MethodDef_ResolvedFeatures(const upb_MethodDef* m) {
+ return m->resolved_features;
+}
+
const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
return m->full_name;
}
@@ -12203,6 +15651,11 @@
return o->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_OneofDef_ResolvedFeatures(const upb_OneofDef* o) {
+ return o->resolved_features;
+}
+
const char* upb_OneofDef_FullName(const upb_OneofDef* o) {
return o->full_name;
}
@@ -12399,6 +15852,11 @@
return s->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_ServiceDef_ResolvedFeatures(const upb_ServiceDef* s) {
+ return s->resolved_features;
+}
+
const char* upb_ServiceDef_FullName(const upb_ServiceDef* s) {
return s->full_name;
}
@@ -12473,2977 +15931,6 @@
return s;
}
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-
-
-// Must be last.
-
-// A few fake field types for our tables.
-enum {
- kUpb_FakeFieldType_FieldNotFound = 0,
- kUpb_FakeFieldType_MessageSetItem = 19,
-};
-
-// DecodeOp: an action to be performed for a wire-type/field-type combination.
-enum {
- // Special ops: we don't write data to regular fields for these.
- kUpb_DecodeOp_UnknownField = -1,
- kUpb_DecodeOp_MessageSetItem = -2,
-
- // Scalar-only ops.
- kUpb_DecodeOp_Scalar1Byte = 0,
- kUpb_DecodeOp_Scalar4Byte = 2,
- kUpb_DecodeOp_Scalar8Byte = 3,
- kUpb_DecodeOp_Enum = 1,
-
- // Scalar/repeated ops.
- kUpb_DecodeOp_String = 4,
- kUpb_DecodeOp_Bytes = 5,
- kUpb_DecodeOp_SubMessage = 6,
-
- // Repeated-only ops (also see macros below).
- kUpb_DecodeOp_PackedEnum = 13,
-};
-
-// For packed fields it is helpful to be able to recover the lg2 of the data
-// size from the op.
-#define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
-#define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
-
-typedef union {
- bool bool_val;
- uint32_t uint32_val;
- uint64_t uint64_val;
- uint32_t size;
-} wireval;
-
-static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTable* layout);
-
-UPB_NORETURN static void* _upb_Decoder_ErrorJmp(upb_Decoder* d,
- upb_DecodeStatus status) {
- UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
- d->status = status;
- UPB_LONGJMP(d->err, 1);
-}
-
-const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status) {
- UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
- d->status = status;
- UPB_LONGJMP(d->err, 1);
- return NULL;
-}
-
-static void _upb_Decoder_VerifyUtf8(upb_Decoder* d, const char* buf, int len) {
- if (!_upb_Decoder_VerifyUtf8Inline(buf, len)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
- }
-}
-
-static bool _upb_Decoder_Reserve(upb_Decoder* d, upb_Array* arr, size_t elem) {
- bool need_realloc = arr->capacity - arr->size < elem;
- if (need_realloc && !_upb_array_realloc(arr, arr->size + elem, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- return need_realloc;
-}
-
-typedef struct {
- const char* ptr;
- uint64_t val;
-} _upb_DecodeLongVarintReturn;
-
-UPB_NOINLINE
-static _upb_DecodeLongVarintReturn _upb_Decoder_DecodeLongVarint(
- const char* ptr, uint64_t val) {
- _upb_DecodeLongVarintReturn ret = {NULL, 0};
- uint64_t byte;
- int i;
- for (i = 1; i < 10; i++) {
- byte = (uint8_t)ptr[i];
- val += (byte - 1) << (i * 7);
- if (!(byte & 0x80)) {
- ret.ptr = ptr + i + 1;
- ret.val = val;
- return ret;
- }
- }
- return ret;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeVarint(upb_Decoder* d, const char* ptr,
- uint64_t* val) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = byte;
- return ptr + 1;
- } else {
- _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
- if (!res.ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- *val = res.val;
- return res.ptr;
- }
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeTag(upb_Decoder* d, const char* ptr,
- uint32_t* val) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = byte;
- return ptr + 1;
- } else {
- const char* start = ptr;
- _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
- if (!res.ptr || res.ptr - start > 5 || res.val > UINT32_MAX) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- *val = res.val;
- return res.ptr;
- }
-}
-
-UPB_FORCEINLINE
-static const char* upb_Decoder_DecodeSize(upb_Decoder* d, const char* ptr,
- uint32_t* size) {
- uint64_t size64;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &size64);
- if (size64 >= INT32_MAX ||
- !upb_EpsCopyInputStream_CheckSize(&d->input, ptr, (int)size64)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- *size = size64;
- return ptr;
-}
-
-static void _upb_Decoder_MungeInt32(wireval* val) {
- if (!_upb_IsLittleEndian()) {
- /* The next stage will memcpy(dst, &val, 4) */
- val->uint32_val = val->uint64_val;
- }
-}
-
-static void _upb_Decoder_Munge(int type, wireval* val) {
- switch (type) {
- case kUpb_FieldType_Bool:
- val->bool_val = val->uint64_val != 0;
- break;
- case kUpb_FieldType_SInt32: {
- uint32_t n = val->uint64_val;
- val->uint32_val = (n >> 1) ^ -(int32_t)(n & 1);
- break;
- }
- case kUpb_FieldType_SInt64: {
- uint64_t n = val->uint64_val;
- val->uint64_val = (n >> 1) ^ -(int64_t)(n & 1);
- break;
- }
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Enum:
- _upb_Decoder_MungeInt32(val);
- break;
- }
-}
-
-static upb_Message* _upb_Decoder_NewSubMessage(upb_Decoder* d,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- upb_TaggedMessagePtr* target) {
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- upb_Message* msg = _upb_Message_New(subl, &d->arena);
- if (!msg) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
-
- // Extensions should not be unlinked. A message extension should not be
- // registered until its sub-message type is available to be linked.
- bool is_empty = subl == &_kUpb_MiniTable_Empty;
- bool is_extension = field->mode & kUpb_LabelFlags_IsExtension;
- UPB_ASSERT(!(is_empty && is_extension));
-
- if (is_empty && !(d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_UnlinkedSubMessage);
- }
-
- upb_TaggedMessagePtr tagged = _upb_TaggedMessagePtr_Pack(msg, is_empty);
- memcpy(target, &tagged, sizeof(tagged));
- return msg;
-}
-
-static upb_Message* _upb_Decoder_ReuseSubMessage(
- upb_Decoder* d, const upb_MiniTableSub* subs,
- const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
- upb_TaggedMessagePtr tagged = *target;
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- if (!upb_TaggedMessagePtr_IsEmpty(tagged) || subl == &_kUpb_MiniTable_Empty) {
- return _upb_TaggedMessagePtr_GetMessage(tagged);
- }
-
- // We found an empty message from a previous parse that was performed before
- // this field was linked. But it is linked now, so we want to allocate a new
- // message of the correct type and promote data into it before continuing.
- upb_Message* existing = _upb_TaggedMessagePtr_GetEmptyMessage(tagged);
- upb_Message* promoted = _upb_Decoder_NewSubMessage(d, subs, field, target);
- size_t size;
- const char* unknown = upb_Message_GetUnknown(existing, &size);
- upb_DecodeStatus status = upb_Decode(unknown, size, promoted, subl, d->extreg,
- d->options, &d->arena);
- if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
- return promoted;
-}
-
-static const char* _upb_Decoder_ReadString(upb_Decoder* d, const char* ptr,
- int size, upb_StringView* str) {
- const char* str_ptr = ptr;
- ptr = upb_EpsCopyInputStream_ReadString(&d->input, &str_ptr, size, &d->arena);
- if (!ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- str->data = str_ptr;
- str->size = size;
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_RecurseSubMessage(upb_Decoder* d,
- const char* ptr,
- upb_Message* submsg,
- const upb_MiniTable* subl,
- uint32_t expected_end_group) {
- if (--d->depth < 0) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded);
- }
- ptr = _upb_Decoder_DecodeMessage(d, ptr, submsg, subl);
- d->depth++;
- if (d->end_group != expected_end_group) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeSubMessage(
- upb_Decoder* d, const char* ptr, upb_Message* submsg,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field, int size) {
- int saved_delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, DECODE_NOGROUP);
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_delta);
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeGroup(upb_Decoder* d, const char* ptr,
- upb_Message* submsg,
- const upb_MiniTable* subl,
- uint32_t number) {
- if (_upb_Decoder_IsDone(d, &ptr)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, number);
- d->end_group = DECODE_NOGROUP;
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeUnknownGroup(upb_Decoder* d,
- const char* ptr,
- uint32_t number) {
- return _upb_Decoder_DecodeGroup(d, ptr, NULL, NULL, number);
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeKnownGroup(
- upb_Decoder* d, const char* ptr, upb_Message* submsg,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl, field->number);
-}
-
-static char* upb_Decoder_EncodeVarint32(uint32_t val, char* ptr) {
- do {
- uint8_t byte = val & 0x7fU;
- val >>= 7;
- if (val) byte |= 0x80U;
- *(ptr++) = byte;
- } while (val);
- return ptr;
-}
-
-static void _upb_Decoder_AddUnknownVarints(upb_Decoder* d, upb_Message* msg,
- uint32_t val1, uint32_t val2) {
- char buf[20];
- char* end = buf;
- end = upb_Decoder_EncodeVarint32(val1, end);
- end = upb_Decoder_EncodeVarint32(val2, end);
-
- if (!_upb_Message_AddUnknown(msg, buf, end - buf, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
-}
-
-UPB_NOINLINE
-static bool _upb_Decoder_CheckEnumSlow(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableEnum* e,
- const upb_MiniTableField* field,
- uint32_t v) {
- if (_upb_MiniTable_CheckEnumValueSlow(e, v)) return true;
-
- // Unrecognized enum goes into unknown fields.
- // For packed fields the tag could be arbitrarily far in the past, so we
- // just re-encode the tag and value here.
- uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Varint;
- upb_Message* unknown_msg =
- field->mode & kUpb_LabelFlags_IsExtension ? d->unknown_msg : msg;
- _upb_Decoder_AddUnknownVarints(d, unknown_msg, tag, v);
- return false;
-}
-
-UPB_FORCEINLINE
-static bool _upb_Decoder_CheckEnum(upb_Decoder* d, const char* ptr,
- upb_Message* msg, const upb_MiniTableEnum* e,
- const upb_MiniTableField* field,
- wireval* val) {
- uint32_t v = val->uint32_val;
-
- _kUpb_FastEnumCheck_Status status = _upb_MiniTable_CheckEnumValueFast(e, v);
- if (UPB_LIKELY(status == _kUpb_FastEnumCheck_ValueIsInEnum)) return true;
- return _upb_Decoder_CheckEnumSlow(d, ptr, msg, e, field, v);
-}
-
-UPB_NOINLINE
-static const char* _upb_Decoder_DecodeEnumArray(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- upb_Array* arr,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- wireval* val) {
- const upb_MiniTableEnum* e = subs[field->UPB_PRIVATE(submsg_index)].subenum;
- if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, val)) return ptr;
- void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- arr->size++;
- memcpy(mem, val, 4);
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeFixedPacked(
- upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
- const upb_MiniTableField* field, int lg2) {
- int mask = (1 << lg2) - 1;
- size_t count = val->size >> lg2;
- if ((val->size & mask) != 0) {
- // Length isn't a round multiple of elem size.
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- _upb_Decoder_Reserve(d, arr, count);
- void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- arr->size += count;
- // Note: if/when the decoder supports multi-buffer input, we will need to
- // handle buffer seams here.
- if (_upb_IsLittleEndian()) {
- ptr = upb_EpsCopyInputStream_Copy(&d->input, ptr, mem, val->size);
- } else {
- int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* dst = mem;
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- if (lg2 == 2) {
- ptr = upb_WireReader_ReadFixed32(ptr, dst);
- dst += 4;
- } else {
- UPB_ASSERT(lg2 == 3);
- ptr = upb_WireReader_ReadFixed64(ptr, dst);
- dst += 8;
- }
- }
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
- }
-
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeVarintPacked(
- upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
- const upb_MiniTableField* field, int lg2) {
- int scale = 1 << lg2;
- int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- wireval elem;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
- _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), &elem);
- if (_upb_Decoder_Reserve(d, arr, 1)) {
- out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- }
- arr->size++;
- memcpy(out, &elem, scale);
- out += scale;
- }
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
- return ptr;
-}
-
-UPB_NOINLINE
-static const char* _upb_Decoder_DecodeEnumPacked(
- upb_Decoder* d, const char* ptr, upb_Message* msg, upb_Array* arr,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field,
- wireval* val) {
- const upb_MiniTableEnum* e = subs[field->UPB_PRIVATE(submsg_index)].subenum;
- int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- wireval elem;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
- _upb_Decoder_MungeInt32(&elem);
- if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, &elem)) {
- continue;
- }
- if (_upb_Decoder_Reserve(d, arr, 1)) {
- out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- }
- arr->size++;
- memcpy(out, &elem, 4);
- out += 4;
- }
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
- return ptr;
-}
-
-upb_Array* _upb_Decoder_CreateArray(upb_Decoder* d,
- const upb_MiniTableField* field) {
- /* Maps descriptor type -> elem_size_lg2. */
- static const uint8_t kElemSizeLg2[] = {
- [0] = -1, // invalid descriptor type
- [kUpb_FieldType_Double] = 3,
- [kUpb_FieldType_Float] = 2,
- [kUpb_FieldType_Int64] = 3,
- [kUpb_FieldType_UInt64] = 3,
- [kUpb_FieldType_Int32] = 2,
- [kUpb_FieldType_Fixed64] = 3,
- [kUpb_FieldType_Fixed32] = 2,
- [kUpb_FieldType_Bool] = 0,
- [kUpb_FieldType_String] = UPB_SIZE(3, 4),
- [kUpb_FieldType_Group] = UPB_SIZE(2, 3),
- [kUpb_FieldType_Message] = UPB_SIZE(2, 3),
- [kUpb_FieldType_Bytes] = UPB_SIZE(3, 4),
- [kUpb_FieldType_UInt32] = 2,
- [kUpb_FieldType_Enum] = 2,
- [kUpb_FieldType_SFixed32] = 2,
- [kUpb_FieldType_SFixed64] = 3,
- [kUpb_FieldType_SInt32] = 2,
- [kUpb_FieldType_SInt64] = 3,
- };
-
- size_t lg2 = kElemSizeLg2[field->UPB_PRIVATE(descriptortype)];
- upb_Array* ret = _upb_Array_New(&d->arena, 4, lg2);
- if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- return ret;
-}
-
-static const char* _upb_Decoder_DecodeToArray(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- wireval* val, int op) {
- upb_Array** arrp = UPB_PTR_AT(msg, field->offset, void);
- upb_Array* arr = *arrp;
- void* mem;
-
- if (arr) {
- _upb_Decoder_Reserve(d, arr, 1);
- } else {
- arr = _upb_Decoder_CreateArray(d, field);
- *arrp = arr;
- }
-
- switch (op) {
- case kUpb_DecodeOp_Scalar1Byte:
- case kUpb_DecodeOp_Scalar4Byte:
- case kUpb_DecodeOp_Scalar8Byte:
- /* Append scalar value. */
- mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << op, void);
- arr->size++;
- memcpy(mem, val, 1 << op);
- return ptr;
- case kUpb_DecodeOp_String:
- _upb_Decoder_VerifyUtf8(d, ptr, val->size);
- /* Fallthrough. */
- case kUpb_DecodeOp_Bytes: {
- /* Append bytes. */
- upb_StringView* str = (upb_StringView*)_upb_array_ptr(arr) + arr->size;
- arr->size++;
- return _upb_Decoder_ReadString(d, ptr, val->size, str);
- }
- case kUpb_DecodeOp_SubMessage: {
- /* Append submessage / group. */
- upb_TaggedMessagePtr* target = UPB_PTR_AT(
- _upb_array_ptr(arr), arr->size * sizeof(void*), upb_TaggedMessagePtr);
- upb_Message* submsg = _upb_Decoder_NewSubMessage(d, subs, field, target);
- arr->size++;
- if (UPB_UNLIKELY(field->UPB_PRIVATE(descriptortype) ==
- kUpb_FieldType_Group)) {
- return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
- } else {
- return _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
- val->size);
- }
- }
- case OP_FIXPCK_LG2(2):
- case OP_FIXPCK_LG2(3):
- return _upb_Decoder_DecodeFixedPacked(d, ptr, arr, val, field,
- op - OP_FIXPCK_LG2(0));
- case OP_VARPCK_LG2(0):
- case OP_VARPCK_LG2(2):
- case OP_VARPCK_LG2(3):
- return _upb_Decoder_DecodeVarintPacked(d, ptr, arr, val, field,
- op - OP_VARPCK_LG2(0));
- case kUpb_DecodeOp_Enum:
- return _upb_Decoder_DecodeEnumArray(d, ptr, msg, arr, subs, field, val);
- case kUpb_DecodeOp_PackedEnum:
- return _upb_Decoder_DecodeEnumPacked(d, ptr, msg, arr, subs, field, val);
- default:
- UPB_UNREACHABLE();
- }
-}
-
-upb_Map* _upb_Decoder_CreateMap(upb_Decoder* d, const upb_MiniTable* entry) {
- /* Maps descriptor type -> upb map size. */
- static const uint8_t kSizeInMap[] = {
- [0] = -1, // invalid descriptor type */
- [kUpb_FieldType_Double] = 8,
- [kUpb_FieldType_Float] = 4,
- [kUpb_FieldType_Int64] = 8,
- [kUpb_FieldType_UInt64] = 8,
- [kUpb_FieldType_Int32] = 4,
- [kUpb_FieldType_Fixed64] = 8,
- [kUpb_FieldType_Fixed32] = 4,
- [kUpb_FieldType_Bool] = 1,
- [kUpb_FieldType_String] = UPB_MAPTYPE_STRING,
- [kUpb_FieldType_Group] = sizeof(void*),
- [kUpb_FieldType_Message] = sizeof(void*),
- [kUpb_FieldType_Bytes] = UPB_MAPTYPE_STRING,
- [kUpb_FieldType_UInt32] = 4,
- [kUpb_FieldType_Enum] = 4,
- [kUpb_FieldType_SFixed32] = 4,
- [kUpb_FieldType_SFixed64] = 8,
- [kUpb_FieldType_SInt32] = 4,
- [kUpb_FieldType_SInt64] = 8,
- };
-
- const upb_MiniTableField* key_field = &entry->fields[0];
- const upb_MiniTableField* val_field = &entry->fields[1];
- char key_size = kSizeInMap[key_field->UPB_PRIVATE(descriptortype)];
- char val_size = kSizeInMap[val_field->UPB_PRIVATE(descriptortype)];
- UPB_ASSERT(key_field->offset == offsetof(upb_MapEntryData, k));
- UPB_ASSERT(val_field->offset == offsetof(upb_MapEntryData, v));
- upb_Map* ret = _upb_Map_New(&d->arena, key_size, val_size);
- if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- return ret;
-}
-
-static const char* _upb_Decoder_DecodeToMap(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- wireval* val) {
- upb_Map** map_p = UPB_PTR_AT(msg, field->offset, upb_Map*);
- upb_Map* map = *map_p;
- upb_MapEntry ent;
- UPB_ASSERT(upb_MiniTableField_Type(field) == kUpb_FieldType_Message);
- const upb_MiniTable* entry = subs[field->UPB_PRIVATE(submsg_index)].submsg;
-
- UPB_ASSERT(entry);
- UPB_ASSERT(entry->field_count == 2);
- UPB_ASSERT(!upb_IsRepeatedOrMap(&entry->fields[0]));
- UPB_ASSERT(!upb_IsRepeatedOrMap(&entry->fields[1]));
-
- if (!map) {
- map = _upb_Decoder_CreateMap(d, entry);
- *map_p = map;
- }
-
- // Parse map entry.
- memset(&ent, 0, sizeof(ent));
-
- if (entry->fields[1].UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
- entry->fields[1].UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
- // Create proactively to handle the case where it doesn't appear.
- upb_TaggedMessagePtr msg;
- _upb_Decoder_NewSubMessage(d, entry->subs, &entry->fields[1], &msg);
- ent.data.v.val = upb_value_uintptr(msg);
- }
-
- ptr =
- _upb_Decoder_DecodeSubMessage(d, ptr, &ent.data, subs, field, val->size);
- // check if ent had any unknown fields
- size_t size;
- upb_Message_GetUnknown(&ent.data, &size);
- if (size != 0) {
- char* buf;
- size_t size;
- uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Delimited;
- upb_EncodeStatus status =
- upb_Encode(&ent.data, entry, 0, &d->arena, &buf, &size);
- if (status != kUpb_EncodeStatus_Ok) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- _upb_Decoder_AddUnknownVarints(d, msg, tag, size);
- if (!_upb_Message_AddUnknown(msg, buf, size, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- } else {
- if (_upb_Map_Insert(map, &ent.data.k, map->key_size, &ent.data.v,
- map->val_size,
- &d->arena) == kUpb_MapInsertStatus_OutOfMemory) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- }
- return ptr;
-}
-
-static const char* _upb_Decoder_DecodeToSubMessage(
- upb_Decoder* d, const char* ptr, upb_Message* msg,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field, wireval* val,
- int op) {
- void* mem = UPB_PTR_AT(msg, field->offset, void);
- int type = field->UPB_PRIVATE(descriptortype);
-
- if (UPB_UNLIKELY(op == kUpb_DecodeOp_Enum) &&
- !_upb_Decoder_CheckEnum(d, ptr, msg,
- subs[field->UPB_PRIVATE(submsg_index)].subenum,
- field, val)) {
- return ptr;
- }
-
- /* Set presence if necessary. */
- if (field->presence > 0) {
- _upb_sethas_field(msg, field);
- } else if (field->presence < 0) {
- /* Oneof case */
- uint32_t* oneof_case = _upb_oneofcase_field(msg, field);
- if (op == kUpb_DecodeOp_SubMessage && *oneof_case != field->number) {
- memset(mem, 0, sizeof(void*));
- }
- *oneof_case = field->number;
- }
-
- /* Store into message. */
- switch (op) {
- case kUpb_DecodeOp_SubMessage: {
- upb_TaggedMessagePtr* submsgp = mem;
- upb_Message* submsg;
- if (*submsgp) {
- submsg = _upb_Decoder_ReuseSubMessage(d, subs, field, submsgp);
- } else {
- submsg = _upb_Decoder_NewSubMessage(d, subs, field, submsgp);
- }
- if (UPB_UNLIKELY(type == kUpb_FieldType_Group)) {
- ptr = _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
- } else {
- ptr = _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
- val->size);
- }
- break;
- }
- case kUpb_DecodeOp_String:
- _upb_Decoder_VerifyUtf8(d, ptr, val->size);
- /* Fallthrough. */
- case kUpb_DecodeOp_Bytes:
- return _upb_Decoder_ReadString(d, ptr, val->size, mem);
- case kUpb_DecodeOp_Scalar8Byte:
- memcpy(mem, val, 8);
- break;
- case kUpb_DecodeOp_Enum:
- case kUpb_DecodeOp_Scalar4Byte:
- memcpy(mem, val, 4);
- break;
- case kUpb_DecodeOp_Scalar1Byte:
- memcpy(mem, val, 1);
- break;
- default:
- UPB_UNREACHABLE();
- }
-
- return ptr;
-}
-
-UPB_NOINLINE
-const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
- const upb_Message* msg,
- const upb_MiniTable* l) {
- UPB_ASSERT(l->required_count);
- if (UPB_LIKELY((d->options & kUpb_DecodeOption_CheckRequired) == 0)) {
- return ptr;
- }
- uint64_t msg_head;
- memcpy(&msg_head, msg, 8);
- msg_head = _upb_BigEndian_Swap64(msg_head);
- if (upb_MiniTable_requiredmask(l) & ~msg_head) {
- d->missing_required = true;
- }
- return ptr;
-}
-
-UPB_FORCEINLINE
-static bool _upb_Decoder_TryFastDispatch(upb_Decoder* d, const char** ptr,
- upb_Message* msg,
- const upb_MiniTable* layout) {
-#if UPB_FASTTABLE
- if (layout && layout->table_mask != (unsigned char)-1) {
- uint16_t tag = _upb_FastDecoder_LoadTag(*ptr);
- intptr_t table = decode_totable(layout);
- *ptr = _upb_FastDecoder_TagDispatch(d, *ptr, msg, table, 0, tag);
- return true;
- }
-#endif
- return false;
-}
-
-static const char* upb_Decoder_SkipField(upb_Decoder* d, const char* ptr,
- uint32_t tag) {
- int field_number = tag >> 3;
- int wire_type = tag & 7;
- switch (wire_type) {
- case kUpb_WireType_Varint: {
- uint64_t val;
- return _upb_Decoder_DecodeVarint(d, ptr, &val);
- }
- case kUpb_WireType_64Bit:
- return ptr + 8;
- case kUpb_WireType_32Bit:
- return ptr + 4;
- case kUpb_WireType_Delimited: {
- uint32_t size;
- ptr = upb_Decoder_DecodeSize(d, ptr, &size);
- return ptr + size;
- }
- case kUpb_WireType_StartGroup:
- return _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
- default:
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
-}
-
-enum {
- kStartItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_StartGroup),
- kEndItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_EndGroup),
- kTypeIdTag = ((kUpb_MsgSet_TypeId << 3) | kUpb_WireType_Varint),
- kMessageTag = ((kUpb_MsgSet_Message << 3) | kUpb_WireType_Delimited),
-};
-
-static void upb_Decoder_AddKnownMessageSetItem(
- upb_Decoder* d, upb_Message* msg, const upb_MiniTableExtension* item_mt,
- const char* data, uint32_t size) {
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, item_mt, &d->arena);
- if (UPB_UNLIKELY(!ext)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- upb_Message* submsg = _upb_Decoder_NewSubMessage(
- d, &ext->ext->sub, &ext->ext->field, (upb_TaggedMessagePtr*)&ext->data);
- upb_DecodeStatus status = upb_Decode(data, size, submsg, item_mt->sub.submsg,
- d->extreg, d->options, &d->arena);
- if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
-}
-
-static void upb_Decoder_AddUnknownMessageSetItem(upb_Decoder* d,
- upb_Message* msg,
- uint32_t type_id,
- const char* message_data,
- uint32_t message_size) {
- char buf[60];
- char* ptr = buf;
- ptr = upb_Decoder_EncodeVarint32(kStartItemTag, ptr);
- ptr = upb_Decoder_EncodeVarint32(kTypeIdTag, ptr);
- ptr = upb_Decoder_EncodeVarint32(type_id, ptr);
- ptr = upb_Decoder_EncodeVarint32(kMessageTag, ptr);
- ptr = upb_Decoder_EncodeVarint32(message_size, ptr);
- char* split = ptr;
-
- ptr = upb_Decoder_EncodeVarint32(kEndItemTag, ptr);
- char* end = ptr;
-
- if (!_upb_Message_AddUnknown(msg, buf, split - buf, &d->arena) ||
- !_upb_Message_AddUnknown(msg, message_data, message_size, &d->arena) ||
- !_upb_Message_AddUnknown(msg, split, end - split, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
-}
-
-static void upb_Decoder_AddMessageSetItem(upb_Decoder* d, upb_Message* msg,
- const upb_MiniTable* t,
- uint32_t type_id, const char* data,
- uint32_t size) {
- const upb_MiniTableExtension* item_mt =
- upb_ExtensionRegistry_Lookup(d->extreg, t, type_id);
- if (item_mt) {
- upb_Decoder_AddKnownMessageSetItem(d, msg, item_mt, data, size);
- } else {
- upb_Decoder_AddUnknownMessageSetItem(d, msg, type_id, data, size);
- }
-}
-
-static const char* upb_Decoder_DecodeMessageSetItem(
- upb_Decoder* d, const char* ptr, upb_Message* msg,
- const upb_MiniTable* layout) {
- uint32_t type_id = 0;
- upb_StringView preserved = {NULL, 0};
- typedef enum {
- kUpb_HaveId = 1 << 0,
- kUpb_HavePayload = 1 << 1,
- } StateMask;
- StateMask state_mask = 0;
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- uint32_t tag;
- ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
- switch (tag) {
- case kEndItemTag:
- return ptr;
- case kTypeIdTag: {
- uint64_t tmp;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &tmp);
- if (state_mask & kUpb_HaveId) break; // Ignore dup.
- state_mask |= kUpb_HaveId;
- type_id = tmp;
- if (state_mask & kUpb_HavePayload) {
- upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, preserved.data,
- preserved.size);
- }
- break;
- }
- case kMessageTag: {
- uint32_t size;
- ptr = upb_Decoder_DecodeSize(d, ptr, &size);
- const char* data = ptr;
- ptr += size;
- if (state_mask & kUpb_HavePayload) break; // Ignore dup.
- state_mask |= kUpb_HavePayload;
- if (state_mask & kUpb_HaveId) {
- upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, data, size);
- } else {
- // Out of order, we must preserve the payload.
- preserved.data = data;
- preserved.size = size;
- }
- break;
- }
- default:
- // We do not preserve unexpected fields inside a message set item.
- ptr = upb_Decoder_SkipField(d, ptr, tag);
- break;
- }
- }
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-}
-
-static const upb_MiniTableField* _upb_Decoder_FindField(upb_Decoder* d,
- const upb_MiniTable* t,
- uint32_t field_number,
- int* last_field_index) {
- static upb_MiniTableField none = {
- 0, 0, 0, 0, kUpb_FakeFieldType_FieldNotFound, 0};
- if (t == NULL) return &none;
-
- size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
- if (idx < t->dense_below) {
- /* Fastest case: index into dense fields. */
- goto found;
- }
-
- if (t->dense_below < t->field_count) {
- /* Linear search non-dense fields. Resume scanning from last_field_index
- * since fields are usually in order. */
- size_t last = *last_field_index;
- for (idx = last; idx < t->field_count; idx++) {
- if (t->fields[idx].number == field_number) {
- goto found;
- }
- }
-
- for (idx = t->dense_below; idx < last; idx++) {
- if (t->fields[idx].number == field_number) {
- goto found;
- }
- }
- }
-
- if (d->extreg) {
- switch (t->ext) {
- case kUpb_ExtMode_Extendable: {
- const upb_MiniTableExtension* ext =
- upb_ExtensionRegistry_Lookup(d->extreg, t, field_number);
- if (ext) return &ext->field;
- break;
- }
- case kUpb_ExtMode_IsMessageSet:
- if (field_number == kUpb_MsgSet_Item) {
- static upb_MiniTableField item = {
- 0, 0, 0, 0, kUpb_FakeFieldType_MessageSetItem, 0};
- return &item;
- }
- break;
- }
- }
-
- return &none; /* Unknown field. */
-
-found:
- UPB_ASSERT(t->fields[idx].number == field_number);
- *last_field_index = idx;
- return &t->fields[idx];
-}
-
-int _upb_Decoder_GetVarintOp(const upb_MiniTableField* field) {
- static const int8_t kVarintOps[] = {
- [kUpb_FakeFieldType_FieldNotFound] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Int64] = kUpb_DecodeOp_Scalar8Byte,
- [kUpb_FieldType_UInt64] = kUpb_DecodeOp_Scalar8Byte,
- [kUpb_FieldType_Int32] = kUpb_DecodeOp_Scalar4Byte,
- [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Bool] = kUpb_DecodeOp_Scalar1Byte,
- [kUpb_FieldType_String] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Message] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Bytes] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_UInt32] = kUpb_DecodeOp_Scalar4Byte,
- [kUpb_FieldType_Enum] = kUpb_DecodeOp_Enum,
- [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SInt32] = kUpb_DecodeOp_Scalar4Byte,
- [kUpb_FieldType_SInt64] = kUpb_DecodeOp_Scalar8Byte,
- [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
- };
-
- return kVarintOps[field->UPB_PRIVATE(descriptortype)];
-}
-
-UPB_FORCEINLINE
-static void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
- const upb_MiniTableField* field,
- int* op) {
- // If sub-message is not linked, treat as unknown.
- if (field->mode & kUpb_LabelFlags_IsExtension) return;
- const upb_MiniTableSub* sub = &mt->subs[field->UPB_PRIVATE(submsg_index)];
- if ((d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked) ||
- sub->submsg != &_kUpb_MiniTable_Empty) {
- return;
- }
-#ifndef NDEBUG
- const upb_MiniTableField* oneof = upb_MiniTable_GetOneof(mt, field);
- if (oneof) {
- // All other members of the oneof must be message fields that are also
- // unlinked.
- do {
- UPB_ASSERT(upb_MiniTableField_CType(oneof) == kUpb_CType_Message);
- const upb_MiniTableSub* oneof_sub =
- &mt->subs[oneof->UPB_PRIVATE(submsg_index)];
- UPB_ASSERT(!oneof_sub);
- } while (upb_MiniTable_NextOneofField(mt, &oneof));
- }
-#endif // NDEBUG
- *op = kUpb_DecodeOp_UnknownField;
-}
-
-int _upb_Decoder_GetDelimitedOp(upb_Decoder* d, const upb_MiniTable* mt,
- const upb_MiniTableField* field) {
- enum { kRepeatedBase = 19 };
-
- static const int8_t kDelimitedOps[] = {
- /* For non-repeated field type. */
- [kUpb_FakeFieldType_FieldNotFound] =
- kUpb_DecodeOp_UnknownField, // Field not found.
- [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Int64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_UInt64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Int32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Bool] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_String] = kUpb_DecodeOp_String,
- [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
- [kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
- [kUpb_FieldType_UInt32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Enum] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SInt32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SInt64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
- // For repeated field type. */
- [kRepeatedBase + kUpb_FieldType_Double] = OP_FIXPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_Float] = OP_FIXPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Int64] = OP_VARPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_UInt64] = OP_VARPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_Int32] = OP_VARPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Fixed64] = OP_FIXPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_Fixed32] = OP_FIXPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Bool] = OP_VARPCK_LG2(0),
- [kRepeatedBase + kUpb_FieldType_String] = kUpb_DecodeOp_String,
- [kRepeatedBase + kUpb_FieldType_Group] = kUpb_DecodeOp_SubMessage,
- [kRepeatedBase + kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
- [kRepeatedBase + kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
- [kRepeatedBase + kUpb_FieldType_UInt32] = OP_VARPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Enum] = kUpb_DecodeOp_PackedEnum,
- [kRepeatedBase + kUpb_FieldType_SFixed32] = OP_FIXPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_SFixed64] = OP_FIXPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_SInt32] = OP_VARPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_SInt64] = OP_VARPCK_LG2(3),
- // Omitting kUpb_FakeFieldType_MessageSetItem, because we never emit a
- // repeated msgset type
- };
-
- int ndx = field->UPB_PRIVATE(descriptortype);
- if (upb_FieldMode_Get(field) == kUpb_FieldMode_Array) ndx += kRepeatedBase;
- int op = kDelimitedOps[ndx];
-
- if (op == kUpb_DecodeOp_SubMessage) {
- _upb_Decoder_CheckUnlinked(d, mt, field, &op);
- }
-
- return op;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
- const upb_MiniTable* mt,
- const upb_MiniTableField* field,
- int wire_type, wireval* val,
- int* op) {
- static const unsigned kFixed32OkMask = (1 << kUpb_FieldType_Float) |
- (1 << kUpb_FieldType_Fixed32) |
- (1 << kUpb_FieldType_SFixed32);
-
- static const unsigned kFixed64OkMask = (1 << kUpb_FieldType_Double) |
- (1 << kUpb_FieldType_Fixed64) |
- (1 << kUpb_FieldType_SFixed64);
-
- switch (wire_type) {
- case kUpb_WireType_Varint:
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &val->uint64_val);
- *op = _upb_Decoder_GetVarintOp(field);
- _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), val);
- return ptr;
- case kUpb_WireType_32Bit:
- *op = kUpb_DecodeOp_Scalar4Byte;
- if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed32OkMask) == 0) {
- *op = kUpb_DecodeOp_UnknownField;
- }
- return upb_WireReader_ReadFixed32(ptr, &val->uint32_val);
- case kUpb_WireType_64Bit:
- *op = kUpb_DecodeOp_Scalar8Byte;
- if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed64OkMask) == 0) {
- *op = kUpb_DecodeOp_UnknownField;
- }
- return upb_WireReader_ReadFixed64(ptr, &val->uint64_val);
- case kUpb_WireType_Delimited:
- ptr = upb_Decoder_DecodeSize(d, ptr, &val->size);
- *op = _upb_Decoder_GetDelimitedOp(d, mt, field);
- return ptr;
- case kUpb_WireType_StartGroup:
- val->uint32_val = field->number;
- if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
- *op = kUpb_DecodeOp_SubMessage;
- _upb_Decoder_CheckUnlinked(d, mt, field, op);
- } else if (field->UPB_PRIVATE(descriptortype) ==
- kUpb_FakeFieldType_MessageSetItem) {
- *op = kUpb_DecodeOp_MessageSetItem;
- } else {
- *op = kUpb_DecodeOp_UnknownField;
- }
- return ptr;
- default:
- break;
- }
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeKnownField(
- upb_Decoder* d, const char* ptr, upb_Message* msg,
- const upb_MiniTable* layout, const upb_MiniTableField* field, int op,
- wireval* val) {
- const upb_MiniTableSub* subs = layout->subs;
- uint8_t mode = field->mode;
-
- if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
- const upb_MiniTableExtension* ext_layout =
- (const upb_MiniTableExtension*)field;
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, ext_layout, &d->arena);
- if (UPB_UNLIKELY(!ext)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- d->unknown_msg = msg;
- msg = &ext->data;
- subs = &ext->ext->sub;
- }
-
- switch (mode & kUpb_FieldMode_Mask) {
- case kUpb_FieldMode_Array:
- return _upb_Decoder_DecodeToArray(d, ptr, msg, subs, field, val, op);
- case kUpb_FieldMode_Map:
- return _upb_Decoder_DecodeToMap(d, ptr, msg, subs, field, val);
- case kUpb_FieldMode_Scalar:
- return _upb_Decoder_DecodeToSubMessage(d, ptr, msg, subs, field, val, op);
- default:
- UPB_UNREACHABLE();
- }
-}
-
-static const char* _upb_Decoder_ReverseSkipVarint(const char* ptr,
- uint32_t val) {
- uint32_t seen = 0;
- do {
- ptr--;
- seen <<= 7;
- seen |= *ptr & 0x7f;
- } while (seen != val);
- return ptr;
-}
-
-static const char* _upb_Decoder_DecodeUnknownField(upb_Decoder* d,
- const char* ptr,
- upb_Message* msg,
- int field_number,
- int wire_type, wireval val) {
- if (field_number == 0) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-
- // Since unknown fields are the uncommon case, we do a little extra work here
- // to walk backwards through the buffer to find the field start. This frees
- // up a register in the fast paths (when the field is known), which leads to
- // significant speedups in benchmarks.
- const char* start = ptr;
-
- if (wire_type == kUpb_WireType_Delimited) ptr += val.size;
- if (msg) {
- switch (wire_type) {
- case kUpb_WireType_Varint:
- case kUpb_WireType_Delimited:
- start--;
- while (start[-1] & 0x80) start--;
- break;
- case kUpb_WireType_32Bit:
- start -= 4;
- break;
- case kUpb_WireType_64Bit:
- start -= 8;
- break;
- default:
- break;
- }
-
- assert(start == d->debug_valstart);
- uint32_t tag = ((uint32_t)field_number << 3) | wire_type;
- start = _upb_Decoder_ReverseSkipVarint(start, tag);
- assert(start == d->debug_tagstart);
-
- if (wire_type == kUpb_WireType_StartGroup) {
- d->unknown = start;
- d->unknown_msg = msg;
- ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
- start = d->unknown;
- d->unknown = NULL;
- }
- if (!_upb_Message_AddUnknown(msg, start, ptr - start, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- } else if (wire_type == kUpb_WireType_StartGroup) {
- ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
- }
- return ptr;
-}
-
-UPB_NOINLINE
-static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTable* layout) {
- int last_field_index = 0;
-
-#if UPB_FASTTABLE
- // The first time we want to skip fast dispatch, because we may have just been
- // invoked by the fast parser to handle a case that it bailed on.
- if (!_upb_Decoder_IsDone(d, &ptr)) goto nofast;
-#endif
-
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- uint32_t tag;
- const upb_MiniTableField* field;
- int field_number;
- int wire_type;
- wireval val;
- int op;
-
- if (_upb_Decoder_TryFastDispatch(d, &ptr, msg, layout)) break;
-
-#if UPB_FASTTABLE
- nofast:
-#endif
-
-#ifndef NDEBUG
- d->debug_tagstart = ptr;
-#endif
-
- UPB_ASSERT(ptr < d->input.limit_ptr);
- ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
- field_number = tag >> 3;
- wire_type = tag & 7;
-
-#ifndef NDEBUG
- d->debug_valstart = ptr;
-#endif
-
- if (wire_type == kUpb_WireType_EndGroup) {
- d->end_group = field_number;
- return ptr;
- }
-
- field = _upb_Decoder_FindField(d, layout, field_number, &last_field_index);
- ptr = _upb_Decoder_DecodeWireValue(d, ptr, layout, field, wire_type, &val,
- &op);
-
- if (op >= 0) {
- ptr = _upb_Decoder_DecodeKnownField(d, ptr, msg, layout, field, op, &val);
- } else {
- switch (op) {
- case kUpb_DecodeOp_UnknownField:
- ptr = _upb_Decoder_DecodeUnknownField(d, ptr, msg, field_number,
- wire_type, val);
- break;
- case kUpb_DecodeOp_MessageSetItem:
- ptr = upb_Decoder_DecodeMessageSetItem(d, ptr, msg, layout);
- break;
- }
- }
- }
-
- return UPB_UNLIKELY(layout && layout->required_count)
- ? _upb_Decoder_CheckRequired(d, ptr, msg, layout)
- : ptr;
-}
-
-const char* _upb_FastDecoder_DecodeGeneric(struct upb_Decoder* d,
- const char* ptr, upb_Message* msg,
- intptr_t table, uint64_t hasbits,
- uint64_t data) {
- (void)data;
- *(uint32_t*)msg |= hasbits;
- return _upb_Decoder_DecodeMessage(d, ptr, msg, decode_totablep(table));
-}
-
-static upb_DecodeStatus _upb_Decoder_DecodeTop(struct upb_Decoder* d,
- const char* buf, void* msg,
- const upb_MiniTable* l) {
- if (!_upb_Decoder_TryFastDispatch(d, &buf, msg, l)) {
- _upb_Decoder_DecodeMessage(d, buf, msg, l);
- }
- if (d->end_group != DECODE_NOGROUP) return kUpb_DecodeStatus_Malformed;
- if (d->missing_required) return kUpb_DecodeStatus_MissingRequired;
- return kUpb_DecodeStatus_Ok;
-}
-
-UPB_NOINLINE
-const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
- const char* ptr, int overrun) {
- return _upb_EpsCopyInputStream_IsDoneFallbackInline(
- e, ptr, overrun, _upb_Decoder_BufferFlipCallback);
-}
-
-static upb_DecodeStatus upb_Decoder_Decode(upb_Decoder* const decoder,
- const char* const buf,
- void* const msg,
- const upb_MiniTable* const l,
- upb_Arena* const arena) {
- if (UPB_SETJMP(decoder->err) == 0) {
- decoder->status = _upb_Decoder_DecodeTop(decoder, buf, msg, l);
- } else {
- UPB_ASSERT(decoder->status != kUpb_DecodeStatus_Ok);
- }
-
- _upb_MemBlock* blocks =
- upb_Atomic_Load(&decoder->arena.blocks, memory_order_relaxed);
- arena->head = decoder->arena.head;
- upb_Atomic_Store(&arena->blocks, blocks, memory_order_relaxed);
- return decoder->status;
-}
-
-upb_DecodeStatus upb_Decode(const char* buf, size_t size, void* msg,
- const upb_MiniTable* l,
- const upb_ExtensionRegistry* extreg, int options,
- upb_Arena* arena) {
- upb_Decoder decoder;
- unsigned depth = (unsigned)options >> 16;
-
- upb_EpsCopyInputStream_Init(&decoder.input, &buf, size,
- options & kUpb_DecodeOption_AliasString);
-
- decoder.extreg = extreg;
- decoder.unknown = NULL;
- decoder.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
- decoder.end_group = DECODE_NOGROUP;
- decoder.options = (uint16_t)options;
- decoder.missing_required = false;
- decoder.status = kUpb_DecodeStatus_Ok;
-
- // Violating the encapsulation of the arena for performance reasons.
- // This is a temporary arena that we swap into and swap out of when we are
- // done. The temporary arena only needs to be able to handle allocation,
- // not fuse or free, so it does not need many of the members to be initialized
- // (particularly parent_or_count).
- _upb_MemBlock* blocks = upb_Atomic_Load(&arena->blocks, memory_order_relaxed);
- decoder.arena.head = arena->head;
- decoder.arena.block_alloc = arena->block_alloc;
- upb_Atomic_Init(&decoder.arena.blocks, blocks);
-
- return upb_Decoder_Decode(&decoder, buf, msg, l, arena);
-}
-
-#undef OP_FIXPCK_LG2
-#undef OP_VARPCK_LG2
-
-// Fast decoder: ~3x the speed of decode.c, but requires x86-64/ARM64.
-// Also the table size grows by 2x.
-//
-// Could potentially be ported to other 64-bit archs that pass at least six
-// arguments in registers and have 8 unused high bits in pointers.
-//
-// The overall design is to create specialized functions for every possible
-// field type (eg. oneof boolean field with a 1 byte tag) and then dispatch
-// to the specialized function as quickly as possible.
-
-
-
-// Must be last.
-
-#if UPB_FASTTABLE
-
-// The standard set of arguments passed to each parsing function.
-// Thanks to x86-64 calling conventions, these will stay in registers.
-#define UPB_PARSE_PARAMS \
- upb_Decoder *d, const char *ptr, upb_Message *msg, intptr_t table, \
- uint64_t hasbits, uint64_t data
-
-#define UPB_PARSE_ARGS d, ptr, msg, table, hasbits, data
-
-#define RETURN_GENERIC(m) \
- /* Uncomment either of these for debugging purposes. */ \
- /* fprintf(stderr, m); */ \
- /*__builtin_trap(); */ \
- return _upb_FastDecoder_DecodeGeneric(d, ptr, msg, table, hasbits, 0);
-
-typedef enum {
- CARD_s = 0, /* Singular (optional, non-repeated) */
- CARD_o = 1, /* Oneof */
- CARD_r = 2, /* Repeated */
- CARD_p = 3 /* Packed Repeated */
-} upb_card;
-
-UPB_NOINLINE
-static const char* fastdecode_isdonefallback(UPB_PARSE_PARAMS) {
- int overrun = data;
- ptr = _upb_EpsCopyInputStream_IsDoneFallbackInline(
- &d->input, ptr, overrun, _upb_Decoder_BufferFlipCallback);
- data = _upb_FastDecoder_LoadTag(ptr);
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_dispatch(UPB_PARSE_PARAMS) {
- int overrun;
- switch (upb_EpsCopyInputStream_IsDoneStatus(&d->input, ptr, &overrun)) {
- case kUpb_IsDoneStatus_Done:
- *(uint32_t*)msg |= hasbits; // Sync hasbits.
- const upb_MiniTable* l = decode_totablep(table);
- return UPB_UNLIKELY(l->required_count)
- ? _upb_Decoder_CheckRequired(d, ptr, msg, l)
- : ptr;
- case kUpb_IsDoneStatus_NotDone:
- break;
- case kUpb_IsDoneStatus_NeedFallback:
- data = overrun;
- UPB_MUSTTAIL return fastdecode_isdonefallback(UPB_PARSE_ARGS);
- }
-
- // Read two bytes of tag data (for a one-byte tag, the high byte is junk).
- data = _upb_FastDecoder_LoadTag(ptr);
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
-}
-
-UPB_FORCEINLINE
-static bool fastdecode_checktag(uint16_t data, int tagbytes) {
- if (tagbytes == 1) {
- return (data & 0xff) == 0;
- } else {
- return data == 0;
- }
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_longsize(const char* ptr, int* size) {
- int i;
- UPB_ASSERT(*size & 0x80);
- *size &= 0xff;
- for (i = 0; i < 3; i++) {
- ptr++;
- size_t byte = (uint8_t)ptr[-1];
- *size += (byte - 1) << (7 + 7 * i);
- if (UPB_LIKELY((byte & 0x80) == 0)) return ptr;
- }
- ptr++;
- size_t byte = (uint8_t)ptr[-1];
- // len is limited by 2gb not 4gb, hence 8 and not 16 as normally expected
- // for a 32 bit varint.
- if (UPB_UNLIKELY(byte >= 8)) return NULL;
- *size += (byte - 1) << 28;
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_delimited(
- upb_Decoder* d, const char* ptr,
- upb_EpsCopyInputStream_ParseDelimitedFunc* func, void* ctx) {
- ptr++;
-
- // Sign-extend so varint greater than one byte becomes negative, causing
- // fast delimited parse to fail.
- int len = (int8_t)ptr[-1];
-
- if (!upb_EpsCopyInputStream_TryParseDelimitedFast(&d->input, &ptr, len, func,
- ctx)) {
- // Slow case: Sub-message is >=128 bytes and/or exceeds the current buffer.
- // If it exceeds the buffer limit, limit/limit_ptr will change during
- // sub-message parsing, so we need to preserve delta, not limit.
- if (UPB_UNLIKELY(len & 0x80)) {
- // Size varint >1 byte (length >= 128).
- ptr = fastdecode_longsize(ptr, &len);
- if (!ptr) {
- // Corrupt wire format: size exceeded INT_MAX.
- return NULL;
- }
- }
- if (!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, len)) {
- // Corrupt wire format: invalid limit.
- return NULL;
- }
- int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, len);
- ptr = func(&d->input, ptr, ctx);
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
- }
- return ptr;
-}
-
-/* singular, oneof, repeated field handling ***********************************/
-
-typedef struct {
- upb_Array* arr;
- void* end;
-} fastdecode_arr;
-
-typedef enum {
- FD_NEXT_ATLIMIT,
- FD_NEXT_SAMEFIELD,
- FD_NEXT_OTHERFIELD
-} fastdecode_next;
-
-typedef struct {
- void* dst;
- fastdecode_next next;
- uint32_t tag;
-} fastdecode_nextret;
-
-UPB_FORCEINLINE
-static void* fastdecode_resizearr(upb_Decoder* d, void* dst,
- fastdecode_arr* farr, int valbytes) {
- if (UPB_UNLIKELY(dst == farr->end)) {
- size_t old_size = farr->arr->capacity;
- size_t old_bytes = old_size * valbytes;
- size_t new_size = old_size * 2;
- size_t new_bytes = new_size * valbytes;
- char* old_ptr = _upb_array_ptr(farr->arr);
- char* new_ptr = upb_Arena_Realloc(&d->arena, old_ptr, old_bytes, new_bytes);
- uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
- farr->arr->capacity = new_size;
- farr->arr->data = _upb_array_tagptr(new_ptr, elem_size_lg2);
- dst = (void*)(new_ptr + (old_size * valbytes));
- farr->end = (void*)(new_ptr + (new_size * valbytes));
- }
- return dst;
-}
-
-UPB_FORCEINLINE
-static bool fastdecode_tagmatch(uint32_t tag, uint64_t data, int tagbytes) {
- if (tagbytes == 1) {
- return (uint8_t)tag == (uint8_t)data;
- } else {
- return (uint16_t)tag == (uint16_t)data;
- }
-}
-
-UPB_FORCEINLINE
-static void fastdecode_commitarr(void* dst, fastdecode_arr* farr,
- int valbytes) {
- farr->arr->size =
- (size_t)((char*)dst - (char*)_upb_array_ptr(farr->arr)) / valbytes;
-}
-
-UPB_FORCEINLINE
-static fastdecode_nextret fastdecode_nextrepeated(upb_Decoder* d, void* dst,
- const char** ptr,
- fastdecode_arr* farr,
- uint64_t data, int tagbytes,
- int valbytes) {
- fastdecode_nextret ret;
- dst = (char*)dst + valbytes;
-
- if (UPB_LIKELY(!_upb_Decoder_IsDone(d, ptr))) {
- ret.tag = _upb_FastDecoder_LoadTag(*ptr);
- if (fastdecode_tagmatch(ret.tag, data, tagbytes)) {
- ret.next = FD_NEXT_SAMEFIELD;
- } else {
- fastdecode_commitarr(dst, farr, valbytes);
- ret.next = FD_NEXT_OTHERFIELD;
- }
- } else {
- fastdecode_commitarr(dst, farr, valbytes);
- ret.next = FD_NEXT_ATLIMIT;
- }
-
- ret.dst = dst;
- return ret;
-}
-
-UPB_FORCEINLINE
-static void* fastdecode_fieldmem(upb_Message* msg, uint64_t data) {
- size_t ofs = data >> 48;
- return (char*)msg + ofs;
-}
-
-UPB_FORCEINLINE
-static void* fastdecode_getfield(upb_Decoder* d, const char* ptr,
- upb_Message* msg, uint64_t* data,
- uint64_t* hasbits, fastdecode_arr* farr,
- int valbytes, upb_card card) {
- switch (card) {
- case CARD_s: {
- uint8_t hasbit_index = *data >> 24;
- // Set hasbit and return pointer to scalar field.
- *hasbits |= 1ull << hasbit_index;
- return fastdecode_fieldmem(msg, *data);
- }
- case CARD_o: {
- uint16_t case_ofs = *data >> 32;
- uint32_t* oneof_case = UPB_PTR_AT(msg, case_ofs, uint32_t);
- uint8_t field_number = *data >> 24;
- *oneof_case = field_number;
- return fastdecode_fieldmem(msg, *data);
- }
- case CARD_r: {
- // Get pointer to upb_Array and allocate/expand if necessary.
- uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
- upb_Array** arr_p = fastdecode_fieldmem(msg, *data);
- char* begin;
- *(uint32_t*)msg |= *hasbits;
- *hasbits = 0;
- if (UPB_LIKELY(!*arr_p)) {
- farr->arr = _upb_Array_New(&d->arena, 8, elem_size_lg2);
- *arr_p = farr->arr;
- } else {
- farr->arr = *arr_p;
- }
- begin = _upb_array_ptr(farr->arr);
- farr->end = begin + (farr->arr->capacity * valbytes);
- *data = _upb_FastDecoder_LoadTag(ptr);
- return begin + (farr->arr->size * valbytes);
- }
- default:
- UPB_UNREACHABLE();
- }
-}
-
-UPB_FORCEINLINE
-static bool fastdecode_flippacked(uint64_t* data, int tagbytes) {
- *data ^= (0x2 ^ 0x0); // Patch data to match packed wiretype.
- return fastdecode_checktag(*data, tagbytes);
-}
-
-#define FASTDECODE_CHECKPACKED(tagbytes, card, func) \
- if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
- if (card == CARD_r && fastdecode_flippacked(&data, tagbytes)) { \
- UPB_MUSTTAIL return func(UPB_PARSE_ARGS); \
- } \
- RETURN_GENERIC("packed check tag mismatch\n"); \
- }
-
-/* varint fields **************************************************************/
-
-UPB_FORCEINLINE
-static uint64_t fastdecode_munge(uint64_t val, int valbytes, bool zigzag) {
- if (valbytes == 1) {
- return val != 0;
- } else if (zigzag) {
- if (valbytes == 4) {
- uint32_t n = val;
- return (n >> 1) ^ -(int32_t)(n & 1);
- } else if (valbytes == 8) {
- return (val >> 1) ^ -(int64_t)(val & 1);
- }
- UPB_UNREACHABLE();
- }
- return val;
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_varint64(const char* ptr, uint64_t* val) {
- ptr++;
- *val = (uint8_t)ptr[-1];
- if (UPB_UNLIKELY(*val & 0x80)) {
- int i;
- for (i = 0; i < 8; i++) {
- ptr++;
- uint64_t byte = (uint8_t)ptr[-1];
- *val += (byte - 1) << (7 + 7 * i);
- if (UPB_LIKELY((byte & 0x80) == 0)) goto done;
- }
- ptr++;
- uint64_t byte = (uint8_t)ptr[-1];
- if (byte > 1) {
- return NULL;
- }
- *val += (byte - 1) << 63;
- }
-done:
- UPB_ASSUME(ptr != NULL);
- return ptr;
-}
-
-#define FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, zigzag, packed) \
- uint64_t val; \
- void* dst; \
- fastdecode_arr farr; \
- \
- FASTDECODE_CHECKPACKED(tagbytes, card, packed); \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
- card); \
- if (card == CARD_r) { \
- if (UPB_UNLIKELY(!dst)) { \
- RETURN_GENERIC("need array resize\n"); \
- } \
- } \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
- } \
- \
- ptr += tagbytes; \
- ptr = fastdecode_varint64(ptr, &val); \
- if (ptr == NULL) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- val = fastdecode_munge(val, valbytes, zigzag); \
- memcpy(dst, &val, valbytes); \
- \
- if (card == CARD_r) { \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, valbytes); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-typedef struct {
- uint8_t valbytes;
- bool zigzag;
- void* dst;
- fastdecode_arr farr;
-} fastdecode_varintdata;
-
-UPB_FORCEINLINE
-static const char* fastdecode_topackedvarint(upb_EpsCopyInputStream* e,
- const char* ptr, void* ctx) {
- upb_Decoder* d = (upb_Decoder*)e;
- fastdecode_varintdata* data = ctx;
- void* dst = data->dst;
- uint64_t val;
-
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- dst = fastdecode_resizearr(d, dst, &data->farr, data->valbytes);
- ptr = fastdecode_varint64(ptr, &val);
- if (ptr == NULL) return NULL;
- val = fastdecode_munge(val, data->valbytes, data->zigzag);
- memcpy(dst, &val, data->valbytes);
- dst = (char*)dst + data->valbytes;
- }
-
- fastdecode_commitarr(dst, &data->farr, data->valbytes);
- return ptr;
-}
-
-#define FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, zigzag, unpacked) \
- fastdecode_varintdata ctx = {valbytes, zigzag}; \
- \
- FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked); \
- \
- ctx.dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &ctx.farr, \
- valbytes, CARD_r); \
- if (UPB_UNLIKELY(!ctx.dst)) { \
- RETURN_GENERIC("need array resize\n"); \
- } \
- \
- ptr += tagbytes; \
- ptr = fastdecode_delimited(d, ptr, &fastdecode_topackedvarint, &ctx); \
- \
- if (UPB_UNLIKELY(ptr == NULL)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(d, ptr, msg, table, hasbits, 0);
-
-#define FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, zigzag, unpacked, packed) \
- if (card == CARD_p) { \
- FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, zigzag, unpacked); \
- } else { \
- FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, zigzag, packed); \
- }
-
-#define z_ZZ true
-#define b_ZZ false
-#define v_ZZ false
-
-/* Generate all combinations:
- * {s,o,r,p} x {b1,v4,z4,v8,z8} x {1bt,2bt} */
-
-#define F(card, type, valbytes, tagbytes) \
- UPB_NOINLINE \
- const char* upb_p##card##type##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
- CARD_##card, type##_ZZ, \
- upb_pr##type##valbytes##_##tagbytes##bt, \
- upb_pp##type##valbytes##_##tagbytes##bt); \
- }
-
-#define TYPES(card, tagbytes) \
- F(card, b, 1, tagbytes) \
- F(card, v, 4, tagbytes) \
- F(card, v, 8, tagbytes) \
- F(card, z, 4, tagbytes) \
- F(card, z, 8, tagbytes)
-
-#define TAGBYTES(card) \
- TYPES(card, 1) \
- TYPES(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-TAGBYTES(p)
-
-#undef z_ZZ
-#undef b_ZZ
-#undef v_ZZ
-#undef o_ONEOF
-#undef s_ONEOF
-#undef r_ONEOF
-#undef F
-#undef TYPES
-#undef TAGBYTES
-#undef FASTDECODE_UNPACKEDVARINT
-#undef FASTDECODE_PACKEDVARINT
-#undef FASTDECODE_VARINT
-
-/* fixed fields ***************************************************************/
-
-#define FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, packed) \
- void* dst; \
- fastdecode_arr farr; \
- \
- FASTDECODE_CHECKPACKED(tagbytes, card, packed) \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
- card); \
- if (card == CARD_r) { \
- if (UPB_UNLIKELY(!dst)) { \
- RETURN_GENERIC("couldn't allocate array in arena\n"); \
- } \
- } \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
- } \
- \
- ptr += tagbytes; \
- memcpy(dst, ptr, valbytes); \
- ptr += valbytes; \
- \
- if (card == CARD_r) { \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, valbytes); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-#define FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, unpacked) \
- FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked) \
- \
- ptr += tagbytes; \
- int size = (uint8_t)ptr[0]; \
- ptr++; \
- if (size & 0x80) { \
- ptr = fastdecode_longsize(ptr, &size); \
- } \
- \
- if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckDataSizeAvailable( \
- &d->input, ptr, size) || \
- (size % valbytes) != 0)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- upb_Array** arr_p = fastdecode_fieldmem(msg, data); \
- upb_Array* arr = *arr_p; \
- uint8_t elem_size_lg2 = __builtin_ctz(valbytes); \
- int elems = size / valbytes; \
- \
- if (UPB_LIKELY(!arr)) { \
- *arr_p = arr = _upb_Array_New(&d->arena, elems, elem_size_lg2); \
- if (!arr) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- } else { \
- _upb_Array_ResizeUninitialized(arr, elems, &d->arena); \
- } \
- \
- char* dst = _upb_array_ptr(arr); \
- memcpy(dst, ptr, size); \
- arr->size = elems; \
- \
- ptr += size; \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-#define FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, unpacked, packed) \
- if (card == CARD_p) { \
- FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, unpacked); \
- } else { \
- FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, packed); \
- }
-
-/* Generate all combinations:
- * {s,o,r,p} x {f4,f8} x {1bt,2bt} */
-
-#define F(card, valbytes, tagbytes) \
- UPB_NOINLINE \
- const char* upb_p##card##f##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
- CARD_##card, upb_ppf##valbytes##_##tagbytes##bt, \
- upb_prf##valbytes##_##tagbytes##bt); \
- }
-
-#define TYPES(card, tagbytes) \
- F(card, 4, tagbytes) \
- F(card, 8, tagbytes)
-
-#define TAGBYTES(card) \
- TYPES(card, 1) \
- TYPES(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-TAGBYTES(p)
-
-#undef F
-#undef TYPES
-#undef TAGBYTES
-#undef FASTDECODE_UNPACKEDFIXED
-#undef FASTDECODE_PACKEDFIXED
-
-/* string fields **************************************************************/
-
-typedef const char* fastdecode_copystr_func(struct upb_Decoder* d,
- const char* ptr, upb_Message* msg,
- const upb_MiniTable* table,
- uint64_t hasbits,
- upb_StringView* dst);
-
-UPB_NOINLINE
-static const char* fastdecode_verifyutf8(upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t data) {
- upb_StringView* dst = (upb_StringView*)data;
- if (!_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) {
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
- }
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-}
-
-#define FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, validate_utf8) \
- int size = (uint8_t)ptr[0]; /* Could plumb through hasbits. */ \
- ptr++; \
- if (size & 0x80) { \
- ptr = fastdecode_longsize(ptr, &size); \
- } \
- \
- if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, size))) { \
- dst->size = 0; \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- const char* s_ptr = ptr; \
- ptr = upb_EpsCopyInputStream_ReadString(&d->input, &s_ptr, size, &d->arena); \
- if (!ptr) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory); \
- dst->data = s_ptr; \
- dst->size = size; \
- \
- if (validate_utf8) { \
- data = (uint64_t)dst; \
- UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
- } else { \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
- }
-
-UPB_NOINLINE
-static const char* fastdecode_longstring_utf8(struct upb_Decoder* d,
- const char* ptr, upb_Message* msg,
- intptr_t table, uint64_t hasbits,
- uint64_t data) {
- upb_StringView* dst = (upb_StringView*)data;
- FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, true);
-}
-
-UPB_NOINLINE
-static const char* fastdecode_longstring_noutf8(
- struct upb_Decoder* d, const char* ptr, upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t data) {
- upb_StringView* dst = (upb_StringView*)data;
- FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, false);
-}
-
-UPB_FORCEINLINE
-static void fastdecode_docopy(upb_Decoder* d, const char* ptr, uint32_t size,
- int copy, char* data, upb_StringView* dst) {
- d->arena.head.ptr += copy;
- dst->data = data;
- UPB_UNPOISON_MEMORY_REGION(data, copy);
- memcpy(data, ptr, copy);
- UPB_POISON_MEMORY_REGION(data + size, copy - size);
-}
-
-#define FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
- card, validate_utf8) \
- upb_StringView* dst; \
- fastdecode_arr farr; \
- int64_t size; \
- size_t arena_has; \
- size_t common_has; \
- char* buf; \
- \
- UPB_ASSERT(!upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0)); \
- UPB_ASSERT(fastdecode_checktag(data, tagbytes)); \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
- sizeof(upb_StringView), card); \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
- } \
- \
- size = (uint8_t)ptr[tagbytes]; \
- ptr += tagbytes + 1; \
- dst->size = size; \
- \
- buf = d->arena.head.ptr; \
- arena_has = _upb_ArenaHas(&d->arena); \
- common_has = UPB_MIN(arena_has, \
- upb_EpsCopyInputStream_BytesAvailable(&d->input, ptr)); \
- \
- if (UPB_LIKELY(size <= 15 - tagbytes)) { \
- if (arena_has < 16) goto longstr; \
- d->arena.head.ptr += 16; \
- memcpy(buf, ptr - tagbytes - 1, 16); \
- dst->data = buf + tagbytes + 1; \
- } else if (UPB_LIKELY(size <= 32)) { \
- if (UPB_UNLIKELY(common_has < 32)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 32, buf, dst); \
- } else if (UPB_LIKELY(size <= 64)) { \
- if (UPB_UNLIKELY(common_has < 64)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 64, buf, dst); \
- } else if (UPB_LIKELY(size < 128)) { \
- if (UPB_UNLIKELY(common_has < 128)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 128, buf, dst); \
- } else { \
- goto longstr; \
- } \
- \
- ptr += size; \
- \
- if (card == CARD_r) { \
- if (validate_utf8 && \
- !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
- } \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- if (card != CARD_r && validate_utf8) { \
- data = (uint64_t)dst; \
- UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
- \
- longstr: \
- if (card == CARD_r) { \
- fastdecode_commitarr(dst + 1, &farr, sizeof(upb_StringView)); \
- } \
- ptr--; \
- if (validate_utf8) { \
- UPB_MUSTTAIL return fastdecode_longstring_utf8(d, ptr, msg, table, \
- hasbits, (uint64_t)dst); \
- } else { \
- UPB_MUSTTAIL return fastdecode_longstring_noutf8(d, ptr, msg, table, \
- hasbits, (uint64_t)dst); \
- }
-
-#define FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, card, \
- copyfunc, validate_utf8) \
- upb_StringView* dst; \
- fastdecode_arr farr; \
- int64_t size; \
- \
- if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
- RETURN_GENERIC("string field tag mismatch\n"); \
- } \
- \
- if (UPB_UNLIKELY( \
- !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0))) { \
- UPB_MUSTTAIL return copyfunc(UPB_PARSE_ARGS); \
- } \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
- sizeof(upb_StringView), card); \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
- } \
- \
- size = (int8_t)ptr[tagbytes]; \
- ptr += tagbytes + 1; \
- \
- if (UPB_UNLIKELY( \
- !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, size))) { \
- ptr--; \
- if (validate_utf8) { \
- return fastdecode_longstring_utf8(d, ptr, msg, table, hasbits, \
- (uint64_t)dst); \
- } else { \
- return fastdecode_longstring_noutf8(d, ptr, msg, table, hasbits, \
- (uint64_t)dst); \
- } \
- } \
- \
- dst->data = ptr; \
- dst->size = size; \
- ptr = upb_EpsCopyInputStream_ReadStringAliased(&d->input, &dst->data, \
- dst->size); \
- \
- if (card == CARD_r) { \
- if (validate_utf8 && \
- !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
- } \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- if (card != CARD_r && validate_utf8) { \
- data = (uint64_t)dst; \
- UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-/* Generate all combinations:
- * {p,c} x {s,o,r} x {s, b} x {1bt,2bt} */
-
-#define s_VALIDATE true
-#define b_VALIDATE false
-
-#define F(card, tagbytes, type) \
- UPB_NOINLINE \
- const char* upb_c##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
- CARD_##card, type##_VALIDATE); \
- } \
- const char* upb_p##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, \
- CARD_##card, upb_c##card##type##_##tagbytes##bt, \
- type##_VALIDATE); \
- }
-
-#define UTF8(card, tagbytes) \
- F(card, tagbytes, s) \
- F(card, tagbytes, b)
-
-#define TAGBYTES(card) \
- UTF8(card, 1) \
- UTF8(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-
-#undef s_VALIDATE
-#undef b_VALIDATE
-#undef F
-#undef TAGBYTES
-#undef FASTDECODE_LONGSTRING
-#undef FASTDECODE_COPYSTRING
-#undef FASTDECODE_STRING
-
-/* message fields *************************************************************/
-
-UPB_INLINE
-upb_Message* decode_newmsg_ceil(upb_Decoder* d, const upb_MiniTable* l,
- int msg_ceil_bytes) {
- size_t size = l->size + sizeof(upb_Message_Internal);
- char* msg_data;
- if (UPB_LIKELY(msg_ceil_bytes > 0 &&
- _upb_ArenaHas(&d->arena) >= msg_ceil_bytes)) {
- UPB_ASSERT(size <= (size_t)msg_ceil_bytes);
- msg_data = d->arena.head.ptr;
- d->arena.head.ptr += size;
- UPB_UNPOISON_MEMORY_REGION(msg_data, msg_ceil_bytes);
- memset(msg_data, 0, msg_ceil_bytes);
- UPB_POISON_MEMORY_REGION(msg_data + size, msg_ceil_bytes - size);
- } else {
- msg_data = (char*)upb_Arena_Malloc(&d->arena, size);
- memset(msg_data, 0, size);
- }
- return msg_data + sizeof(upb_Message_Internal);
-}
-
-typedef struct {
- intptr_t table;
- upb_Message* msg;
-} fastdecode_submsgdata;
-
-UPB_FORCEINLINE
-static const char* fastdecode_tosubmsg(upb_EpsCopyInputStream* e,
- const char* ptr, void* ctx) {
- upb_Decoder* d = (upb_Decoder*)e;
- fastdecode_submsgdata* submsg = ctx;
- ptr = fastdecode_dispatch(d, ptr, submsg->msg, submsg->table, 0, 0);
- UPB_ASSUME(ptr != NULL);
- return ptr;
-}
-
-#define FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, \
- msg_ceil_bytes, card) \
- \
- if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
- RETURN_GENERIC("submessage field tag mismatch\n"); \
- } \
- \
- if (--d->depth == 0) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded); \
- } \
- \
- upb_Message** dst; \
- uint32_t submsg_idx = (data >> 16) & 0xff; \
- const upb_MiniTable* tablep = decode_totablep(table); \
- const upb_MiniTable* subtablep = tablep->subs[submsg_idx].submsg; \
- fastdecode_submsgdata submsg = {decode_totable(subtablep)}; \
- fastdecode_arr farr; \
- \
- if (subtablep->table_mask == (uint8_t)-1) { \
- RETURN_GENERIC("submessage doesn't have fast tables."); \
- } \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
- sizeof(upb_Message*), card); \
- \
- if (card == CARD_s) { \
- *(uint32_t*)msg |= hasbits; \
- hasbits = 0; \
- } \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_Message*)); \
- } \
- \
- submsg.msg = *dst; \
- \
- if (card == CARD_r || UPB_LIKELY(!submsg.msg)) { \
- *dst = submsg.msg = decode_newmsg_ceil(d, subtablep, msg_ceil_bytes); \
- } \
- \
- ptr += tagbytes; \
- ptr = fastdecode_delimited(d, ptr, fastdecode_tosubmsg, &submsg); \
- \
- if (UPB_UNLIKELY(ptr == NULL || d->end_group != DECODE_NOGROUP)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- if (card == CARD_r) { \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_Message*)); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- d->depth++; \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- d->depth++; \
- return ptr; \
- } \
- } \
- \
- d->depth++; \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-#define F(card, tagbytes, size_ceil, ceil_arg) \
- const char* upb_p##card##m_##tagbytes##bt_max##size_ceil##b( \
- UPB_PARSE_PARAMS) { \
- FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, ceil_arg, \
- CARD_##card); \
- }
-
-#define SIZES(card, tagbytes) \
- F(card, tagbytes, 64, 64) \
- F(card, tagbytes, 128, 128) \
- F(card, tagbytes, 192, 192) \
- F(card, tagbytes, 256, 256) \
- F(card, tagbytes, max, -1)
-
-#define TAGBYTES(card) \
- SIZES(card, 1) \
- SIZES(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-
-#undef TAGBYTES
-#undef SIZES
-#undef F
-#undef FASTDECODE_SUBMSG
-
-#endif /* UPB_FASTTABLE */
-
-// We encode backwards, to avoid pre-computing lengths (one-pass encode).
-
-
-#include <setjmp.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-
-// Must be last.
-
-#define UPB_PB_VARINT_MAX_LEN 10
-
-UPB_NOINLINE
-static size_t encode_varint64(uint64_t val, char* buf) {
- size_t i = 0;
- do {
- uint8_t byte = val & 0x7fU;
- val >>= 7;
- if (val) byte |= 0x80U;
- buf[i++] = byte;
- } while (val);
- return i;
-}
-
-static uint32_t encode_zz32(int32_t n) {
- return ((uint32_t)n << 1) ^ (n >> 31);
-}
-static uint64_t encode_zz64(int64_t n) {
- return ((uint64_t)n << 1) ^ (n >> 63);
-}
-
-typedef struct {
- upb_EncodeStatus status;
- jmp_buf err;
- upb_Arena* arena;
- char *buf, *ptr, *limit;
- int options;
- int depth;
- _upb_mapsorter sorter;
-} upb_encstate;
-
-static size_t upb_roundup_pow2(size_t bytes) {
- size_t ret = 128;
- while (ret < bytes) {
- ret *= 2;
- }
- return ret;
-}
-
-UPB_NORETURN static void encode_err(upb_encstate* e, upb_EncodeStatus s) {
- UPB_ASSERT(s != kUpb_EncodeStatus_Ok);
- e->status = s;
- UPB_LONGJMP(e->err, 1);
-}
-
-UPB_NOINLINE
-static void encode_growbuffer(upb_encstate* e, size_t bytes) {
- size_t old_size = e->limit - e->buf;
- size_t new_size = upb_roundup_pow2(bytes + (e->limit - e->ptr));
- char* new_buf = upb_Arena_Realloc(e->arena, e->buf, old_size, new_size);
-
- if (!new_buf) encode_err(e, kUpb_EncodeStatus_OutOfMemory);
-
- // We want previous data at the end, realloc() put it at the beginning.
- // TODO: This is somewhat inefficient since we are copying twice.
- // Maybe create a realloc() that copies to the end of the new buffer?
- if (old_size > 0) {
- memmove(new_buf + new_size - old_size, e->buf, old_size);
- }
-
- e->ptr = new_buf + new_size - (e->limit - e->ptr);
- e->limit = new_buf + new_size;
- e->buf = new_buf;
-
- e->ptr -= bytes;
-}
-
-/* Call to ensure that at least "bytes" bytes are available for writing at
- * e->ptr. Returns false if the bytes could not be allocated. */
-UPB_FORCEINLINE
-static void encode_reserve(upb_encstate* e, size_t bytes) {
- if ((size_t)(e->ptr - e->buf) < bytes) {
- encode_growbuffer(e, bytes);
- return;
- }
-
- e->ptr -= bytes;
-}
-
-/* Writes the given bytes to the buffer, handling reserve/advance. */
-static void encode_bytes(upb_encstate* e, const void* data, size_t len) {
- if (len == 0) return; /* memcpy() with zero size is UB */
- encode_reserve(e, len);
- memcpy(e->ptr, data, len);
-}
-
-static void encode_fixed64(upb_encstate* e, uint64_t val) {
- val = _upb_BigEndian_Swap64(val);
- encode_bytes(e, &val, sizeof(uint64_t));
-}
-
-static void encode_fixed32(upb_encstate* e, uint32_t val) {
- val = _upb_BigEndian_Swap32(val);
- encode_bytes(e, &val, sizeof(uint32_t));
-}
-
-UPB_NOINLINE
-static void encode_longvarint(upb_encstate* e, uint64_t val) {
- size_t len;
- char* start;
-
- encode_reserve(e, UPB_PB_VARINT_MAX_LEN);
- len = encode_varint64(val, e->ptr);
- start = e->ptr + UPB_PB_VARINT_MAX_LEN - len;
- memmove(start, e->ptr, len);
- e->ptr = start;
-}
-
-UPB_FORCEINLINE
-static void encode_varint(upb_encstate* e, uint64_t val) {
- if (val < 128 && e->ptr != e->buf) {
- --e->ptr;
- *e->ptr = val;
- } else {
- encode_longvarint(e, val);
- }
-}
-
-static void encode_double(upb_encstate* e, double d) {
- uint64_t u64;
- UPB_ASSERT(sizeof(double) == sizeof(uint64_t));
- memcpy(&u64, &d, sizeof(uint64_t));
- encode_fixed64(e, u64);
-}
-
-static void encode_float(upb_encstate* e, float d) {
- uint32_t u32;
- UPB_ASSERT(sizeof(float) == sizeof(uint32_t));
- memcpy(&u32, &d, sizeof(uint32_t));
- encode_fixed32(e, u32);
-}
-
-static void encode_tag(upb_encstate* e, uint32_t field_number,
- uint8_t wire_type) {
- encode_varint(e, (field_number << 3) | wire_type);
-}
-
-static void encode_fixedarray(upb_encstate* e, const upb_Array* arr,
- size_t elem_size, uint32_t tag) {
- size_t bytes = arr->size * elem_size;
- const char* data = _upb_array_constptr(arr);
- const char* ptr = data + bytes - elem_size;
-
- if (tag || !_upb_IsLittleEndian()) {
- while (true) {
- if (elem_size == 4) {
- uint32_t val;
- memcpy(&val, ptr, sizeof(val));
- val = _upb_BigEndian_Swap32(val);
- encode_bytes(e, &val, elem_size);
- } else {
- UPB_ASSERT(elem_size == 8);
- uint64_t val;
- memcpy(&val, ptr, sizeof(val));
- val = _upb_BigEndian_Swap64(val);
- encode_bytes(e, &val, elem_size);
- }
-
- if (tag) encode_varint(e, tag);
- if (ptr == data) break;
- ptr -= elem_size;
- }
- } else {
- encode_bytes(e, data, bytes);
- }
-}
-
-static void encode_message(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTable* m, size_t* size);
-
-static void encode_TaggedMessagePtr(upb_encstate* e,
- upb_TaggedMessagePtr tagged,
- const upb_MiniTable* m, size_t* size) {
- if (upb_TaggedMessagePtr_IsEmpty(tagged)) {
- m = &_kUpb_MiniTable_Empty;
- }
- encode_message(e, _upb_TaggedMessagePtr_GetMessage(tagged), m, size);
-}
-
-static void encode_scalar(upb_encstate* e, const void* _field_mem,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- const char* field_mem = _field_mem;
- int wire_type;
-
-#define CASE(ctype, type, wtype, encodeval) \
- { \
- ctype val = *(ctype*)field_mem; \
- encode_##type(e, encodeval); \
- wire_type = wtype; \
- break; \
- }
-
- switch (f->UPB_PRIVATE(descriptortype)) {
- case kUpb_FieldType_Double:
- CASE(double, double, kUpb_WireType_64Bit, val);
- case kUpb_FieldType_Float:
- CASE(float, float, kUpb_WireType_32Bit, val);
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_UInt64:
- CASE(uint64_t, varint, kUpb_WireType_Varint, val);
- case kUpb_FieldType_UInt32:
- CASE(uint32_t, varint, kUpb_WireType_Varint, val);
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_Enum:
- CASE(int32_t, varint, kUpb_WireType_Varint, (int64_t)val);
- case kUpb_FieldType_SFixed64:
- case kUpb_FieldType_Fixed64:
- CASE(uint64_t, fixed64, kUpb_WireType_64Bit, val);
- case kUpb_FieldType_Fixed32:
- case kUpb_FieldType_SFixed32:
- CASE(uint32_t, fixed32, kUpb_WireType_32Bit, val);
- case kUpb_FieldType_Bool:
- CASE(bool, varint, kUpb_WireType_Varint, val);
- case kUpb_FieldType_SInt32:
- CASE(int32_t, varint, kUpb_WireType_Varint, encode_zz32(val));
- case kUpb_FieldType_SInt64:
- CASE(int64_t, varint, kUpb_WireType_Varint, encode_zz64(val));
- case kUpb_FieldType_String:
- case kUpb_FieldType_Bytes: {
- upb_StringView view = *(upb_StringView*)field_mem;
- encode_bytes(e, view.data, view.size);
- encode_varint(e, view.size);
- wire_type = kUpb_WireType_Delimited;
- break;
- }
- case kUpb_FieldType_Group: {
- size_t size;
- upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (submsg == 0) {
- return;
- }
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- encode_tag(e, f->number, kUpb_WireType_EndGroup);
- encode_TaggedMessagePtr(e, submsg, subm, &size);
- wire_type = kUpb_WireType_StartGroup;
- e->depth++;
- break;
- }
- case kUpb_FieldType_Message: {
- size_t size;
- upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (submsg == 0) {
- return;
- }
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- encode_TaggedMessagePtr(e, submsg, subm, &size);
- encode_varint(e, size);
- wire_type = kUpb_WireType_Delimited;
- e->depth++;
- break;
- }
- default:
- UPB_UNREACHABLE();
- }
-#undef CASE
-
- encode_tag(e, f->number, wire_type);
-}
-
-static void encode_array(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- const upb_Array* arr = *UPB_PTR_AT(msg, f->offset, upb_Array*);
- bool packed = f->mode & kUpb_LabelFlags_IsPacked;
- size_t pre_len = e->limit - e->ptr;
-
- if (arr == NULL || arr->size == 0) {
- return;
- }
-
-#define VARINT_CASE(ctype, encode) \
- { \
- const ctype* start = _upb_array_constptr(arr); \
- const ctype* ptr = start + arr->size; \
- uint32_t tag = packed ? 0 : (f->number << 3) | kUpb_WireType_Varint; \
- do { \
- ptr--; \
- encode_varint(e, encode); \
- if (tag) encode_varint(e, tag); \
- } while (ptr != start); \
- } \
- break;
-
-#define TAG(wire_type) (packed ? 0 : (f->number << 3 | wire_type))
-
- switch (f->UPB_PRIVATE(descriptortype)) {
- case kUpb_FieldType_Double:
- encode_fixedarray(e, arr, sizeof(double), TAG(kUpb_WireType_64Bit));
- break;
- case kUpb_FieldType_Float:
- encode_fixedarray(e, arr, sizeof(float), TAG(kUpb_WireType_32Bit));
- break;
- case kUpb_FieldType_SFixed64:
- case kUpb_FieldType_Fixed64:
- encode_fixedarray(e, arr, sizeof(uint64_t), TAG(kUpb_WireType_64Bit));
- break;
- case kUpb_FieldType_Fixed32:
- case kUpb_FieldType_SFixed32:
- encode_fixedarray(e, arr, sizeof(uint32_t), TAG(kUpb_WireType_32Bit));
- break;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_UInt64:
- VARINT_CASE(uint64_t, *ptr);
- case kUpb_FieldType_UInt32:
- VARINT_CASE(uint32_t, *ptr);
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_Enum:
- VARINT_CASE(int32_t, (int64_t)*ptr);
- case kUpb_FieldType_Bool:
- VARINT_CASE(bool, *ptr);
- case kUpb_FieldType_SInt32:
- VARINT_CASE(int32_t, encode_zz32(*ptr));
- case kUpb_FieldType_SInt64:
- VARINT_CASE(int64_t, encode_zz64(*ptr));
- case kUpb_FieldType_String:
- case kUpb_FieldType_Bytes: {
- const upb_StringView* start = _upb_array_constptr(arr);
- const upb_StringView* ptr = start + arr->size;
- do {
- ptr--;
- encode_bytes(e, ptr->data, ptr->size);
- encode_varint(e, ptr->size);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
- } while (ptr != start);
- return;
- }
- case kUpb_FieldType_Group: {
- const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
- const upb_TaggedMessagePtr* ptr = start + arr->size;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- do {
- size_t size;
- ptr--;
- encode_tag(e, f->number, kUpb_WireType_EndGroup);
- encode_TaggedMessagePtr(e, *ptr, subm, &size);
- encode_tag(e, f->number, kUpb_WireType_StartGroup);
- } while (ptr != start);
- e->depth++;
- return;
- }
- case kUpb_FieldType_Message: {
- const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
- const upb_TaggedMessagePtr* ptr = start + arr->size;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- do {
- size_t size;
- ptr--;
- encode_TaggedMessagePtr(e, *ptr, subm, &size);
- encode_varint(e, size);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
- } while (ptr != start);
- e->depth++;
- return;
- }
- }
-#undef VARINT_CASE
-
- if (packed) {
- encode_varint(e, e->limit - e->ptr - pre_len);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
- }
-}
-
-static void encode_mapentry(upb_encstate* e, uint32_t number,
- const upb_MiniTable* layout,
- const upb_MapEntry* ent) {
- const upb_MiniTableField* key_field = &layout->fields[0];
- const upb_MiniTableField* val_field = &layout->fields[1];
- size_t pre_len = e->limit - e->ptr;
- size_t size;
- encode_scalar(e, &ent->data.v, layout->subs, val_field);
- encode_scalar(e, &ent->data.k, layout->subs, key_field);
- size = (e->limit - e->ptr) - pre_len;
- encode_varint(e, size);
- encode_tag(e, number, kUpb_WireType_Delimited);
-}
-
-static void encode_map(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- const upb_Map* map = *UPB_PTR_AT(msg, f->offset, const upb_Map*);
- const upb_MiniTable* layout = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(layout->field_count == 2);
-
- if (map == NULL) return;
-
- if (e->options & kUpb_EncodeOption_Deterministic) {
- _upb_sortedmap sorted;
- _upb_mapsorter_pushmap(&e->sorter,
- layout->fields[0].UPB_PRIVATE(descriptortype), map,
- &sorted);
- upb_MapEntry ent;
- while (_upb_sortedmap_next(&e->sorter, map, &sorted, &ent)) {
- encode_mapentry(e, f->number, layout, &ent);
- }
- _upb_mapsorter_popmap(&e->sorter, &sorted);
- } else {
- intptr_t iter = UPB_STRTABLE_BEGIN;
- upb_StringView key;
- upb_value val;
- while (upb_strtable_next2(&map->table, &key, &val, &iter)) {
- upb_MapEntry ent;
- _upb_map_fromkey(key, &ent.data.k, map->key_size);
- _upb_map_fromvalue(val, &ent.data.v, map->val_size);
- encode_mapentry(e, f->number, layout, &ent);
- }
- }
-}
-
-static bool encode_shouldencode(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- if (f->presence == 0) {
- /* Proto3 presence or map/array. */
- const void* mem = UPB_PTR_AT(msg, f->offset, void);
- switch (_upb_MiniTableField_GetRep(f)) {
- case kUpb_FieldRep_1Byte: {
- char ch;
- memcpy(&ch, mem, 1);
- return ch != 0;
- }
- case kUpb_FieldRep_4Byte: {
- uint32_t u32;
- memcpy(&u32, mem, 4);
- return u32 != 0;
- }
- case kUpb_FieldRep_8Byte: {
- uint64_t u64;
- memcpy(&u64, mem, 8);
- return u64 != 0;
- }
- case kUpb_FieldRep_StringView: {
- const upb_StringView* str = (const upb_StringView*)mem;
- return str->size != 0;
- }
- default:
- UPB_UNREACHABLE();
- }
- } else if (f->presence > 0) {
- /* Proto2 presence: hasbit. */
- return _upb_hasbit_field(msg, f);
- } else {
- /* Field is in a oneof. */
- return _upb_getoneofcase_field(msg, f) == f->number;
- }
-}
-
-static void encode_field(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field) {
- switch (upb_FieldMode_Get(field)) {
- case kUpb_FieldMode_Array:
- encode_array(e, msg, subs, field);
- break;
- case kUpb_FieldMode_Map:
- encode_map(e, msg, subs, field);
- break;
- case kUpb_FieldMode_Scalar:
- encode_scalar(e, UPB_PTR_AT(msg, field->offset, void), subs, field);
- break;
- default:
- UPB_UNREACHABLE();
- }
-}
-
-static void encode_msgset_item(upb_encstate* e,
- const upb_Message_Extension* ext) {
- size_t size;
- encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_EndGroup);
- encode_message(e, ext->data.ptr, ext->ext->sub.submsg, &size);
- encode_varint(e, size);
- encode_tag(e, kUpb_MsgSet_Message, kUpb_WireType_Delimited);
- encode_varint(e, ext->ext->field.number);
- encode_tag(e, kUpb_MsgSet_TypeId, kUpb_WireType_Varint);
- encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_StartGroup);
-}
-
-static void encode_ext(upb_encstate* e, const upb_Message_Extension* ext,
- bool is_message_set) {
- if (UPB_UNLIKELY(is_message_set)) {
- encode_msgset_item(e, ext);
- } else {
- encode_field(e, &ext->data, &ext->ext->sub, &ext->ext->field);
- }
-}
-
-static void encode_message(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTable* m, size_t* size) {
- size_t pre_len = e->limit - e->ptr;
-
- if ((e->options & kUpb_EncodeOption_CheckRequired) && m->required_count) {
- uint64_t msg_head;
- memcpy(&msg_head, msg, 8);
- msg_head = _upb_BigEndian_Swap64(msg_head);
- if (upb_MiniTable_requiredmask(m) & ~msg_head) {
- encode_err(e, kUpb_EncodeStatus_MissingRequired);
- }
- }
-
- if ((e->options & kUpb_EncodeOption_SkipUnknown) == 0) {
- size_t unknown_size;
- const char* unknown = upb_Message_GetUnknown(msg, &unknown_size);
-
- if (unknown) {
- encode_bytes(e, unknown, unknown_size);
- }
- }
-
- if (m->ext != kUpb_ExtMode_NonExtendable) {
- /* Encode all extensions together. Unlike C++, we do not attempt to keep
- * these in field number order relative to normal fields or even to each
- * other. */
- size_t ext_count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &ext_count);
- if (ext_count) {
- if (e->options & kUpb_EncodeOption_Deterministic) {
- _upb_sortedmap sorted;
- _upb_mapsorter_pushexts(&e->sorter, ext, ext_count, &sorted);
- while (_upb_sortedmap_nextext(&e->sorter, &sorted, &ext)) {
- encode_ext(e, ext, m->ext == kUpb_ExtMode_IsMessageSet);
- }
- _upb_mapsorter_popmap(&e->sorter, &sorted);
- } else {
- const upb_Message_Extension* end = ext + ext_count;
- for (; ext != end; ext++) {
- encode_ext(e, ext, m->ext == kUpb_ExtMode_IsMessageSet);
- }
- }
- }
- }
-
- if (m->field_count) {
- const upb_MiniTableField* f = &m->fields[m->field_count];
- const upb_MiniTableField* first = &m->fields[0];
- while (f != first) {
- f--;
- if (encode_shouldencode(e, msg, m->subs, f)) {
- encode_field(e, msg, m->subs, f);
- }
- }
- }
-
- *size = (e->limit - e->ptr) - pre_len;
-}
-
-static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
- const void* const msg,
- const upb_MiniTable* const l,
- char** const buf,
- size_t* const size) {
- // Unfortunately we must continue to perform hackery here because there are
- // code paths which blindly copy the returned pointer without bothering to
- // check for errors until much later (b/235839510). So we still set *buf to
- // NULL on error and we still set it to non-NULL on a successful empty result.
- if (UPB_SETJMP(encoder->err) == 0) {
- encode_message(encoder, msg, l, size);
- *size = encoder->limit - encoder->ptr;
- if (*size == 0) {
- static char ch;
- *buf = &ch;
- } else {
- UPB_ASSERT(encoder->ptr);
- *buf = encoder->ptr;
- }
- } else {
- UPB_ASSERT(encoder->status != kUpb_EncodeStatus_Ok);
- *buf = NULL;
- *size = 0;
- }
-
- _upb_mapsorter_destroy(&encoder->sorter);
- return encoder->status;
-}
-
-upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
- int options, upb_Arena* arena, char** buf,
- size_t* size) {
- upb_encstate e;
- unsigned depth = (unsigned)options >> 16;
-
- e.status = kUpb_EncodeStatus_Ok;
- e.arena = arena;
- e.buf = NULL;
- e.limit = NULL;
- e.ptr = NULL;
- e.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
- e.options = options;
- _upb_mapsorter_init(&e.sorter);
-
- return upb_Encoder_Encode(&e, msg, l, buf, size);
-}
-
-
-
-// Must be last.
-
-UPB_NOINLINE _upb_WireReader_ReadLongVarintRet
-_upb_WireReader_ReadLongVarint(const char* ptr, uint64_t val) {
- _upb_WireReader_ReadLongVarintRet ret = {NULL, 0};
- uint64_t byte;
- int i;
- for (i = 1; i < 10; i++) {
- byte = (uint8_t)ptr[i];
- val += (byte - 1) << (i * 7);
- if (!(byte & 0x80)) {
- ret.ptr = ptr + i + 1;
- ret.val = val;
- return ret;
- }
- }
- return ret;
-}
-
-const char* _upb_WireReader_SkipGroup(const char* ptr, uint32_t tag,
- int depth_limit,
- upb_EpsCopyInputStream* stream) {
- if (--depth_limit == 0) return NULL;
- uint32_t end_group_tag = (tag & ~7ULL) | kUpb_WireType_EndGroup;
- while (!upb_EpsCopyInputStream_IsDone(stream, &ptr)) {
- uint32_t tag;
- ptr = upb_WireReader_ReadTag(ptr, &tag);
- if (!ptr) return NULL;
- if (tag == end_group_tag) return ptr;
- ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, stream);
- if (!ptr) return NULL;
- }
- return ptr;
-}
-
// This should #undef all macros #defined in def.inc
#undef UPB_SIZE
@@ -15457,6 +15944,7 @@
#undef UPB_ALIGN_DOWN
#undef UPB_ALIGN_MALLOC
#undef UPB_ALIGN_OF
+#undef UPB_ALIGN_AS
#undef UPB_MALLOC_ALIGN
#undef UPB_LIKELY
#undef UPB_UNLIKELY
@@ -15493,3 +15981,4 @@
#undef UPB_ATOMIC
#undef UPB_USE_C11_ATOMICS
#undef UPB_PRIVATE
+#undef UPB_ONLYBITS
diff --git a/php/ext/google/protobuf/php-upb.h b/php/ext/google/protobuf/php-upb.h
index 88b8b22..27814ae 100644
--- a/php/ext/google/protobuf/php-upb.h
+++ b/php/ext/google/protobuf/php-upb.h
@@ -94,6 +94,13 @@
#define UPB_ALIGN_OF(type) offsetof (struct { char c; type member; }, member)
#endif
+#ifdef _MSC_VER
+// Some versions of our Windows compiler don't support the C11 syntax.
+#define UPB_ALIGN_AS(x) __declspec(align(x))
+#else
+#define UPB_ALIGN_AS(x) _Alignas(x)
+#endif
+
// Hints to the compiler about likely/unlikely branches.
#if defined (__GNUC__) || defined(__clang__)
#define UPB_LIKELY(x) __builtin_expect((bool)(x), 1)
@@ -180,6 +187,12 @@
#define UPB_PRIVATE(x) x##_dont_copy_me__upb_internal_use_only
+#ifdef UPB_ALLOW_PRIVATE_ACCESS__FOR_BITS_ONLY
+#define UPB_ONLYBITS(x) x
+#else
+#define UPB_ONLYBITS(x) UPB_PRIVATE(x)
+#endif
+
/* Configure whether fasttable is switched on or not. *************************/
#ifdef __has_attribute
@@ -370,9 +383,34 @@
// IWYU pragma: begin_exports
+#ifndef UPB_BASE_UPCAST_H_
+#define UPB_BASE_UPCAST_H_
+
+// Must be last.
+
+// This macro provides a way to upcast message pointers in a way that is
+// somewhat more bulletproof than blindly casting a pointer. Example:
+//
+// typedef struct {
+// upb_Message UPB_PRIVATE(base);
+// } pkg_FooMessage;
+//
+// void f(pkg_FooMessage* msg) {
+// upb_Decode(UPB_UPCAST(msg), ...);
+// }
+
+#define UPB_UPCAST(x) (&(x)->base##_dont_copy_me__upb_internal_use_only)
+
+
+#endif /* UPB_BASE_UPCAST_H_ */
+
#ifndef UPB_MESSAGE_ACCESSORS_H_
#define UPB_MESSAGE_ACCESSORS_H_
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
#ifndef UPB_BASE_DESCRIPTOR_CONSTANTS_H_
#define UPB_BASE_DESCRIPTOR_CONSTANTS_H_
@@ -432,7 +470,34 @@
extern "C" {
#endif
-UPB_INLINE bool upb_FieldType_IsPackable(upb_FieldType type) {
+// Convert from upb_FieldType to upb_CType
+UPB_INLINE upb_CType upb_FieldType_CType(upb_FieldType field_type) {
+ static const upb_CType c_type[] = {
+ kUpb_CType_Double, // kUpb_FieldType_Double
+ kUpb_CType_Float, // kUpb_FieldType_Float
+ kUpb_CType_Int64, // kUpb_FieldType_Int64
+ kUpb_CType_UInt64, // kUpb_FieldType_UInt64
+ kUpb_CType_Int32, // kUpb_FieldType_Int32
+ kUpb_CType_UInt64, // kUpb_FieldType_Fixed64
+ kUpb_CType_UInt32, // kUpb_FieldType_Fixed32
+ kUpb_CType_Bool, // kUpb_FieldType_Bool
+ kUpb_CType_String, // kUpb_FieldType_String
+ kUpb_CType_Message, // kUpb_FieldType_Group
+ kUpb_CType_Message, // kUpb_FieldType_Message
+ kUpb_CType_Bytes, // kUpb_FieldType_Bytes
+ kUpb_CType_UInt32, // kUpb_FieldType_UInt32
+ kUpb_CType_Enum, // kUpb_FieldType_Enum
+ kUpb_CType_Int32, // kUpb_FieldType_SFixed32
+ kUpb_CType_Int64, // kUpb_FieldType_SFixed64
+ kUpb_CType_Int32, // kUpb_FieldType_SInt32
+ kUpb_CType_Int64, // kUpb_FieldType_SInt64
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return c_type[field_type - 1];
+}
+
+UPB_INLINE bool upb_FieldType_IsPackable(upb_FieldType field_type) {
// clang-format off
const unsigned kUnpackableTypes =
(1 << kUpb_FieldType_String) |
@@ -440,7 +505,7 @@
(1 << kUpb_FieldType_Message) |
(1 << kUpb_FieldType_Group);
// clang-format on
- return (1 << type) & ~kUnpackableTypes;
+ return (1 << field_type) & ~kUnpackableTypes;
}
#ifdef __cplusplus
@@ -449,12 +514,57 @@
#endif /* UPB_BASE_DESCRIPTOR_CONSTANTS_H_ */
+#ifndef UPB_BASE_STRING_VIEW_H_
+#define UPB_BASE_STRING_VIEW_H_
-#ifndef UPB_MESSAGE_ARRAY_H_
-#define UPB_MESSAGE_ARRAY_H_
+#include <string.h>
-#include <stddef.h>
+// Must be last.
+#define UPB_STRINGVIEW_INIT(ptr, len) \
+ { ptr, len }
+
+#define UPB_STRINGVIEW_FORMAT "%.*s"
+#define UPB_STRINGVIEW_ARGS(view) (int)(view).size, (view).data
+
+// LINT.IfChange(struct_definition)
+typedef struct {
+ const char* data;
+ size_t size;
+} upb_StringView;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE upb_StringView upb_StringView_FromDataAndSize(const char* data,
+ size_t size) {
+ upb_StringView ret;
+ ret.data = data;
+ ret.size = size;
+ return ret;
+}
+
+UPB_INLINE upb_StringView upb_StringView_FromString(const char* data) {
+ return upb_StringView_FromDataAndSize(data, strlen(data));
+}
+
+UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b) {
+ return (a.size == b.size) && (!a.size || !memcmp(a.data, b.data, a.size));
+}
+
+// LINT.ThenChange(
+// GoogleInternalName0,
+// //depot/google3/third_party/upb/bits/golang/accessor.go:map_go_string,
+// //depot/google3/third_party/upb/bits/typescript/string_view.ts
+// )
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_BASE_STRING_VIEW_H_ */
/* upb_Arena is a specific allocator implementation that uses arena allocation.
* The user provides an allocator that will be used to allocate the underlying
@@ -473,7 +583,6 @@
#include <stddef.h>
#include <stdint.h>
-#include <string.h>
#ifndef UPB_MEM_ALLOC_H_
@@ -546,14 +655,114 @@
#endif /* UPB_MEM_ALLOC_H_ */
+#ifndef UPB_MEM_INTERNAL_ARENA_H_
+#define UPB_MEM_INTERNAL_ARENA_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+// Must be last.
+
+// This is QUITE an ugly hack, which specifies the number of pointers needed
+// to equal (or exceed) the storage required for one upb_Arena.
+//
+// We need this because the decoder inlines a upb_Arena for performance but
+// the full struct is not visible outside of arena.c. Yes, I know, it's awful.
+#define UPB_ARENA_SIZE_HACK 7
+
+// LINT.IfChange(upb_Arena)
+
+struct upb_Arena {
+ char* UPB_ONLYBITS(ptr);
+ char* UPB_ONLYBITS(end);
+};
+
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/arena.ts:upb_Arena)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void UPB_PRIVATE(_upb_Arena_SwapIn)(struct upb_Arena* des,
+ const struct upb_Arena* src);
+void UPB_PRIVATE(_upb_Arena_SwapOut)(struct upb_Arena* des,
+ const struct upb_Arena* src);
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_ArenaHas)(const struct upb_Arena* a) {
+ return (size_t)(a->UPB_ONLYBITS(end) - a->UPB_ONLYBITS(ptr));
+}
+
+UPB_INLINE void* UPB_PRIVATE(_upb_Arena_Malloc)(struct upb_Arena* a,
+ size_t size) {
+ void* UPB_PRIVATE(_upb_Arena_SlowMalloc)(struct upb_Arena * a, size_t size);
+
+ size = UPB_ALIGN_MALLOC(size);
+ const size_t span = size + UPB_ASAN_GUARD_SIZE;
+ if (UPB_UNLIKELY(UPB_PRIVATE(_upb_ArenaHas)(a) < span)) {
+ return UPB_PRIVATE(_upb_Arena_SlowMalloc)(a, span);
+ }
+
+ // We have enough space to do a fast malloc.
+ void* ret = a->UPB_ONLYBITS(ptr);
+ UPB_ASSERT(UPB_ALIGN_MALLOC((uintptr_t)ret) == (uintptr_t)ret);
+ UPB_ASSERT(UPB_ALIGN_MALLOC(size) == size);
+ UPB_UNPOISON_MEMORY_REGION(ret, size);
+
+ a->UPB_ONLYBITS(ptr) += span;
+
+ return ret;
+}
+
+UPB_INLINE void* UPB_PRIVATE(_upb_Arena_Realloc)(struct upb_Arena* a, void* ptr,
+ size_t oldsize, size_t size) {
+ oldsize = UPB_ALIGN_MALLOC(oldsize);
+ size = UPB_ALIGN_MALLOC(size);
+ bool is_most_recent_alloc =
+ (uintptr_t)ptr + oldsize == (uintptr_t)a->UPB_ONLYBITS(ptr);
+
+ if (is_most_recent_alloc) {
+ ptrdiff_t diff = size - oldsize;
+ if ((ptrdiff_t)UPB_PRIVATE(_upb_ArenaHas)(a) >= diff) {
+ a->UPB_ONLYBITS(ptr) += diff;
+ return ptr;
+ }
+ } else if (size <= oldsize) {
+ return ptr;
+ }
+
+ void* ret = UPB_PRIVATE(_upb_Arena_Malloc)(a, size);
+
+ if (ret && oldsize > 0) {
+ memcpy(ret, ptr, UPB_MIN(oldsize, size));
+ }
+
+ return ret;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Arena_ShrinkLast)(struct upb_Arena* a,
+ void* ptr, size_t oldsize,
+ size_t size) {
+ oldsize = UPB_ALIGN_MALLOC(oldsize);
+ size = UPB_ALIGN_MALLOC(size);
+ // Must be the last alloc.
+ UPB_ASSERT((char*)ptr + oldsize ==
+ a->UPB_ONLYBITS(ptr) - UPB_ASAN_GUARD_SIZE);
+ UPB_ASSERT(size <= oldsize);
+ a->UPB_ONLYBITS(ptr) = (char*)ptr + size;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MEM_INTERNAL_ARENA_H_ */
+
// Must be last.
typedef struct upb_Arena upb_Arena;
-typedef struct {
- char *ptr, *end;
-} _upb_ArenaHead;
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -566,35 +775,23 @@
UPB_API void upb_Arena_Free(upb_Arena* a);
UPB_API bool upb_Arena_Fuse(upb_Arena* a, upb_Arena* b);
-bool upb_Arena_IncRefFor(upb_Arena* arena, const void* owner);
-void upb_Arena_DecRefFor(upb_Arena* arena, const void* owner);
+bool upb_Arena_IncRefFor(upb_Arena* a, const void* owner);
+void upb_Arena_DecRefFor(upb_Arena* a, const void* owner);
-void* _upb_Arena_SlowMalloc(upb_Arena* a, size_t size);
-size_t upb_Arena_SpaceAllocated(upb_Arena* arena);
-uint32_t upb_Arena_DebugRefCount(upb_Arena* arena);
+size_t upb_Arena_SpaceAllocated(upb_Arena* a);
+uint32_t upb_Arena_DebugRefCount(upb_Arena* a);
-UPB_INLINE size_t _upb_ArenaHas(upb_Arena* a) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- return (size_t)(h->end - h->ptr);
+UPB_API_INLINE upb_Arena* upb_Arena_New(void) {
+ return upb_Arena_Init(NULL, 0, &upb_alloc_global);
}
-UPB_API_INLINE void* upb_Arena_Malloc(upb_Arena* a, size_t size) {
- size = UPB_ALIGN_MALLOC(size);
- size_t span = size + UPB_ASAN_GUARD_SIZE;
- if (UPB_UNLIKELY(_upb_ArenaHas(a) < span)) {
- return _upb_Arena_SlowMalloc(a, size);
- }
+UPB_API_INLINE void* upb_Arena_Malloc(struct upb_Arena* a, size_t size) {
+ return UPB_PRIVATE(_upb_Arena_Malloc)(a, size);
+}
- // We have enough space to do a fast malloc.
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- void* ret = h->ptr;
- UPB_ASSERT(UPB_ALIGN_MALLOC((uintptr_t)ret) == (uintptr_t)ret);
- UPB_ASSERT(UPB_ALIGN_MALLOC(size) == size);
- UPB_UNPOISON_MEMORY_REGION(ret, size);
-
- h->ptr += span;
-
- return ret;
+UPB_API_INLINE void* upb_Arena_Realloc(upb_Arena* a, void* ptr, size_t oldsize,
+ size_t size) {
+ return UPB_PRIVATE(_upb_Arena_Realloc)(a, ptr, oldsize, size);
}
// Shrinks the last alloc from arena.
@@ -603,43 +800,7 @@
// this was not the last alloc.
UPB_API_INLINE void upb_Arena_ShrinkLast(upb_Arena* a, void* ptr,
size_t oldsize, size_t size) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- oldsize = UPB_ALIGN_MALLOC(oldsize);
- size = UPB_ALIGN_MALLOC(size);
- // Must be the last alloc.
- UPB_ASSERT((char*)ptr + oldsize == h->ptr - UPB_ASAN_GUARD_SIZE);
- UPB_ASSERT(size <= oldsize);
- h->ptr = (char*)ptr + size;
-}
-
-UPB_API_INLINE void* upb_Arena_Realloc(upb_Arena* a, void* ptr, size_t oldsize,
- size_t size) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- oldsize = UPB_ALIGN_MALLOC(oldsize);
- size = UPB_ALIGN_MALLOC(size);
- bool is_most_recent_alloc = (uintptr_t)ptr + oldsize == (uintptr_t)h->ptr;
-
- if (is_most_recent_alloc) {
- ptrdiff_t diff = size - oldsize;
- if ((ptrdiff_t)_upb_ArenaHas(a) >= diff) {
- h->ptr += diff;
- return ptr;
- }
- } else if (size <= oldsize) {
- return ptr;
- }
-
- void* ret = upb_Arena_Malloc(a, size);
-
- if (ret && oldsize > 0) {
- memcpy(ret, ptr, UPB_MIN(oldsize, size));
- }
-
- return ret;
-}
-
-UPB_API_INLINE upb_Arena* upb_Arena_New(void) {
- return upb_Arena_Init(NULL, 0, &upb_alloc_global);
+ UPB_PRIVATE(_upb_Arena_ShrinkLast)(a, ptr, oldsize, size);
}
#ifdef __cplusplus
@@ -649,6 +810,12 @@
#endif /* UPB_MEM_ARENA_H_ */
+#ifndef UPB_MESSAGE_ARRAY_H_
+#define UPB_MESSAGE_ARRAY_H_
+
+#include <stddef.h>
+
+
// Users should include array.h or map.h instead.
// IWYU pragma: private, include "upb/message/array.h"
@@ -657,768 +824,133 @@
#include <stdint.h>
-#ifndef UPB_BASE_STRING_VIEW_H_
-#define UPB_BASE_STRING_VIEW_H_
+
+#ifndef UPB_MESSAGE_INTERNAL_ARRAY_H_
+#define UPB_MESSAGE_INTERNAL_ARRAY_H_
#include <string.h>
+
// Must be last.
-#define UPB_STRINGVIEW_INIT(ptr, len) \
- { ptr, len }
+#define _UPB_ARRAY_MASK_IMM 0x4 // Frozen/immutable bit.
+#define _UPB_ARRAY_MASK_LG2 0x3 // Encoded elem size.
+#define _UPB_ARRAY_MASK_ALL (_UPB_ARRAY_MASK_IMM | _UPB_ARRAY_MASK_LG2)
-#define UPB_STRINGVIEW_FORMAT "%.*s"
-#define UPB_STRINGVIEW_ARGS(view) (int)(view).size, (view).data
+#ifdef __cplusplus
+extern "C" {
+#endif
// LINT.IfChange(struct_definition)
-typedef struct {
- const char* data;
- size_t size;
-} upb_StringView;
-// LINT.ThenChange(
-// GoogleInternalName0,
-// //depot/google3/third_party/upb/bits/golang/accessor.go:map_go_string
-// )
+// Our internal representation for repeated fields.
+struct upb_Array {
+ // This is a tagged pointer. Bits #0 and #1 encode the elem size as follows:
+ // 0 maps to elem size 1
+ // 1 maps to elem size 4
+ // 2 maps to elem size 8
+ // 3 maps to elem size 16
+ //
+ // Bit #2 contains the frozen/immutable flag (currently unimplemented).
+ uintptr_t data;
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_API_INLINE upb_StringView upb_StringView_FromDataAndSize(const char* data,
- size_t size) {
- upb_StringView ret;
- ret.data = data;
- ret.size = size;
- return ret;
-}
-
-UPB_INLINE upb_StringView upb_StringView_FromString(const char* data) {
- return upb_StringView_FromDataAndSize(data, strlen(data));
-}
-
-UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b) {
- return a.size == b.size && memcmp(a.data, b.data, a.size) == 0;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_BASE_STRING_VIEW_H_ */
-
-#ifndef UPB_MINI_TABLE_TYPES_H_
-#define UPB_MINI_TABLE_TYPES_H_
-
-#include <stdint.h>
-
-
-#ifndef UPB_MESSAGE_TYPES_H_
-#define UPB_MESSAGE_TYPES_H_
-
-// This typedef is in a leaf header to resolve a circular dependency between
-// messages and mini tables.
-typedef void upb_Message;
-
-#endif /* UPB_MESSAGE_TYPES_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// When a upb_Message* is stored in a message, array, or map, it is stored in a
-// tagged form. If the tag bit is set, the referenced upb_Message is of type
-// _kUpb_MiniTable_Empty (a sentinel message type with no fields) instead of
-// that field's true message type. This forms the basis of what we call
-// "dynamic tree shaking."
-//
-// See the documentation for kUpb_DecodeOption_ExperimentalAllowUnlinked for
-// more information.
-typedef uintptr_t upb_TaggedMessagePtr;
-
-// Internal-only because empty messages cannot be created by the user.
-UPB_INLINE upb_TaggedMessagePtr _upb_TaggedMessagePtr_Pack(upb_Message* ptr,
- bool empty) {
- UPB_ASSERT(((uintptr_t)ptr & 1) == 0);
- return (uintptr_t)ptr | (empty ? 1 : 0);
-}
-
-// Users who enable unlinked sub-messages must use this to test whether a
-// message is empty before accessing it. If a message is empty, it must be
-// first promoted using the interfaces in message/promote.h.
-UPB_INLINE bool upb_TaggedMessagePtr_IsEmpty(upb_TaggedMessagePtr ptr) {
- return ptr & 1;
-}
-
-UPB_INLINE upb_Message* _upb_TaggedMessagePtr_GetMessage(
- upb_TaggedMessagePtr ptr) {
- return (upb_Message*)(ptr & ~(uintptr_t)1);
-}
-
-UPB_INLINE upb_Message* upb_TaggedMessagePtr_GetNonEmptyMessage(
- upb_TaggedMessagePtr ptr) {
- UPB_ASSERT(!upb_TaggedMessagePtr_IsEmpty(ptr));
- return _upb_TaggedMessagePtr_GetMessage(ptr);
-}
-
-UPB_INLINE upb_Message* _upb_TaggedMessagePtr_GetEmptyMessage(
- upb_TaggedMessagePtr ptr) {
- UPB_ASSERT(upb_TaggedMessagePtr_IsEmpty(ptr));
- return _upb_TaggedMessagePtr_GetMessage(ptr);
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_TYPES_H_ */
-
-typedef union {
- bool bool_val;
- float float_val;
- double double_val;
- int32_t int32_val;
- int64_t int64_val;
- uint32_t uint32_val;
- uint64_t uint64_val;
- const struct upb_Array* array_val;
- const struct upb_Map* map_val;
- const upb_Message* msg_val;
- upb_StringView str_val;
-
- // EXPERIMENTAL: A tagged upb_Message*. Users must use this instead of
- // msg_val if unlinked sub-messages may possibly be in use. See the
- // documentation in kUpb_DecodeOption_ExperimentalAllowUnlinked for more
- // information.
- upb_TaggedMessagePtr tagged_msg_val;
-} upb_MessageValue;
-
-typedef union {
- struct upb_Array* array;
- struct upb_Map* map;
- upb_Message* msg;
-} upb_MutableMessageValue;
-
-#endif /* UPB_MESSAGE_VALUE_H_ */
-
-// Must be last.
-
-typedef struct upb_Array upb_Array;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Creates a new array on the given arena that holds elements of this type.
-UPB_API upb_Array* upb_Array_New(upb_Arena* a, upb_CType type);
-
-// Returns the number of elements in the array.
-UPB_API size_t upb_Array_Size(const upb_Array* arr);
-
-// Returns the given element, which must be within the array's current size.
-UPB_API upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i);
-
-// Sets the given element, which must be within the array's current size.
-UPB_API void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val);
-
-// Appends an element to the array. Returns false on allocation failure.
-UPB_API bool upb_Array_Append(upb_Array* array, upb_MessageValue val,
- upb_Arena* arena);
-
-// Moves elements within the array using memmove().
-// Like memmove(), the source and destination elements may be overlapping.
-UPB_API void upb_Array_Move(upb_Array* array, size_t dst_idx, size_t src_idx,
- size_t count);
-
-// Inserts one or more empty elements into the array.
-// Existing elements are shifted right.
-// The new elements have undefined state and must be set with `upb_Array_Set()`.
-// REQUIRES: `i <= upb_Array_Size(arr)`
-UPB_API bool upb_Array_Insert(upb_Array* array, size_t i, size_t count,
- upb_Arena* arena);
-
-// Deletes one or more elements from the array.
-// Existing elements are shifted left.
-// REQUIRES: `i + count <= upb_Array_Size(arr)`
-UPB_API void upb_Array_Delete(upb_Array* array, size_t i, size_t count);
-
-// Changes the size of a vector. New elements are initialized to NULL/0.
-// Returns false on allocation failure.
-UPB_API bool upb_Array_Resize(upb_Array* array, size_t size, upb_Arena* arena);
-
-// Returns pointer to array data.
-UPB_API const void* upb_Array_DataPtr(const upb_Array* arr);
-
-// Returns mutable pointer to array data.
-UPB_API void* upb_Array_MutableDataPtr(upb_Array* arr);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MESSAGE_ARRAY_H_ */
-
-#ifndef UPB_MESSAGE_INTERNAL_ACCESSORS_H_
-#define UPB_MESSAGE_INTERNAL_ACCESSORS_H_
-
-
-#ifndef UPB_MESSAGE_INTERNAL_EXTENSION_H_
-#define UPB_MESSAGE_INTERNAL_EXTENSION_H_
-
-
-// Public APIs for message operations that do not depend on the schema.
-//
-// MiniTable-based accessors live in accessors.h.
-
-#ifndef UPB_MESSAGE_MESSAGE_H_
-#define UPB_MESSAGE_MESSAGE_H_
-
-#include <stddef.h>
-
-
-#ifndef UPB_MINI_TABLE_MESSAGE_H_
-#define UPB_MINI_TABLE_MESSAGE_H_
-
-
-#ifndef UPB_MINI_TABLE_ENUM_H_
-#define UPB_MINI_TABLE_ENUM_H_
-
-
-#ifndef UPB_MINI_TABLE_INTERNAL_ENUM_H_
-#define UPB_MINI_TABLE_INTERNAL_ENUM_H_
-
-#include <stdint.h>
-
-// Must be last.
-
-struct upb_MiniTableEnum {
- uint32_t mask_limit; // Limit enum value that can be tested with mask.
- uint32_t value_count; // Number of values after the bitfield.
- uint32_t data[]; // Bitmask + enumerated values follow.
+ size_t UPB_ONLYBITS(size); // The number of elements in the array.
+ size_t UPB_PRIVATE(capacity); // Allocated storage. Measured in elements.
};
-typedef enum {
- _kUpb_FastEnumCheck_ValueIsInEnum = 0,
- _kUpb_FastEnumCheck_ValueIsNotInEnum = 1,
- _kUpb_FastEnumCheck_CannotCheckFast = 2,
-} _kUpb_FastEnumCheck_Status;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE _kUpb_FastEnumCheck_Status _upb_MiniTable_CheckEnumValueFast(
- const struct upb_MiniTableEnum* e, uint32_t val) {
- if (UPB_UNLIKELY(val >= 64)) return _kUpb_FastEnumCheck_CannotCheckFast;
- uint64_t mask = e->data[0] | ((uint64_t)e->data[1] << 32);
- return (mask & (1ULL << val)) ? _kUpb_FastEnumCheck_ValueIsInEnum
- : _kUpb_FastEnumCheck_ValueIsNotInEnum;
+UPB_INLINE void UPB_PRIVATE(_upb_Array_SetTaggedPtr)(struct upb_Array* array,
+ void* data, size_t lg2) {
+ UPB_ASSERT(lg2 != 1);
+ UPB_ASSERT(lg2 <= 4);
+ const size_t bits = lg2 - (lg2 != 0);
+ array->data = (uintptr_t)data | bits;
}
-UPB_INLINE bool _upb_MiniTable_CheckEnumValueSlow(
- const struct upb_MiniTableEnum* e, uint32_t val) {
- if (val < e->mask_limit) return e->data[val / 32] & (1ULL << (val % 32));
- // OPT: binary search long lists?
- const uint32_t* start = &e->data[e->mask_limit / 32];
- const uint32_t* limit = &e->data[(e->mask_limit / 32) + e->value_count];
- for (const uint32_t* p = start; p < limit; p++) {
- if (*p == val) return true;
- }
- return false;
+UPB_INLINE size_t
+UPB_PRIVATE(_upb_Array_ElemSizeLg2)(const struct upb_Array* array) {
+ const size_t bits = array->data & _UPB_ARRAY_MASK_LG2;
+ const size_t lg2 = bits + (bits != 0);
+ return lg2;
}
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_ENUM_H_ */
-
-// Must be last
-
-typedef struct upb_MiniTableEnum upb_MiniTableEnum;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Validates enum value against range defined by enum mini table.
-UPB_INLINE bool upb_MiniTableEnum_CheckValue(const struct upb_MiniTableEnum* e,
- uint32_t val) {
- _kUpb_FastEnumCheck_Status status = _upb_MiniTable_CheckEnumValueFast(e, val);
- if (UPB_UNLIKELY(status == _kUpb_FastEnumCheck_CannotCheckFast)) {
- return _upb_MiniTable_CheckEnumValueSlow(e, val);
- }
- return status == _kUpb_FastEnumCheck_ValueIsInEnum ? true : false;
+UPB_INLINE const void* _upb_array_constptr(const struct upb_Array* array) {
+ UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array); // Check assertions.
+ return (void*)(array->data & ~(uintptr_t)_UPB_ARRAY_MASK_ALL);
}
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_ENUM_H_ */
-
-#ifndef UPB_MINI_TABLE_FIELD_H_
-#define UPB_MINI_TABLE_FIELD_H_
-
-
-#ifndef UPB_MINI_TABLE_INTERNAL_FIELD_H_
-#define UPB_MINI_TABLE_INTERNAL_FIELD_H_
-
-#include <stdint.h>
-
-
-// Must be last.
-
-struct upb_MiniTableField {
- uint32_t number;
- uint16_t offset;
- int16_t presence; // If >0, hasbit_index. If <0, ~oneof_index
-
- // Indexes into `upb_MiniTable.subs`
- // Will be set to `kUpb_NoSub` if `descriptortype` != MESSAGE/GROUP/ENUM
- uint16_t UPB_PRIVATE(submsg_index);
-
- uint8_t UPB_PRIVATE(descriptortype);
-
- // upb_FieldMode | upb_LabelFlags | (upb_FieldRep << kUpb_FieldRep_Shift)
- uint8_t mode;
-};
-
-#define kUpb_NoSub ((uint16_t)-1)
-
-typedef enum {
- kUpb_FieldMode_Map = 0,
- kUpb_FieldMode_Array = 1,
- kUpb_FieldMode_Scalar = 2,
-} upb_FieldMode;
-
-// Mask to isolate the upb_FieldMode from field.mode.
-#define kUpb_FieldMode_Mask 3
-
-// Extra flags on the mode field.
-typedef enum {
- kUpb_LabelFlags_IsPacked = 4,
- kUpb_LabelFlags_IsExtension = 8,
- // Indicates that this descriptor type is an "alternate type":
- // - for Int32, this indicates that the actual type is Enum (but was
- // rewritten to Int32 because it is an open enum that requires no check).
- // - for Bytes, this indicates that the actual type is String (but does
- // not require any UTF-8 check).
- kUpb_LabelFlags_IsAlternate = 16,
-} upb_LabelFlags;
-
-// Note: we sort by this number when calculating layout order.
-typedef enum {
- kUpb_FieldRep_1Byte = 0,
- kUpb_FieldRep_4Byte = 1,
- kUpb_FieldRep_StringView = 2,
- kUpb_FieldRep_8Byte = 3,
-
- kUpb_FieldRep_NativePointer =
- UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte),
- kUpb_FieldRep_Max = kUpb_FieldRep_8Byte,
-} upb_FieldRep;
-
-#define kUpb_FieldRep_Shift 6
-
-UPB_INLINE upb_FieldRep
-_upb_MiniTableField_GetRep(const struct upb_MiniTableField* field) {
- return (upb_FieldRep)(field->mode >> kUpb_FieldRep_Shift);
+UPB_INLINE void* _upb_array_ptr(struct upb_Array* array) {
+ return (void*)_upb_array_constptr(array);
}
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE upb_FieldMode
-upb_FieldMode_Get(const struct upb_MiniTableField* field) {
- return (upb_FieldMode)(field->mode & 3);
+UPB_INLINE struct upb_Array* UPB_PRIVATE(_upb_Array_New)(upb_Arena* arena,
+ size_t init_capacity,
+ int elem_size_lg2) {
+ UPB_ASSERT(elem_size_lg2 != 1);
+ UPB_ASSERT(elem_size_lg2 <= 4);
+ const size_t array_size =
+ UPB_ALIGN_UP(sizeof(struct upb_Array), UPB_MALLOC_ALIGN);
+ const size_t bytes = array_size + (init_capacity << elem_size_lg2);
+ struct upb_Array* array = (struct upb_Array*)upb_Arena_Malloc(arena, bytes);
+ if (!array) return NULL;
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)
+ (array, UPB_PTR_AT(array, array_size, void), elem_size_lg2);
+ array->UPB_ONLYBITS(size) = 0;
+ array->UPB_PRIVATE(capacity) = init_capacity;
+ return array;
}
-UPB_INLINE void _upb_MiniTableField_CheckIsArray(
- const struct upb_MiniTableField* field) {
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_NativePointer);
- UPB_ASSUME(upb_FieldMode_Get(field) == kUpb_FieldMode_Array);
- UPB_ASSUME(field->presence == 0);
-}
-
-UPB_INLINE void _upb_MiniTableField_CheckIsMap(
- const struct upb_MiniTableField* field) {
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_NativePointer);
- UPB_ASSUME(upb_FieldMode_Get(field) == kUpb_FieldMode_Map);
- UPB_ASSUME(field->presence == 0);
-}
-
-UPB_INLINE bool upb_IsRepeatedOrMap(const struct upb_MiniTableField* field) {
- // This works because upb_FieldMode has no value 3.
- return !(field->mode & kUpb_FieldMode_Scalar);
-}
-
-UPB_INLINE bool upb_IsSubMessage(const struct upb_MiniTableField* field) {
- return field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
- field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_FIELD_H_ */
-
-#ifndef UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
-#define UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
-
-
-// Must be last.
-
-struct upb_Decoder;
-typedef const char* _upb_FieldParser(struct upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t data);
-typedef struct {
- uint64_t field_data;
- _upb_FieldParser* field_parser;
-} _upb_FastTable_Entry;
-
-typedef enum {
- kUpb_ExtMode_NonExtendable = 0, // Non-extendable message.
- kUpb_ExtMode_Extendable = 1, // Normal extendable message.
- kUpb_ExtMode_IsMessageSet = 2, // MessageSet message.
- kUpb_ExtMode_IsMessageSet_ITEM =
- 3, // MessageSet item (temporary only, see decode.c)
-
- // During table building we steal a bit to indicate that the message is a map
- // entry. *Only* used during table building!
- kUpb_ExtMode_IsMapEntry = 4,
-} upb_ExtMode;
-
-union upb_MiniTableSub;
-
-// upb_MiniTable represents the memory layout of a given upb_MessageDef.
-// The members are public so generated code can initialize them,
-// but users MUST NOT directly read or write any of its members.
-struct upb_MiniTable {
- const union upb_MiniTableSub* subs;
- const struct upb_MiniTableField* fields;
-
- // Must be aligned to sizeof(void*). Doesn't include internal members like
- // unknown fields, extension dict, pointer to msglayout, etc.
- uint16_t size;
-
- uint16_t field_count;
- uint8_t ext; // upb_ExtMode, declared as uint8_t so sizeof(ext) == 1
- uint8_t dense_below;
- uint8_t table_mask;
- uint8_t required_count; // Required fields have the lowest hasbits.
-
- // To statically initialize the tables of variable length, we need a flexible
- // array member, and we need to compile in gnu99 mode (constant initialization
- // of flexible array members is a GNU extension, not in C99 unfortunately.
- _upb_FastTable_Entry fasttable[];
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// A MiniTable for an empty message, used for unlinked sub-messages.
-extern const struct upb_MiniTable _kUpb_MiniTable_Empty;
-
-// Computes a bitmask in which the |l->required_count| lowest bits are set,
-// except that we skip the lowest bit (because upb never uses hasbit 0).
-//
-// Sample output:
-// requiredmask(1) => 0b10 (0x2)
-// requiredmask(5) => 0b111110 (0x3e)
-UPB_INLINE uint64_t upb_MiniTable_requiredmask(const struct upb_MiniTable* l) {
- int n = l->required_count;
- assert(0 < n && n <= 63);
- return ((1ULL << n) - 1) << 1;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_MESSAGE_H_ */
-#ifndef UPB_MINI_TABLE_INTERNAL_SUB_H_
-#define UPB_MINI_TABLE_INTERNAL_SUB_H_
-
-
-union upb_MiniTableSub {
- const struct upb_MiniTable* submsg;
- const struct upb_MiniTableEnum* subenum;
-};
-
-#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct upb_MiniTableField upb_MiniTableField;
-
-UPB_API_INLINE upb_FieldType
-upb_MiniTableField_Type(const upb_MiniTableField* field) {
- if (field->mode & kUpb_LabelFlags_IsAlternate) {
- if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Int32) {
- return kUpb_FieldType_Enum;
- } else if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bytes) {
- return kUpb_FieldType_String;
- } else {
- UPB_ASSERT(false);
- }
- }
- return (upb_FieldType)field->UPB_PRIVATE(descriptortype);
-}
-
-UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField* f) {
- switch (upb_MiniTableField_Type(f)) {
- case kUpb_FieldType_Double:
- return kUpb_CType_Double;
- case kUpb_FieldType_Float:
- return kUpb_CType_Float;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_SInt64:
- case kUpb_FieldType_SFixed64:
- return kUpb_CType_Int64;
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_SFixed32:
- case kUpb_FieldType_SInt32:
- return kUpb_CType_Int32;
- case kUpb_FieldType_UInt64:
- case kUpb_FieldType_Fixed64:
- return kUpb_CType_UInt64;
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Fixed32:
- return kUpb_CType_UInt32;
- case kUpb_FieldType_Enum:
- return kUpb_CType_Enum;
- case kUpb_FieldType_Bool:
- return kUpb_CType_Bool;
- case kUpb_FieldType_String:
- return kUpb_CType_String;
- case kUpb_FieldType_Bytes:
- return kUpb_CType_Bytes;
- case kUpb_FieldType_Group:
- case kUpb_FieldType_Message:
- return kUpb_CType_Message;
- }
- UPB_UNREACHABLE();
-}
-
-UPB_API_INLINE bool upb_MiniTableField_IsExtension(
- const upb_MiniTableField* field) {
- return field->mode & kUpb_LabelFlags_IsExtension;
-}
-
-UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
- const upb_MiniTableField* field) {
- return field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum;
-}
-
-UPB_API_INLINE bool upb_MiniTableField_HasPresence(
- const upb_MiniTableField* field) {
- if (upb_MiniTableField_IsExtension(field)) {
- return !upb_IsRepeatedOrMap(field);
- } else {
- return field->presence != 0;
- }
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_FIELD_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct upb_MiniTable upb_MiniTable;
-
-UPB_API const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
- const upb_MiniTable* table, uint32_t number);
-
-UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_GetFieldByIndex(
- const upb_MiniTable* t, uint32_t index) {
- return &t->fields[index];
-}
-
-// Returns the MiniTable for this message field. If the field is unlinked,
-// returns NULL.
-UPB_API_INLINE const upb_MiniTable* upb_MiniTable_GetSubMessageTable(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- const upb_MiniTable* ret =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSUME(ret);
- return ret == &_kUpb_MiniTable_Empty ? NULL : ret;
-}
-
-// Returns the MiniTableEnum for this enum field. If the field is unlinked,
-// returns NULL.
-UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTable_GetSubEnumTable(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- return mini_table->subs[field->UPB_PRIVATE(submsg_index)].subenum;
-}
-
-// Returns true if this MiniTable field is linked to a MiniTable for the
-// sub-message.
-UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- return upb_MiniTable_GetSubMessageTable(mini_table, field) != NULL;
-}
-
-// If this field is in a oneof, returns the first field in the oneof.
-//
-// Otherwise returns NULL.
-//
-// Usage:
-// const upb_MiniTableField* field = upb_MiniTable_GetOneof(m, f);
-// do {
-// ..
-// } while (upb_MiniTable_NextOneofField(m, &field);
-//
-const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
- const upb_MiniTableField* f);
-
-// Iterates to the next field in the oneof. If this is the last field in the
-// oneof, returns false. The ordering of fields in the oneof is not
-// guaranteed.
-// REQUIRES: |f| is the field initialized by upb_MiniTable_GetOneof and updated
-// by prior upb_MiniTable_NextOneofField calls.
-bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
- const upb_MiniTableField** f);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_MESSAGE_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Creates a new message with the given mini_table on the given arena.
-UPB_API upb_Message* upb_Message_New(const upb_MiniTable* mini_table,
+// Resizes the capacity of the array to be at least min_size.
+bool UPB_PRIVATE(_upb_Array_Realloc)(struct upb_Array* array, size_t min_size,
upb_Arena* arena);
-// Adds unknown data (serialized protobuf data) to the given message.
-// The data is copied into the message instance.
-void upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena);
+UPB_INLINE bool UPB_PRIVATE(_upb_Array_Reserve)(struct upb_Array* array,
+ size_t size, upb_Arena* arena) {
+ if (array->UPB_PRIVATE(capacity) < size)
+ return UPB_PRIVATE(_upb_Array_Realloc)(array, size, arena);
+ return true;
+}
-// Returns a reference to the message's unknown data.
-const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len);
+// Resize without initializing new elements.
+UPB_INLINE bool _upb_Array_ResizeUninitialized(struct upb_Array* array,
+ size_t size, upb_Arena* arena) {
+ UPB_ASSERT(size <= array->UPB_ONLYBITS(size) ||
+ arena); // Allow NULL arena when shrinking.
+ if (!UPB_PRIVATE(_upb_Array_Reserve)(array, size, arena)) return false;
+ array->UPB_ONLYBITS(size) = size;
+ return true;
+}
-// Removes partial unknown data from message.
-void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len);
+// This function is intended for situations where elem_size is compile-time
+// constant or a known expression of the form (1 << lg2), so that the expression
+// i*elem_size does not result in an actual multiplication.
+UPB_INLINE void UPB_PRIVATE(_upb_Array_Set)(struct upb_Array* array, size_t i,
+ const void* data,
+ size_t elem_size) {
+ UPB_ASSERT(i < array->UPB_ONLYBITS(size));
+ UPB_ASSERT(elem_size == 1U << UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array));
+ char* arr_data = (char*)_upb_array_ptr(array);
+ memcpy(arr_data + (i * elem_size), data, elem_size);
+}
-// Returns the number of extensions present in this message.
-size_t upb_Message_ExtensionCount(const upb_Message* msg);
+// LINT.ThenChange(
+// GoogleInternalName1,
+//)
#ifdef __cplusplus
} /* extern "C" */
#endif
-
-#endif /* UPB_MESSAGE_MESSAGE_H_ */
-
-#ifndef UPB_MINI_TABLE_EXTENSION_H_
-#define UPB_MINI_TABLE_EXTENSION_H_
+#undef _UPB_ARRAY_MASK_IMM
+#undef _UPB_ARRAY_MASK_LG2
+#undef _UPB_ARRAY_MASK_ALL
-#ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
-#define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+#endif /* UPB_MESSAGE_INTERNAL_ARRAY_H_ */
+#ifndef UPB_MESSAGE_INTERNAL_MAP_H_
+#define UPB_MESSAGE_INTERNAL_MAP_H_
-// Must be last.
-
-struct upb_MiniTableExtension {
- // Do not move this field. We need to be able to alias pointers.
- struct upb_MiniTableField field;
-
- const struct upb_MiniTable* extendee;
- union upb_MiniTableSub sub; // NULL unless submessage or proto2 enum
-};
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */
-
-typedef struct upb_MiniTableExtension upb_MiniTableExtension;
-
-#endif /* UPB_MINI_TABLE_EXTENSION_H_ */
-
-// Must be last.
-
-// The internal representation of an extension is self-describing: it contains
-// enough information that we can serialize it to binary format without needing
-// to look it up in a upb_ExtensionRegistry.
-//
-// This representation allocates 16 bytes to data on 64-bit platforms.
-// This is rather wasteful for scalars (in the extreme case of bool,
-// it wastes 15 bytes). We accept this because we expect messages to be
-// the most common extension type.
-typedef struct {
- const upb_MiniTableExtension* ext;
- union {
- upb_StringView str;
- void* ptr;
- char scalar_data[8];
- } data;
-} upb_Message_Extension;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Adds the given extension data to the given message.
-// |ext| is copied into the message instance.
-// This logically replaces any previously-added extension with this number.
-upb_Message_Extension* _upb_Message_GetOrCreateExtension(
- upb_Message* msg, const upb_MiniTableExtension* ext, upb_Arena* arena);
-
-// Returns an array of extensions for this message.
-// Note: the array is ordered in reverse relative to the order of creation.
-const upb_Message_Extension* _upb_Message_Getexts(const upb_Message* msg,
- size_t* count);
-
-// Returns an extension for the given field number, or NULL if no extension
-// exists for this field number.
-const upb_Message_Extension* _upb_Message_Getext(
- const upb_Message* msg, const upb_MiniTableExtension* ext);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MESSAGE_INTERNAL_EXTENSION_H_ */
-
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_H_
+#include <stddef.h>
+#include <string.h>
#ifndef UPB_HASH_STR_TABLE_H_
@@ -1718,6 +1250,1572 @@
#endif /* UPB_HASH_STR_TABLE_H_ */
+// Must be last.
+
+typedef enum {
+ kUpb_MapInsertStatus_Inserted = 0,
+ kUpb_MapInsertStatus_Replaced = 1,
+ kUpb_MapInsertStatus_OutOfMemory = 2,
+} upb_MapInsertStatus;
+
+// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
+
+struct upb_Map {
+ // Size of key and val, based on the map type.
+ // Strings are represented as '0' because they must be handled specially.
+ char key_size;
+ char val_size;
+
+ upb_strtable table;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Converting between internal table representation and user values.
+//
+// _upb_map_tokey() and _upb_map_fromkey() are inverses.
+// _upb_map_tovalue() and _upb_map_fromvalue() are inverses.
+//
+// These functions account for the fact that strings are treated differently
+// from other types when stored in a map.
+
+UPB_INLINE upb_StringView _upb_map_tokey(const void* key, size_t size) {
+ if (size == UPB_MAPTYPE_STRING) {
+ return *(upb_StringView*)key;
+ } else {
+ return upb_StringView_FromDataAndSize((const char*)key, size);
+ }
+}
+
+UPB_INLINE void _upb_map_fromkey(upb_StringView key, void* out, size_t size) {
+ if (size == UPB_MAPTYPE_STRING) {
+ memcpy(out, &key, sizeof(key));
+ } else {
+ memcpy(out, key.data, size);
+ }
+}
+
+UPB_INLINE bool _upb_map_tovalue(const void* val, size_t size,
+ upb_value* msgval, upb_Arena* a) {
+ if (size == UPB_MAPTYPE_STRING) {
+ upb_StringView* strp = (upb_StringView*)upb_Arena_Malloc(a, sizeof(*strp));
+ if (!strp) return false;
+ *strp = *(upb_StringView*)val;
+ *msgval = upb_value_ptr(strp);
+ } else {
+ memcpy(msgval, val, size);
+ }
+ return true;
+}
+
+UPB_INLINE void _upb_map_fromvalue(upb_value val, void* out, size_t size) {
+ if (size == UPB_MAPTYPE_STRING) {
+ const upb_StringView* strp = (const upb_StringView*)upb_value_getptr(val);
+ memcpy(out, strp, sizeof(upb_StringView));
+ } else {
+ memcpy(out, &val, size);
+ }
+}
+
+UPB_INLINE void* _upb_map_next(const struct upb_Map* map, size_t* iter) {
+ upb_strtable_iter it;
+ it.t = &map->table;
+ it.index = *iter;
+ upb_strtable_next(&it);
+ *iter = it.index;
+ if (upb_strtable_done(&it)) return NULL;
+ return (void*)str_tabent(&it);
+}
+
+UPB_INLINE void _upb_Map_Clear(struct upb_Map* map) {
+ upb_strtable_clear(&map->table);
+}
+
+UPB_INLINE bool _upb_Map_Delete(struct upb_Map* map, const void* key,
+ size_t key_size, upb_value* val) {
+ upb_StringView k = _upb_map_tokey(key, key_size);
+ return upb_strtable_remove2(&map->table, k.data, k.size, val);
+}
+
+UPB_INLINE bool _upb_Map_Get(const struct upb_Map* map, const void* key,
+ size_t key_size, void* val, size_t val_size) {
+ upb_value tabval;
+ upb_StringView k = _upb_map_tokey(key, key_size);
+ bool ret = upb_strtable_lookup2(&map->table, k.data, k.size, &tabval);
+ if (ret && val) {
+ _upb_map_fromvalue(tabval, val, val_size);
+ }
+ return ret;
+}
+
+UPB_INLINE upb_MapInsertStatus _upb_Map_Insert(struct upb_Map* map,
+ const void* key, size_t key_size,
+ void* val, size_t val_size,
+ upb_Arena* a) {
+ upb_StringView strkey = _upb_map_tokey(key, key_size);
+ upb_value tabval = {0};
+ if (!_upb_map_tovalue(val, val_size, &tabval, a)) {
+ return kUpb_MapInsertStatus_OutOfMemory;
+ }
+
+ // TODO: add overwrite operation to minimize number of lookups.
+ bool removed =
+ upb_strtable_remove2(&map->table, strkey.data, strkey.size, NULL);
+ if (!upb_strtable_insert(&map->table, strkey.data, strkey.size, tabval, a)) {
+ return kUpb_MapInsertStatus_OutOfMemory;
+ }
+ return removed ? kUpb_MapInsertStatus_Replaced
+ : kUpb_MapInsertStatus_Inserted;
+}
+
+UPB_INLINE size_t _upb_Map_Size(const struct upb_Map* map) {
+ return map->table.t.count;
+}
+
+// Strings/bytes are special-cased in maps.
+extern char _upb_Map_CTypeSizeTable[12];
+
+UPB_INLINE size_t _upb_Map_CTypeSize(upb_CType ctype) {
+ return _upb_Map_CTypeSizeTable[ctype];
+}
+
+// Creates a new map on the given arena with this key/value type.
+struct upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_INTERNAL_MAP_H_ */
+
+/*
+** Our memory representation for parsing tables and messages themselves.
+** Functions in this file are used by generated code and possibly reflection.
+**
+** The definitions in this file are internal to upb.
+**/
+
+#ifndef UPB_MESSAGE_INTERNAL_MESSAGE_H_
+#define UPB_MESSAGE_INTERNAL_MESSAGE_H_
+
+#include <stdlib.h>
+#include <string.h>
+
+
+#ifndef UPB_MESSAGE_INTERNAL_EXTENSION_H_
+#define UPB_MESSAGE_INTERNAL_EXTENSION_H_
+
+
+#ifndef UPB_MINI_TABLE_EXTENSION_H_
+#define UPB_MINI_TABLE_EXTENSION_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_FIELD_H_
+#define UPB_MINI_TABLE_FIELD_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_FIELD_H_
+#define UPB_MINI_TABLE_INTERNAL_FIELD_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_
+#define UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Return the log2 of the storage size in bytes for a upb_CType
+UPB_INLINE int UPB_PRIVATE(_upb_CType_SizeLg2)(upb_CType c_type) {
+ static const int8_t size[] = {
+ 0, // kUpb_CType_Bool
+ 2, // kUpb_CType_Float
+ 2, // kUpb_CType_Int32
+ 2, // kUpb_CType_UInt32
+ 2, // kUpb_CType_Enum
+ UPB_SIZE(2, 3), // kUpb_CType_Message
+ 3, // kUpb_CType_Double
+ 3, // kUpb_CType_Int64
+ 3, // kUpb_CType_UInt64
+ UPB_SIZE(3, 4), // kUpb_CType_String
+ UPB_SIZE(3, 4), // kUpb_CType_Bytes
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return size[c_type - 1];
+}
+
+// Return the log2 of the storage size in bytes for a upb_FieldType
+UPB_INLINE int UPB_PRIVATE(_upb_FieldType_SizeLg2)(upb_FieldType field_type) {
+ static const int8_t size[] = {
+ 3, // kUpb_FieldType_Double
+ 2, // kUpb_FieldType_Float
+ 3, // kUpb_FieldType_Int64
+ 3, // kUpb_FieldType_UInt64
+ 2, // kUpb_FieldType_Int32
+ 3, // kUpb_FieldType_Fixed64
+ 2, // kUpb_FieldType_Fixed32
+ 0, // kUpb_FieldType_Bool
+ UPB_SIZE(3, 4), // kUpb_FieldType_String
+ UPB_SIZE(2, 3), // kUpb_FieldType_Group
+ UPB_SIZE(2, 3), // kUpb_FieldType_Message
+ UPB_SIZE(3, 4), // kUpb_FieldType_Bytes
+ 2, // kUpb_FieldType_UInt32
+ 2, // kUpb_FieldType_Enum
+ 2, // kUpb_FieldType_SFixed32
+ 3, // kUpb_FieldType_SFixed64
+ 2, // kUpb_FieldType_SInt32
+ 3, // kUpb_FieldType_SInt64
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return size[field_type - 1];
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_ */
+
+// Must be last.
+
+// LINT.IfChange(struct_definition)
+struct upb_MiniTableField {
+ uint32_t UPB_ONLYBITS(number);
+ uint16_t UPB_ONLYBITS(offset);
+ int16_t presence; // If >0, hasbit_index. If <0, ~oneof_index
+
+ // Indexes into `upb_MiniTable.subs`
+ // Will be set to `kUpb_NoSub` if `descriptortype` != MESSAGE/GROUP/ENUM
+ uint16_t UPB_PRIVATE(submsg_index);
+
+ uint8_t UPB_PRIVATE(descriptortype);
+
+ // upb_FieldMode | upb_LabelFlags | (upb_FieldRep << kUpb_FieldRep_Shift)
+ uint8_t UPB_ONLYBITS(mode);
+};
+
+#define kUpb_NoSub ((uint16_t)-1)
+
+typedef enum {
+ kUpb_FieldMode_Map = 0,
+ kUpb_FieldMode_Array = 1,
+ kUpb_FieldMode_Scalar = 2,
+} upb_FieldMode;
+
+// Mask to isolate the upb_FieldMode from field.mode.
+#define kUpb_FieldMode_Mask 3
+
+// Extra flags on the mode field.
+typedef enum {
+ kUpb_LabelFlags_IsPacked = 4,
+ kUpb_LabelFlags_IsExtension = 8,
+ // Indicates that this descriptor type is an "alternate type":
+ // - for Int32, this indicates that the actual type is Enum (but was
+ // rewritten to Int32 because it is an open enum that requires no check).
+ // - for Bytes, this indicates that the actual type is String (but does
+ // not require any UTF-8 check).
+ kUpb_LabelFlags_IsAlternate = 16,
+} upb_LabelFlags;
+
+// Note: we sort by this number when calculating layout order.
+typedef enum {
+ kUpb_FieldRep_1Byte = 0,
+ kUpb_FieldRep_4Byte = 1,
+ kUpb_FieldRep_StringView = 2,
+ kUpb_FieldRep_8Byte = 3,
+
+ kUpb_FieldRep_NativePointer =
+ UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte),
+ kUpb_FieldRep_Max = kUpb_FieldRep_8Byte,
+} upb_FieldRep;
+
+#define kUpb_FieldRep_Shift 6
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE upb_FieldMode
+UPB_PRIVATE(_upb_MiniTableField_Mode)(const struct upb_MiniTableField* f) {
+ return (upb_FieldMode)(f->UPB_ONLYBITS(mode) & kUpb_FieldMode_Mask);
+}
+
+UPB_INLINE upb_FieldRep
+UPB_PRIVATE(_upb_MiniTableField_GetRep)(const struct upb_MiniTableField* f) {
+ return (upb_FieldRep)(f->UPB_ONLYBITS(mode) >> kUpb_FieldRep_Shift);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsArray)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Array;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsMap)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Map;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsScalar)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Scalar;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsAlternate)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsAlternate) != 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsExtension)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsExtension) != 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsPacked)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsPacked) != 0;
+}
+
+UPB_INLINE upb_FieldType
+UPB_PRIVATE(_upb_MiniTableField_Type)(const struct upb_MiniTableField* f) {
+ const upb_FieldType type = (upb_FieldType)f->UPB_PRIVATE(descriptortype);
+ if (UPB_PRIVATE(_upb_MiniTableField_IsAlternate)(f)) {
+ if (type == kUpb_FieldType_Int32) return kUpb_FieldType_Enum;
+ if (type == kUpb_FieldType_Bytes) return kUpb_FieldType_String;
+ UPB_ASSERT(false);
+ }
+ return type;
+}
+
+UPB_INLINE upb_CType
+UPB_PRIVATE(_upb_MiniTableField_CType)(const struct upb_MiniTableField* f) {
+ return upb_FieldType_CType(UPB_PRIVATE(_upb_MiniTableField_Type)(f));
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(
+ const struct upb_MiniTableField* f) {
+ return f->presence > 0;
+}
+
+UPB_INLINE char UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f));
+ const size_t index = f->presence;
+ return 1 << (index % 8);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f));
+ const size_t index = f->presence;
+ return index / 8;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsClosedEnum)(
+ const struct upb_MiniTableField* f) {
+ return f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(
+ const struct upb_MiniTableField* f) {
+ return f->presence < 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsSubMessage)(
+ const struct upb_MiniTableField* f) {
+ return f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
+ f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_HasPresence)(
+ const struct upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_IsExtension)(f)) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsScalar)(f);
+ } else {
+ return f->presence != 0;
+ }
+}
+
+UPB_INLINE uint32_t
+UPB_PRIVATE(_upb_MiniTableField_Number)(const struct upb_MiniTableField* f) {
+ return f->UPB_ONLYBITS(number);
+}
+
+UPB_INLINE uint16_t
+UPB_PRIVATE(_upb_MiniTableField_Offset)(const struct upb_MiniTableField* f) {
+ return f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(f));
+ return ~(ptrdiff_t)f->presence;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(f) ==
+ kUpb_FieldRep_NativePointer);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_IsArray)(f));
+ UPB_ASSUME(f->presence == 0);
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(f) ==
+ kUpb_FieldRep_NativePointer);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_IsMap)(f));
+ UPB_ASSUME(f->presence == 0);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_ElemSizeLg2)(
+ const struct upb_MiniTableField* f) {
+ const upb_FieldType field_type = UPB_PRIVATE(_upb_MiniTableField_Type)(f);
+ return UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
+}
+
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/mini_table_field.ts)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_FIELD_H_ */
+
+// Must be last.
+
+typedef struct upb_MiniTableField upb_MiniTableField;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_CType)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_HasPresence(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_HasPresence)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsArray(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsArray)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsClosedEnum)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsExtension(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsExtension)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsInOneof(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsMap(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsMap)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsPacked(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsPacked)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsScalar(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsScalar)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsSubMessage(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsSubMessage)(f);
+}
+
+UPB_API_INLINE uint32_t upb_MiniTableField_Number(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Number)(f);
+}
+
+UPB_API_INLINE upb_FieldType
+upb_MiniTableField_Type(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Type)(f);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_FIELD_H_ */
+
+#ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+#define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_SUB_H_
+#define UPB_MINI_TABLE_INTERNAL_SUB_H_
+
+// Must be last.
+
+union upb_MiniTableSub {
+ const struct upb_MiniTable* UPB_PRIVATE(submsg);
+ const struct upb_MiniTableEnum* UPB_PRIVATE(subenum);
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE union upb_MiniTableSub UPB_PRIVATE(_upb_MiniTableSub_FromEnum)(
+ const struct upb_MiniTableEnum* subenum) {
+ union upb_MiniTableSub out;
+ out.UPB_PRIVATE(subenum) = subenum;
+ return out;
+}
+
+UPB_INLINE union upb_MiniTableSub UPB_PRIVATE(_upb_MiniTableSub_FromMessage)(
+ const struct upb_MiniTable* submsg) {
+ union upb_MiniTableSub out;
+ out.UPB_PRIVATE(submsg) = submsg;
+ return out;
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableSub_Enum)(
+ const union upb_MiniTableSub sub) {
+ return sub.UPB_PRIVATE(subenum);
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableSub_Message)(
+ const union upb_MiniTableSub sub) {
+ return sub.UPB_PRIVATE(submsg);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
+
+// Must be last.
+
+struct upb_MiniTableExtension {
+ // Do not move this field. We need to be able to alias pointers.
+ struct upb_MiniTableField UPB_PRIVATE(field);
+
+ const struct upb_MiniTable* UPB_PRIVATE(extendee);
+ union upb_MiniTableSub UPB_PRIVATE(sub); // NULL unless submsg or proto2 enum
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTableExtension_AsField)(const struct upb_MiniTableExtension* e) {
+ return (const struct upb_MiniTableField*)&e->UPB_PRIVATE(field);
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_MiniTableExtension_Number)(
+ const struct upb_MiniTableExtension* e) {
+ return e->UPB_PRIVATE(field).UPB_ONLYBITS(number);
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+ _upb_MiniTableExtension_GetSubMessage)(
+ const struct upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Message)(e->UPB_PRIVATE(sub));
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(
+ struct upb_MiniTableExtension* e, const struct upb_MiniTable* m) {
+ e->UPB_PRIVATE(sub).UPB_PRIVATE(submsg) = m;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */
+
+#ifndef UPB_MINI_TABLE_MESSAGE_H_
+#define UPB_MINI_TABLE_MESSAGE_H_
+
+
+#ifndef UPB_MINI_TABLE_ENUM_H_
+#define UPB_MINI_TABLE_ENUM_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_ENUM_H_
+#define UPB_MINI_TABLE_INTERNAL_ENUM_H_
+
+#include <stdint.h>
+
+// Must be last.
+
+struct upb_MiniTableEnum {
+ uint32_t UPB_PRIVATE(mask_limit); // Highest that can be tested with mask.
+ uint32_t UPB_PRIVATE(value_count); // Number of values after the bitfield.
+ uint32_t UPB_PRIVATE(data)[]; // Bitmask + enumerated values follow.
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)(
+ const struct upb_MiniTableEnum* e, uint32_t val) {
+ if (UPB_LIKELY(val < 64)) {
+ const uint64_t mask =
+ e->UPB_PRIVATE(data)[0] | ((uint64_t)e->UPB_PRIVATE(data)[1] << 32);
+ const uint64_t bit = 1ULL << val;
+ return (mask & bit) != 0;
+ }
+ if (UPB_LIKELY(val < e->UPB_PRIVATE(mask_limit))) {
+ const uint32_t mask = e->UPB_PRIVATE(data)[val / 32];
+ const uint32_t bit = 1ULL << (val % 32);
+ return (mask & bit) != 0;
+ }
+
+ // OPT: binary search long lists?
+ const uint32_t* start =
+ &e->UPB_PRIVATE(data)[e->UPB_PRIVATE(mask_limit) / 32];
+ const uint32_t* limit = &e->UPB_PRIVATE(
+ data)[e->UPB_PRIVATE(mask_limit) / 32 + e->UPB_PRIVATE(value_count)];
+ for (const uint32_t* p = start; p < limit; p++) {
+ if (*p == val) return true;
+ }
+ return false;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_ENUM_H_ */
+
+// Must be last
+
+typedef struct upb_MiniTableEnum upb_MiniTableEnum;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Validates enum value against range defined by enum mini table.
+UPB_INLINE bool upb_MiniTableEnum_CheckValue(const upb_MiniTableEnum* e,
+ uint32_t val) {
+ return UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)(e, val);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_ENUM_H_ */
+
+#ifndef UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
+#define UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
+
+#include <stdint.h>
+
+
+// Must be last.
+
+struct upb_Decoder;
+struct upb_Message;
+typedef const char* _upb_FieldParser(struct upb_Decoder* d, const char* ptr,
+ struct upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t data);
+typedef struct {
+ uint64_t field_data;
+ _upb_FieldParser* field_parser;
+} _upb_FastTable_Entry;
+
+typedef enum {
+ kUpb_ExtMode_NonExtendable = 0, // Non-extendable message.
+ kUpb_ExtMode_Extendable = 1, // Normal extendable message.
+ kUpb_ExtMode_IsMessageSet = 2, // MessageSet message.
+ kUpb_ExtMode_IsMessageSet_ITEM =
+ 3, // MessageSet item (temporary only, see decode.c)
+
+ // During table building we steal a bit to indicate that the message is a map
+ // entry. *Only* used during table building!
+ kUpb_ExtMode_IsMapEntry = 4,
+} upb_ExtMode;
+
+// upb_MiniTable represents the memory layout of a given upb_MessageDef.
+// The members are public so generated code can initialize them,
+// but users MUST NOT directly read or write any of its members.
+
+// LINT.IfChange(minitable_struct_definition)
+struct upb_MiniTable {
+ const union upb_MiniTableSub* UPB_PRIVATE(subs);
+ const struct upb_MiniTableField* UPB_ONLYBITS(fields);
+
+ // Must be aligned to sizeof(void*). Doesn't include internal members like
+ // unknown fields, extension dict, pointer to msglayout, etc.
+ uint16_t UPB_PRIVATE(size);
+
+ uint16_t UPB_ONLYBITS(field_count);
+
+ uint8_t UPB_PRIVATE(ext); // upb_ExtMode, uint8_t here so sizeof(ext) == 1
+ uint8_t UPB_PRIVATE(dense_below);
+ uint8_t UPB_PRIVATE(table_mask);
+ uint8_t UPB_PRIVATE(required_count); // Required fields have the low hasbits.
+
+ // To statically initialize the tables of variable length, we need a flexible
+ // array member, and we need to compile in gnu99 mode (constant initialization
+ // of flexible array members is a GNU extension, not in C99 unfortunately.
+ _upb_FastTable_Entry UPB_PRIVATE(fasttable)[];
+};
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/mini_table.ts)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTable_Empty)(void) {
+ extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty);
+
+ return &UPB_PRIVATE(_kUpb_MiniTable_Empty);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTable_FieldCount)(
+ const struct upb_MiniTable* m) {
+ return m->UPB_ONLYBITS(field_count);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_IsEmpty)(
+ const struct upb_MiniTable* m) {
+ extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty);
+
+ return m == &UPB_PRIVATE(_kUpb_MiniTable_Empty);
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTable_GetFieldByIndex)(const struct upb_MiniTable* m, uint32_t i) {
+ return &m->UPB_ONLYBITS(fields)[i];
+}
+
+UPB_INLINE const union upb_MiniTableSub* UPB_PRIVATE(
+ _upb_MiniTable_GetSubByIndex)(const struct upb_MiniTable* m, uint32_t i) {
+ return &m->UPB_PRIVATE(subs)[i];
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+ _upb_MiniTable_GetSubMessageTable)(const struct upb_MiniTable* m,
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_CType)(f) == kUpb_CType_Message);
+ const struct upb_MiniTable* ret = UPB_PRIVATE(_upb_MiniTableSub_Message)(
+ m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSUME(ret);
+ return UPB_PRIVATE(_upb_MiniTable_IsEmpty)(ret) ? NULL : ret;
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(
+ _upb_MiniTable_GetSubEnumTable)(const struct upb_MiniTable* m,
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_CType)(f) == kUpb_CType_Enum);
+ return UPB_PRIVATE(_upb_MiniTableSub_Enum)(
+ m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(_upb_MiniTable_MapKey)(
+ const struct upb_MiniTable* m) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
+ const struct upb_MiniTableField* f =
+ UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 0);
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 1);
+ return f;
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTable_MapValue)(const struct upb_MiniTable* m) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
+ const struct upb_MiniTableField* f =
+ UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 1);
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 2);
+ return f;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(
+ const struct upb_MiniTable* m, const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f) != NULL;
+}
+
+// Computes a bitmask in which the |m->required_count| lowest bits are set,
+// except that we skip the lowest bit (because upb never uses hasbit 0).
+//
+// Sample output:
+// RequiredMask(1) => 0b10 (0x2)
+// RequiredMask(5) => 0b111110 (0x3e)
+UPB_INLINE uint64_t
+UPB_PRIVATE(_upb_MiniTable_RequiredMask)(const struct upb_MiniTable* m) {
+ int n = m->UPB_PRIVATE(required_count);
+ UPB_ASSERT(0 < n && n <= 63);
+ return ((1ULL << n) - 1) << 1;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_MESSAGE_H_ */
+
+// Must be last.
+
+typedef struct upb_MiniTable upb_MiniTable;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
+ const upb_MiniTable* m, uint32_t number);
+
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_GetFieldByIndex(
+ const upb_MiniTable* m, uint32_t index) {
+ return UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, index);
+}
+
+UPB_API_INLINE int upb_MiniTable_FieldCount(const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_FieldCount)(m);
+}
+
+// Returns the MiniTable for a message field, NULL if the field is unlinked.
+UPB_API_INLINE const upb_MiniTable* upb_MiniTable_GetSubMessageTable(
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f);
+}
+
+// Returns the MiniTableEnum for a message field, NULL if the field is unlinked.
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTable_GetSubEnumTable(
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubEnumTable)(m, f);
+}
+
+// Returns the MiniTableField for the key of a map.
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapKey(
+ const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_MapKey)(m);
+}
+
+// Returns the MiniTableField for the value of a map.
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapValue(
+ const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_MapValue)(m);
+}
+
+// Returns true if this MiniTable field is linked to a MiniTable for the
+// sub-message.
+UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(m, f);
+}
+
+// If this field is in a oneof, returns the first field in the oneof.
+//
+// Otherwise returns NULL.
+//
+// Usage:
+// const upb_MiniTableField* field = upb_MiniTable_GetOneof(m, f);
+// do {
+// ..
+// } while (upb_MiniTable_NextOneofField(m, &field);
+//
+const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
+ const upb_MiniTableField* f);
+
+// Iterates to the next field in the oneof. If this is the last field in the
+// oneof, returns false. The ordering of fields in the oneof is not
+// guaranteed.
+// REQUIRES: |f| is the field initialized by upb_MiniTable_GetOneof and updated
+// by prior upb_MiniTable_NextOneofField calls.
+bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
+ const upb_MiniTableField** f);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_MESSAGE_H_ */
+
+// Must be last.
+
+typedef struct upb_MiniTableExtension upb_MiniTableExtension;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTableExtension_AsField(
+ const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_AsField)(e);
+}
+
+UPB_API_INLINE uint32_t
+upb_MiniTableExtension_Number(const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_Number)(e);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableExtension_GetSubMessage(
+ const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_GetSubMessage)(e);
+}
+
+UPB_API_INLINE void upb_MiniTableExtension_SetSubMessage(
+ upb_MiniTableExtension* e, const upb_MiniTable* m) {
+ UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(e, m);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_EXTENSION_H_ */
+
+// Must be last.
+
+// The internal representation of an extension is self-describing: it contains
+// enough information that we can serialize it to binary format without needing
+// to look it up in a upb_ExtensionRegistry.
+//
+// This representation allocates 16 bytes to data on 64-bit platforms.
+// This is rather wasteful for scalars (in the extreme case of bool,
+// it wastes 15 bytes). We accept this because we expect messages to be
+// the most common extension type.
+struct upb_Extension {
+ const upb_MiniTableExtension* ext;
+ union {
+ upb_StringView str;
+ void* ptr;
+ char scalar_data[8];
+ } data;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Adds the given extension data to the given message.
+// |ext| is copied into the message instance.
+// This logically replaces any previously-added extension with this number.
+struct upb_Extension* _upb_Message_GetOrCreateExtension(
+ struct upb_Message* msg, const upb_MiniTableExtension* ext,
+ upb_Arena* arena);
+
+// Returns an array of extensions for this message.
+// Note: the array is ordered in reverse relative to the order of creation.
+const struct upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(
+ const struct upb_Message* msg, size_t* count);
+
+// Returns an extension for a message with a given mini table,
+// or NULL if no extension exists with this mini table.
+const struct upb_Extension* _upb_Message_Getext(
+ const struct upb_Message* msg, const upb_MiniTableExtension* ext);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_INTERNAL_EXTENSION_H_ */
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const float kUpb_FltInfinity;
+extern const double kUpb_Infinity;
+extern const double kUpb_NaN;
+
+/* Internal members of a upb_Message that track unknown fields and/or
+ * extensions. We can change this without breaking binary compatibility. We put
+ * these before the user's data. The user's upb_Message* points after the
+ * upb_Message_Internal. */
+
+typedef struct {
+ /* Total size of this structure, including the data that follows.
+ * Must be aligned to 8, which is alignof(upb_Extension) */
+ uint32_t size;
+
+ /* Offsets relative to the beginning of this structure.
+ *
+ * Unknown data grows forward from the beginning to unknown_end.
+ * Extension data grows backward from size to ext_begin.
+ * When the two meet, we're out of data and have to realloc.
+ *
+ * If we imagine that the final member of this struct is:
+ * char data[size - overhead]; // overhead =
+ * sizeof(upb_Message_InternalData)
+ *
+ * Then we have:
+ * unknown data: data[0 .. (unknown_end - overhead)]
+ * extensions data: data[(ext_begin - overhead) .. (size - overhead)] */
+ uint32_t unknown_end;
+ uint32_t ext_begin;
+ /* Data follows, as if there were an array:
+ * char data[size - sizeof(upb_Message_InternalData)]; */
+} upb_Message_InternalData;
+
+typedef struct {
+ union {
+ upb_Message_InternalData* internal;
+
+ // Force 8-byte alignment, since the data members may contain members that
+ // require 8-byte alignment.
+ double d;
+ };
+} upb_Message_Internal;
+
+struct upb_Message {
+ int unused; // Placeholder cuz Windows won't compile an empty struct.
+};
+
+UPB_INLINE size_t upb_msg_sizeof(const upb_MiniTable* m) {
+ return m->UPB_PRIVATE(size) + sizeof(upb_Message_Internal);
+}
+
+// Inline version upb_Message_New(), for internal use.
+UPB_INLINE struct upb_Message* _upb_Message_New(const upb_MiniTable* mini_table,
+ upb_Arena* arena) {
+ size_t size = upb_msg_sizeof(mini_table);
+ void* mem = upb_Arena_Malloc(arena, size + sizeof(upb_Message_Internal));
+ if (UPB_UNLIKELY(!mem)) return NULL;
+ struct upb_Message* msg =
+ UPB_PTR_AT(mem, sizeof(upb_Message_Internal), struct upb_Message);
+ memset(mem, 0, size);
+ return msg;
+}
+
+UPB_INLINE upb_Message_Internal* upb_Message_Getinternal(
+ const struct upb_Message* msg) {
+ ptrdiff_t size = sizeof(upb_Message_Internal);
+ return (upb_Message_Internal*)((char*)msg - size);
+}
+
+UPB_INLINE upb_Message_InternalData* upb_Message_GetInternalData(
+ const struct upb_Message* msg) {
+ return upb_Message_Getinternal(msg)->internal;
+}
+
+// Discards the unknown fields for this message only.
+void _upb_Message_DiscardUnknown_shallow(struct upb_Message* msg);
+
+// Adds unknown data (serialized protobuf data) to the given message.
+// The data is copied into the message instance.
+bool UPB_PRIVATE(_upb_Message_AddUnknown)(struct upb_Message* msg,
+ const char* data, size_t len,
+ upb_Arena* arena);
+
+bool UPB_PRIVATE(_upb_Message_Realloc)(struct upb_Message* msg, size_t need,
+ upb_Arena* arena);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_INTERNAL_MESSAGE_H_ */
+
+#ifndef UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_
+#define UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_
+
+#include <stdint.h>
+
+
+// Must be last.
+
+typedef uintptr_t upb_TaggedMessagePtr;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Internal-only because empty messages cannot be created by the user.
+UPB_INLINE upb_TaggedMessagePtr
+UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(struct upb_Message* ptr, bool empty) {
+ UPB_ASSERT(((uintptr_t)ptr & 1) == 0);
+ return (uintptr_t)ptr | (empty ? 1 : 0);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(
+ upb_TaggedMessagePtr ptr) {
+ return ptr & 1;
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(
+ upb_TaggedMessagePtr ptr) {
+ return (struct upb_Message*)(ptr & ~(uintptr_t)1);
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(
+ _upb_TaggedMessagePtr_GetNonEmptyMessage)(upb_TaggedMessagePtr ptr) {
+ UPB_ASSERT(!UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr));
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(ptr);
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(
+ _upb_TaggedMessagePtr_GetEmptyMessage)(upb_TaggedMessagePtr ptr) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr));
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(ptr);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_ */
+
+typedef union {
+ bool bool_val;
+ float float_val;
+ double double_val;
+ int32_t int32_val;
+ int64_t int64_val;
+ uint32_t uint32_val;
+ uint64_t uint64_val;
+ const struct upb_Array* array_val;
+ const struct upb_Map* map_val;
+ const struct upb_Message* msg_val;
+ upb_StringView str_val;
+
+ // EXPERIMENTAL: A tagged upb_Message*. Users must use this instead of
+ // msg_val if unlinked sub-messages may possibly be in use. See the
+ // documentation in kUpb_DecodeOption_ExperimentalAllowUnlinked for more
+ // information.
+ upb_TaggedMessagePtr tagged_msg_val;
+} upb_MessageValue;
+
+typedef union {
+ struct upb_Array* array;
+ struct upb_Map* map;
+ struct upb_Message* msg;
+} upb_MutableMessageValue;
+
+#endif /* UPB_MESSAGE_VALUE_H_ */
+
+// Must be last.
+
+typedef struct upb_Array upb_Array;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Creates a new array on the given arena that holds elements of this type.
+UPB_API upb_Array* upb_Array_New(upb_Arena* a, upb_CType type);
+
+// Returns the number of elements in the array.
+UPB_API size_t upb_Array_Size(const upb_Array* arr);
+
+// Returns the given element, which must be within the array's current size.
+UPB_API upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i);
+
+// Sets the given element, which must be within the array's current size.
+UPB_API void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val);
+
+// Appends an element to the array. Returns false on allocation failure.
+UPB_API bool upb_Array_Append(upb_Array* array, upb_MessageValue val,
+ upb_Arena* arena);
+
+// Moves elements within the array using memmove().
+// Like memmove(), the source and destination elements may be overlapping.
+UPB_API void upb_Array_Move(upb_Array* array, size_t dst_idx, size_t src_idx,
+ size_t count);
+
+// Inserts one or more empty elements into the array.
+// Existing elements are shifted right.
+// The new elements have undefined state and must be set with `upb_Array_Set()`.
+// REQUIRES: `i <= upb_Array_Size(arr)`
+UPB_API bool upb_Array_Insert(upb_Array* array, size_t i, size_t count,
+ upb_Arena* arena);
+
+// Deletes one or more elements from the array.
+// Existing elements are shifted left.
+// REQUIRES: `i + count <= upb_Array_Size(arr)`
+UPB_API void upb_Array_Delete(upb_Array* array, size_t i, size_t count);
+
+// Changes the size of a vector. New elements are initialized to NULL/0.
+// Returns false on allocation failure.
+UPB_API bool upb_Array_Resize(upb_Array* array, size_t size, upb_Arena* arena);
+
+// Returns pointer to array data.
+UPB_API const void* upb_Array_DataPtr(const upb_Array* arr);
+
+// Returns mutable pointer to array data.
+UPB_API void* upb_Array_MutableDataPtr(upb_Array* arr);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_ARRAY_H_ */
+
+#ifndef UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+#define UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+#if defined(__GNUC__) && !defined(__clang__)
+// GCC raises incorrect warnings in these functions. It thinks that we are
+// overrunning buffers, but we carefully write the functions in this file to
+// guarantee that this is impossible. GCC gets this wrong due it its failure
+// to perform constant propagation as we expect:
+// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108217
+// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226
+//
+// Unfortunately this also indicates that GCC is not optimizing away the
+// switch() in cases where it should be, compromising the performance.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#pragma GCC diagnostic ignored "-Wstringop-overflow"
+#if __GNUC__ >= 11
+#pragma GCC diagnostic ignored "-Wstringop-overread"
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// LINT.IfChange(presence_logic)
+
+// Hasbit access ///////////////////////////////////////////////////////////////
+
+UPB_INLINE bool UPB_PRIVATE(_upb_Message_GetHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ return (*UPB_PTR_AT(msg, offset, const char) & mask) != 0;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ (*UPB_PTR_AT(msg, offset, char)) |= mask;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_ClearHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ (*UPB_PTR_AT(msg, offset, char)) &= ~mask;
+}
+
+// Oneof case access ///////////////////////////////////////////////////////////
+
+UPB_INLINE uint32_t* UPB_PRIVATE(_upb_Message_OneofCasePtr)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ return UPB_PTR_AT(msg, UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(f),
+ uint32_t);
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_Message_GetOneofCase)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const uint32_t* ptr =
+ UPB_PRIVATE(_upb_Message_OneofCasePtr)((struct upb_Message*)msg, f);
+
+ return *ptr;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetOneofCase)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
+
+ *ptr = upb_MiniTableField_Number(f);
+}
+
+// Returns true if the given field is the current oneof case.
+// Does nothing if it is not the current oneof case.
+UPB_INLINE bool UPB_PRIVATE(_upb_Message_ClearOneofCase)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
+
+ if (*ptr != upb_MiniTableField_Number(f)) return false;
+ *ptr = 0;
+ return true;
+}
+
+// LINT.ThenChange(GoogleInternalName2)
+
+UPB_INLINE void* UPB_PRIVATE(_upb_Message_DataPtr)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ return (char*)msg + f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE const void* UPB_PRIVATE(_upb_Message_ConstDataPtr)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ return (const char*)msg + f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetPresence)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ UPB_PRIVATE(_upb_Message_SetHasbit)(msg, f);
+ } else if (upb_MiniTableField_IsInOneof(f)) {
+ UPB_PRIVATE(_upb_Message_SetOneofCase)(msg, f);
+ }
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_DataCopy)(
+ const upb_MiniTableField* f, void* to, const void* from) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte:
+ memcpy(to, from, 1);
+ return;
+ case kUpb_FieldRep_4Byte:
+ memcpy(to, from, 4);
+ return;
+ case kUpb_FieldRep_8Byte:
+ memcpy(to, from, 8);
+ return;
+ case kUpb_FieldRep_StringView: {
+ memcpy(to, from, sizeof(upb_StringView));
+ return;
+ }
+ }
+ UPB_UNREACHABLE();
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_DataEquals)(
+ const upb_MiniTableField* f, const void* a, const void* b) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte:
+ return memcmp(a, b, 1) == 0;
+ case kUpb_FieldRep_4Byte:
+ return memcmp(a, b, 4) == 0;
+ case kUpb_FieldRep_8Byte:
+ return memcmp(a, b, 8) == 0;
+ case kUpb_FieldRep_StringView: {
+ const upb_StringView sa = *(const upb_StringView*)a;
+ const upb_StringView sb = *(const upb_StringView*)b;
+ return upb_StringView_IsEqual(sa, sb);
+ }
+ }
+ UPB_UNREACHABLE();
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_DataClear)(
+ const upb_MiniTableField* f, void* val) {
+ const char zero[16] = {0};
+ return UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, zero);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(
+ const upb_MiniTableField* f, const void* val) {
+ const char zero[16] = {0};
+ return UPB_PRIVATE(_upb_MiniTableField_DataEquals)(f, val, zero);
+}
+
+// Here we define universal getter/setter functions for message fields.
+// These look very branchy and inefficient, but as long as the MiniTableField
+// values are known at compile time, all the branches are optimized away and
+// we are left with ideal code. This can happen either through through
+// literals or UPB_ASSUME():
+//
+// // Via struct literals.
+// bool FooMessage_set_bool_field(const upb_Message* msg, bool val) {
+// const upb_MiniTableField field = {1, 0, 0, /* etc... */};
+// // All value in "field" are compile-time known.
+// _upb_Message_SetNonExtensionField(msg, &field, &value);
+// }
+//
+// // Via UPB_ASSUME().
+// UPB_INLINE bool upb_Message_SetBool(upb_Message* msg,
+// const upb_MiniTableField* field,
+// bool value, upb_Arena* a) {
+// UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bool);
+// UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+// UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+// kUpb_FieldRep_1Byte);
+// upb_Message_SetField(msg, field, &value, a);
+// }
+//
+// As a result, we can use these universal getters/setters for *all* message
+// accessors: generated code, MiniTable accessors, and reflection. The only
+// exception is the binary encoder/decoder, which need to be a bit more clever
+// about how they read/write the message data, for efficiency.
+//
+// These functions work on both extensions and non-extensions. If the field
+// of a setter is known to be a non-extension, the arena may be NULL and the
+// returned bool value may be ignored since it will always succeed.
+
+UPB_INLINE bool _upb_Message_HasExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableExtension* ext) {
+ UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->UPB_PRIVATE(field)));
+ return _upb_Message_Getext(msg, ext) != NULL;
+}
+
+UPB_INLINE bool _upb_Message_HasNonExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableField* field) {
+ UPB_ASSERT(upb_MiniTableField_HasPresence(field));
+ UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
+ if (upb_MiniTableField_IsInOneof(field)) {
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, field) ==
+ upb_MiniTableField_Number(field);
+ } else {
+ return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, field);
+ }
+}
+
+static UPB_FORCEINLINE void _upb_Message_GetNonExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableField* field,
+ const void* default_val, void* val) {
+ UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
+ if ((upb_MiniTableField_IsInOneof(field) ||
+ !UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, default_val)) &&
+ !_upb_Message_HasNonExtensionField(msg, field)) {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(field, val, default_val);
+ return;
+ }
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (field, val, UPB_PRIVATE(_upb_Message_ConstDataPtr)(msg, field));
+}
+
+UPB_INLINE void _upb_Message_GetExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
+ const void* default_val, void* val) {
+ const struct upb_Extension* ext = _upb_Message_Getext(msg, mt_ext);
+ const upb_MiniTableField* f = &mt_ext->UPB_PRIVATE(field);
+ UPB_ASSUME(upb_MiniTableField_IsExtension(f));
+
+ if (ext) {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, &ext->data);
+ } else {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, default_val);
+ }
+}
+
+UPB_INLINE void _upb_Message_SetNonExtensionField(
+ struct upb_Message* msg, const upb_MiniTableField* field, const void* val) {
+ UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
+ UPB_PRIVATE(_upb_Message_SetPresence)(msg, field);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (field, UPB_PRIVATE(_upb_Message_DataPtr)(msg, field), val);
+}
+
+UPB_INLINE bool _upb_Message_SetExtensionField(
+ struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
+ const void* val, upb_Arena* a) {
+ UPB_ASSERT(a);
+ struct upb_Extension* ext = _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
+ if (!ext) return false;
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (&mt_ext->UPB_PRIVATE(field), &ext->data, val);
+ return true;
+}
+
+UPB_INLINE void _upb_Message_ClearExtensionField(
+ struct upb_Message* msg, const upb_MiniTableExtension* ext_l) {
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ if (!in) return;
+ const struct upb_Extension* base =
+ UPB_PTR_AT(in, in->ext_begin, struct upb_Extension);
+ struct upb_Extension* ext =
+ (struct upb_Extension*)_upb_Message_Getext(msg, ext_l);
+ if (ext) {
+ *ext = *base;
+ in->ext_begin += sizeof(struct upb_Extension);
+ }
+}
+
+UPB_INLINE void _upb_Message_ClearNonExtensionField(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ UPB_PRIVATE(_upb_Message_ClearHasbit)(msg, f);
+ } else if (upb_MiniTableField_IsInOneof(f)) {
+ if (!UPB_PRIVATE(_upb_Message_ClearOneofCase)(msg, f)) return;
+ }
+ void* data = UPB_PRIVATE(_upb_Message_DataPtr)(msg, f);
+ UPB_PRIVATE(_upb_MiniTableField_DataClear)(f, data);
+}
+
+UPB_INLINE void _upb_Message_AssertMapIsUntagged(
+ const struct upb_Message* msg, const upb_MiniTableField* field) {
+ UPB_UNUSED(msg);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
+#ifndef NDEBUG
+ upb_TaggedMessagePtr default_val = 0;
+ upb_TaggedMessagePtr tagged;
+ _upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
+ UPB_ASSERT(!UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(tagged));
+#endif
+}
+
+UPB_INLINE struct upb_Map* _upb_Message_GetOrCreateMutableMap(
+ struct upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
+ size_t val_size, upb_Arena* arena) {
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
+ _upb_Message_AssertMapIsUntagged(msg, field);
+ struct upb_Map* map = NULL;
+ struct upb_Map* default_map_value = NULL;
+ _upb_Message_GetNonExtensionField(msg, field, &default_map_value, &map);
+ if (!map) {
+ map = _upb_Map_New(arena, key_size, val_size);
+ // Check again due to: https://godbolt.org/z/7WfaoKG1r
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
+ _upb_Message_SetNonExtensionField(msg, field, &map);
+ }
+ return map;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
+
+#endif // UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+
#ifndef UPB_MESSAGE_MAP_H_
#define UPB_MESSAGE_MAP_H_
@@ -1748,12 +2846,6 @@
// Removes all entries in the map.
UPB_API void upb_Map_Clear(upb_Map* map);
-typedef enum {
- kUpb_MapInsertStatus_Inserted = 0,
- kUpb_MapInsertStatus_Replaced = 1,
- kUpb_MapInsertStatus_OutOfMemory = 2,
-} upb_MapInsertStatus;
-
// Sets the given key to the given value, returning whether the key was inserted
// or replaced. If the key was inserted, then any existing iterators will be
// invalidated.
@@ -1831,769 +2923,77 @@
#endif /* UPB_MESSAGE_MAP_H_ */
+#ifndef UPB_MINI_TABLE_TAGGED_PTR_H_
+#define UPB_MINI_TABLE_TAGGED_PTR_H_
+
+#include <stdint.h>
+
+
+// Public APIs for message operations that do not depend on the schema.
+//
+// MiniTable-based accessors live in accessors.h.
+
+#ifndef UPB_MESSAGE_MESSAGE_H_
+#define UPB_MESSAGE_MESSAGE_H_
+
+#include <stddef.h>
+
+
// Must be last.
-struct upb_Map {
- // Size of key and val, based on the map type.
- // Strings are represented as '0' because they must be handled specially.
- char key_size;
- char val_size;
-
- upb_strtable table;
-};
+typedef struct upb_Extension upb_Extension;
+typedef struct upb_Message upb_Message;
#ifdef __cplusplus
extern "C" {
#endif
-// Converting between internal table representation and user values.
-//
-// _upb_map_tokey() and _upb_map_fromkey() are inverses.
-// _upb_map_tovalue() and _upb_map_fromvalue() are inverses.
-//
-// These functions account for the fact that strings are treated differently
-// from other types when stored in a map.
+// Creates a new message with the given mini_table on the given arena.
+UPB_API upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* arena);
-UPB_INLINE upb_StringView _upb_map_tokey(const void* key, size_t size) {
- if (size == UPB_MAPTYPE_STRING) {
- return *(upb_StringView*)key;
- } else {
- return upb_StringView_FromDataAndSize((const char*)key, size);
- }
-}
+// Returns a reference to the message's unknown data.
+const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len);
-UPB_INLINE void _upb_map_fromkey(upb_StringView key, void* out, size_t size) {
- if (size == UPB_MAPTYPE_STRING) {
- memcpy(out, &key, sizeof(key));
- } else {
- memcpy(out, key.data, size);
- }
-}
+// Removes partial unknown data from message.
+void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len);
-UPB_INLINE bool _upb_map_tovalue(const void* val, size_t size,
- upb_value* msgval, upb_Arena* a) {
- if (size == UPB_MAPTYPE_STRING) {
- upb_StringView* strp = (upb_StringView*)upb_Arena_Malloc(a, sizeof(*strp));
- if (!strp) return false;
- *strp = *(upb_StringView*)val;
- *msgval = upb_value_ptr(strp);
- } else {
- memcpy(msgval, val, size);
- }
- return true;
-}
-
-UPB_INLINE void _upb_map_fromvalue(upb_value val, void* out, size_t size) {
- if (size == UPB_MAPTYPE_STRING) {
- const upb_StringView* strp = (const upb_StringView*)upb_value_getptr(val);
- memcpy(out, strp, sizeof(upb_StringView));
- } else {
- memcpy(out, &val, size);
- }
-}
-
-UPB_INLINE void* _upb_map_next(const upb_Map* map, size_t* iter) {
- upb_strtable_iter it;
- it.t = &map->table;
- it.index = *iter;
- upb_strtable_next(&it);
- *iter = it.index;
- if (upb_strtable_done(&it)) return NULL;
- return (void*)str_tabent(&it);
-}
-
-UPB_INLINE void _upb_Map_Clear(upb_Map* map) {
- upb_strtable_clear(&map->table);
-}
-
-UPB_INLINE bool _upb_Map_Delete(upb_Map* map, const void* key, size_t key_size,
- upb_value* val) {
- upb_StringView k = _upb_map_tokey(key, key_size);
- return upb_strtable_remove2(&map->table, k.data, k.size, val);
-}
-
-UPB_INLINE bool _upb_Map_Get(const upb_Map* map, const void* key,
- size_t key_size, void* val, size_t val_size) {
- upb_value tabval;
- upb_StringView k = _upb_map_tokey(key, key_size);
- bool ret = upb_strtable_lookup2(&map->table, k.data, k.size, &tabval);
- if (ret && val) {
- _upb_map_fromvalue(tabval, val, val_size);
- }
- return ret;
-}
-
-UPB_INLINE upb_MapInsertStatus _upb_Map_Insert(upb_Map* map, const void* key,
- size_t key_size, void* val,
- size_t val_size, upb_Arena* a) {
- upb_StringView strkey = _upb_map_tokey(key, key_size);
- upb_value tabval = {0};
- if (!_upb_map_tovalue(val, val_size, &tabval, a)) {
- return kUpb_MapInsertStatus_OutOfMemory;
- }
-
- // TODO: add overwrite operation to minimize number of lookups.
- bool removed =
- upb_strtable_remove2(&map->table, strkey.data, strkey.size, NULL);
- if (!upb_strtable_insert(&map->table, strkey.data, strkey.size, tabval, a)) {
- return kUpb_MapInsertStatus_OutOfMemory;
- }
- return removed ? kUpb_MapInsertStatus_Replaced
- : kUpb_MapInsertStatus_Inserted;
-}
-
-UPB_INLINE size_t _upb_Map_Size(const upb_Map* map) {
- return map->table.t.count;
-}
-
-// Strings/bytes are special-cased in maps.
-extern char _upb_Map_CTypeSizeTable[12];
-
-UPB_INLINE size_t _upb_Map_CTypeSize(upb_CType ctype) {
- return _upb_Map_CTypeSizeTable[ctype];
-}
-
-// Creates a new map on the given arena with this key/value type.
-upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size);
+// Returns the number of extensions present in this message.
+size_t upb_Message_ExtensionCount(const upb_Message* msg);
#ifdef __cplusplus
} /* extern "C" */
#endif
-#endif /* UPB_COLLECTIONS_INTERNAL_MAP_H_ */
-
-/*
-** Our memory representation for parsing tables and messages themselves.
-** Functions in this file are used by generated code and possibly reflection.
-**
-** The definitions in this file are internal to upb.
-**/
-
-#ifndef UPB_MESSAGE_INTERNAL_H_
-#define UPB_MESSAGE_INTERNAL_H_
-
-#include <stdlib.h>
-#include <string.h>
-
-
-#ifndef UPB_MINI_TABLE_INTERNAL_TYPES_H_
-#define UPB_MINI_TABLE_INTERNAL_TYPES_H_
-
-typedef struct upb_Message_InternalData upb_Message_InternalData;
-
-typedef struct {
- union {
- upb_Message_InternalData* internal;
-
- // Force 8-byte alignment, since the data members may contain members that
- // require 8-byte alignment.
- double d;
- };
-} upb_Message_Internal;
-
-#endif // UPB_MINI_TABLE_INTERNAL_TYPES_H_
-
-#ifndef UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
-#define UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
-
+#endif /* UPB_MESSAGE_MESSAGE_H_ */
// Must be last.
+// When a upb_Message* is stored in a message, array, or map, it is stored in a
+// tagged form. If the tag bit is set, the referenced upb_Message is of type
+// _kUpb_MiniTable_Empty (a sentinel message type with no fields) instead of
+// that field's true message type. This forms the basis of what we call
+// "dynamic tree shaking."
+//
+// See the documentation for kUpb_DecodeOption_ExperimentalAllowUnlinked for
+// more information.
+
+typedef uintptr_t upb_TaggedMessagePtr;
+
#ifdef __cplusplus
extern "C" {
#endif
-/* Extension registry: a dynamic data structure that stores a map of:
- * (upb_MiniTable, number) -> extension info
- *
- * upb_decode() uses upb_ExtensionRegistry to look up extensions while parsing
- * binary format.
- *
- * upb_ExtensionRegistry is part of the mini-table (msglayout) family of
- * objects. Like all mini-table objects, it is suitable for reflection-less
- * builds that do not want to expose names into the binary.
- *
- * Unlike most mini-table types, upb_ExtensionRegistry requires dynamic memory
- * allocation and dynamic initialization:
- * * If reflection is being used, then upb_DefPool will construct an appropriate
- * upb_ExtensionRegistry automatically.
- * * For a mini-table only build, the user must manually construct the
- * upb_ExtensionRegistry and populate it with all of the extensions the user
- * cares about.
- * * A third alternative is to manually unpack relevant extensions after the
- * main parse is complete, similar to how Any works. This is perhaps the
- * nicest solution from the perspective of reducing dependencies, avoiding
- * dynamic memory allocation, and avoiding the need to parse uninteresting
- * extensions. The downsides are:
- * (1) parse errors are not caught during the main parse
- * (2) the CPU hit of parsing comes during access, which could cause an
- * undesirable stutter in application performance.
- *
- * Users cannot directly get or put into this map. Users can only add the
- * extensions from a generated module and pass the extension registry to the
- * binary decoder.
- *
- * A upb_DefPool provides a upb_ExtensionRegistry, so any users who use
- * reflection do not need to populate a upb_ExtensionRegistry directly.
- */
-
-typedef struct upb_ExtensionRegistry upb_ExtensionRegistry;
-
-// Creates a upb_ExtensionRegistry in the given arena.
-// The arena must outlive any use of the extreg.
-UPB_API upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
-
-UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension* e);
-
-// Adds the given extension info for the array |e| of size |count| into the
-// registry. If there are any errors, the entire array is backed out.
-// The extensions must outlive the registry.
-// Possible errors include OOM or an extension number that already exists.
-// TODO: There is currently no way to know the exact reason for failure.
-bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension** e,
- size_t count);
-
-// Looks up the extension (if any) defined for message type |t| and field
-// number |num|. Returns the extension if found, otherwise NULL.
-UPB_API const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
- const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_EXTENSION_REGISTRY_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern const float kUpb_FltInfinity;
-extern const double kUpb_Infinity;
-extern const double kUpb_NaN;
-
-/* Internal members of a upb_Message that track unknown fields and/or
- * extensions. We can change this without breaking binary compatibility. We put
- * these before the user's data. The user's upb_Message* points after the
- * upb_Message_Internal. */
-
-struct upb_Message_InternalData {
- /* Total size of this structure, including the data that follows.
- * Must be aligned to 8, which is alignof(upb_Message_Extension) */
- uint32_t size;
-
- /* Offsets relative to the beginning of this structure.
- *
- * Unknown data grows forward from the beginning to unknown_end.
- * Extension data grows backward from size to ext_begin.
- * When the two meet, we're out of data and have to realloc.
- *
- * If we imagine that the final member of this struct is:
- * char data[size - overhead]; // overhead =
- * sizeof(upb_Message_InternalData)
- *
- * Then we have:
- * unknown data: data[0 .. (unknown_end - overhead)]
- * extensions data: data[(ext_begin - overhead) .. (size - overhead)] */
- uint32_t unknown_end;
- uint32_t ext_begin;
- /* Data follows, as if there were an array:
- * char data[size - sizeof(upb_Message_InternalData)]; */
-};
-
-/* Maps upb_CType -> memory size. */
-extern char _upb_CTypeo_size[12];
-
-UPB_INLINE size_t upb_msg_sizeof(const upb_MiniTable* t) {
- return t->size + sizeof(upb_Message_Internal);
+// Users who enable unlinked sub-messages must use this to test whether a
+// message is empty before accessing it. If a message is empty, it must be
+// first promoted using the interfaces in message/promote.h.
+UPB_INLINE bool upb_TaggedMessagePtr_IsEmpty(upb_TaggedMessagePtr ptr) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr);
}
-// Inline version upb_Message_New(), for internal use.
-UPB_INLINE upb_Message* _upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- size_t size = upb_msg_sizeof(mini_table);
- void* mem = upb_Arena_Malloc(arena, size + sizeof(upb_Message_Internal));
- if (UPB_UNLIKELY(!mem)) return NULL;
- upb_Message* msg = UPB_PTR_AT(mem, sizeof(upb_Message_Internal), upb_Message);
- memset(mem, 0, size);
- return msg;
-}
-
-UPB_INLINE upb_Message_Internal* upb_Message_Getinternal(
- const upb_Message* msg) {
- ptrdiff_t size = sizeof(upb_Message_Internal);
- return (upb_Message_Internal*)((char*)msg - size);
-}
-
-// Discards the unknown fields for this message only.
-void _upb_Message_DiscardUnknown_shallow(upb_Message* msg);
-
-// Adds unknown data (serialized protobuf data) to the given message.
-// The data is copied into the message instance.
-bool _upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MESSAGE_INTERNAL_H_ */
-
-// Must be last.
-
-#if defined(__GNUC__) && !defined(__clang__)
-// GCC raises incorrect warnings in these functions. It thinks that we are
-// overrunning buffers, but we carefully write the functions in this file to
-// guarantee that this is impossible. GCC gets this wrong due it its failure
-// to perform constant propagation as we expect:
-// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108217
-// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226
-//
-// Unfortunately this also indicates that GCC is not optimizing away the
-// switch() in cases where it should be, compromising the performance.
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Warray-bounds"
-#pragma GCC diagnostic ignored "-Wstringop-overflow"
-#if __GNUC__ >= 11
-#pragma GCC diagnostic ignored "-Wstringop-overread"
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// LINT.IfChange(presence_logic)
-
-// Hasbit access ///////////////////////////////////////////////////////////////
-
-UPB_INLINE size_t _upb_hasbit_ofs(size_t idx) { return idx / 8; }
-
-UPB_INLINE char _upb_hasbit_mask(size_t idx) { return 1 << (idx % 8); }
-
-UPB_INLINE bool _upb_hasbit(const upb_Message* msg, size_t idx) {
- return (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), const char) &
- _upb_hasbit_mask(idx)) != 0;
-}
-
-UPB_INLINE void _upb_sethas(const upb_Message* msg, size_t idx) {
- (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), char)) |= _upb_hasbit_mask(idx);
-}
-
-UPB_INLINE void _upb_clearhas(const upb_Message* msg, size_t idx) {
- (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), char)) &= ~_upb_hasbit_mask(idx);
-}
-
-UPB_INLINE size_t _upb_Message_Hasidx(const upb_MiniTableField* f) {
- UPB_ASSERT(f->presence > 0);
- return f->presence;
-}
-
-UPB_INLINE bool _upb_hasbit_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- return _upb_hasbit(msg, _upb_Message_Hasidx(f));
-}
-
-UPB_INLINE void _upb_sethas_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- _upb_sethas(msg, _upb_Message_Hasidx(f));
-}
-
-// Oneof case access ///////////////////////////////////////////////////////////
-
-UPB_INLINE size_t _upb_oneofcase_ofs(const upb_MiniTableField* f) {
- UPB_ASSERT(f->presence < 0);
- return ~(ptrdiff_t)f->presence;
-}
-
-UPB_INLINE uint32_t* _upb_oneofcase_field(upb_Message* msg,
- const upb_MiniTableField* f) {
- return UPB_PTR_AT(msg, _upb_oneofcase_ofs(f), uint32_t);
-}
-
-UPB_INLINE uint32_t _upb_getoneofcase_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- return *_upb_oneofcase_field((upb_Message*)msg, f);
-}
-
-// LINT.ThenChange(GoogleInternalName2)
-
-UPB_INLINE bool _upb_MiniTableField_InOneOf(const upb_MiniTableField* field) {
- return field->presence < 0;
-}
-
-UPB_INLINE void* _upb_MiniTableField_GetPtr(upb_Message* msg,
- const upb_MiniTableField* field) {
- return (char*)msg + field->offset;
-}
-
-UPB_INLINE const void* _upb_MiniTableField_GetConstPtr(
- const upb_Message* msg, const upb_MiniTableField* field) {
- return (char*)msg + field->offset;
-}
-
-UPB_INLINE void _upb_Message_SetPresence(upb_Message* msg,
- const upb_MiniTableField* field) {
- if (field->presence > 0) {
- _upb_sethas_field(msg, field);
- } else if (_upb_MiniTableField_InOneOf(field)) {
- *_upb_oneofcase_field(msg, field) = field->number;
- }
-}
-
-UPB_INLINE bool _upb_MiniTable_ValueIsNonZero(const void* default_val,
- const upb_MiniTableField* field) {
- char zero[16] = {0};
- switch (_upb_MiniTableField_GetRep(field)) {
- case kUpb_FieldRep_1Byte:
- return memcmp(&zero, default_val, 1) != 0;
- case kUpb_FieldRep_4Byte:
- return memcmp(&zero, default_val, 4) != 0;
- case kUpb_FieldRep_8Byte:
- return memcmp(&zero, default_val, 8) != 0;
- case kUpb_FieldRep_StringView: {
- const upb_StringView* sv = (const upb_StringView*)default_val;
- return sv->size != 0;
- }
- }
- UPB_UNREACHABLE();
-}
-
-UPB_INLINE void _upb_MiniTable_CopyFieldData(void* to, const void* from,
- const upb_MiniTableField* field) {
- switch (_upb_MiniTableField_GetRep(field)) {
- case kUpb_FieldRep_1Byte:
- memcpy(to, from, 1);
- return;
- case kUpb_FieldRep_4Byte:
- memcpy(to, from, 4);
- return;
- case kUpb_FieldRep_8Byte:
- memcpy(to, from, 8);
- return;
- case kUpb_FieldRep_StringView: {
- memcpy(to, from, sizeof(upb_StringView));
- return;
- }
- }
- UPB_UNREACHABLE();
-}
-
-UPB_INLINE size_t
-_upb_MiniTable_ElementSizeLg2(const upb_MiniTableField* field) {
- const unsigned char table[] = {
- 0,
- 3, // kUpb_FieldType_Double = 1,
- 2, // kUpb_FieldType_Float = 2,
- 3, // kUpb_FieldType_Int64 = 3,
- 3, // kUpb_FieldType_UInt64 = 4,
- 2, // kUpb_FieldType_Int32 = 5,
- 3, // kUpb_FieldType_Fixed64 = 6,
- 2, // kUpb_FieldType_Fixed32 = 7,
- 0, // kUpb_FieldType_Bool = 8,
- UPB_SIZE(3, 4), // kUpb_FieldType_String = 9,
- UPB_SIZE(2, 3), // kUpb_FieldType_Group = 10,
- UPB_SIZE(2, 3), // kUpb_FieldType_Message = 11,
- UPB_SIZE(3, 4), // kUpb_FieldType_Bytes = 12,
- 2, // kUpb_FieldType_UInt32 = 13,
- 2, // kUpb_FieldType_Enum = 14,
- 2, // kUpb_FieldType_SFixed32 = 15,
- 3, // kUpb_FieldType_SFixed64 = 16,
- 2, // kUpb_FieldType_SInt32 = 17,
- 3, // kUpb_FieldType_SInt64 = 18,
- };
- return table[field->UPB_PRIVATE(descriptortype)];
-}
-
-// Here we define universal getter/setter functions for message fields.
-// These look very branchy and inefficient, but as long as the MiniTableField
-// values are known at compile time, all the branches are optimized away and
-// we are left with ideal code. This can happen either through through
-// literals or UPB_ASSUME():
-//
-// // Via struct literals.
-// bool FooMessage_set_bool_field(const upb_Message* msg, bool val) {
-// const upb_MiniTableField field = {1, 0, 0, /* etc... */};
-// // All value in "field" are compile-time known.
-// _upb_Message_SetNonExtensionField(msg, &field, &value);
-// }
-//
-// // Via UPB_ASSUME().
-// UPB_INLINE bool upb_Message_SetBool(upb_Message* msg,
-// const upb_MiniTableField* field,
-// bool value, upb_Arena* a) {
-// UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bool);
-// UPB_ASSUME(!upb_IsRepeatedOrMap(field));
-// UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
-// _upb_Message_SetField(msg, field, &value, a);
-// }
-//
-// As a result, we can use these universal getters/setters for *all* message
-// accessors: generated code, MiniTable accessors, and reflection. The only
-// exception is the binary encoder/decoder, which need to be a bit more clever
-// about how they read/write the message data, for efficiency.
-//
-// These functions work on both extensions and non-extensions. If the field
-// of a setter is known to be a non-extension, the arena may be NULL and the
-// returned bool value may be ignored since it will always succeed.
-
-UPB_INLINE bool _upb_Message_HasExtensionField(
- const upb_Message* msg, const upb_MiniTableExtension* ext) {
- UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->field));
- return _upb_Message_Getext(msg, ext) != NULL;
-}
-
-UPB_INLINE bool _upb_Message_HasNonExtensionField(
- const upb_Message* msg, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_HasPresence(field));
- UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- if (_upb_MiniTableField_InOneOf(field)) {
- return _upb_getoneofcase_field(msg, field) == field->number;
- } else {
- return _upb_hasbit_field(msg, field);
- }
-}
-
-static UPB_FORCEINLINE void _upb_Message_GetNonExtensionField(
- const upb_Message* msg, const upb_MiniTableField* field,
- const void* default_val, void* val) {
- UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- if ((_upb_MiniTableField_InOneOf(field) ||
- _upb_MiniTable_ValueIsNonZero(default_val, field)) &&
- !_upb_Message_HasNonExtensionField(msg, field)) {
- _upb_MiniTable_CopyFieldData(val, default_val, field);
- return;
- }
- _upb_MiniTable_CopyFieldData(val, _upb_MiniTableField_GetConstPtr(msg, field),
- field);
-}
-
-UPB_INLINE void _upb_Message_GetExtensionField(
- const upb_Message* msg, const upb_MiniTableExtension* mt_ext,
- const void* default_val, void* val) {
- UPB_ASSUME(upb_MiniTableField_IsExtension(&mt_ext->field));
- const upb_Message_Extension* ext = _upb_Message_Getext(msg, mt_ext);
- if (ext) {
- _upb_MiniTable_CopyFieldData(val, &ext->data, &mt_ext->field);
- } else {
- _upb_MiniTable_CopyFieldData(val, default_val, &mt_ext->field);
- }
-}
-
-UPB_INLINE void _upb_Message_GetField(const upb_Message* msg,
- const upb_MiniTableField* field,
- const void* default_val, void* val) {
- if (upb_MiniTableField_IsExtension(field)) {
- _upb_Message_GetExtensionField(msg, (upb_MiniTableExtension*)field,
- default_val, val);
- } else {
- _upb_Message_GetNonExtensionField(msg, field, default_val, val);
- }
-}
-
-UPB_INLINE void _upb_Message_SetNonExtensionField(
- upb_Message* msg, const upb_MiniTableField* field, const void* val) {
- UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- _upb_Message_SetPresence(msg, field);
- _upb_MiniTable_CopyFieldData(_upb_MiniTableField_GetPtr(msg, field), val,
- field);
-}
-
-UPB_INLINE bool _upb_Message_SetExtensionField(
- upb_Message* msg, const upb_MiniTableExtension* mt_ext, const void* val,
- upb_Arena* a) {
- UPB_ASSERT(a);
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
- if (!ext) return false;
- _upb_MiniTable_CopyFieldData(&ext->data, val, &mt_ext->field);
- return true;
-}
-
-UPB_INLINE bool _upb_Message_SetField(upb_Message* msg,
- const upb_MiniTableField* field,
- const void* val, upb_Arena* a) {
- if (upb_MiniTableField_IsExtension(field)) {
- const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)field;
- return _upb_Message_SetExtensionField(msg, ext, val, a);
- } else {
- _upb_Message_SetNonExtensionField(msg, field, val);
- return true;
- }
-}
-
-UPB_INLINE void _upb_Message_ClearExtensionField(
- upb_Message* msg, const upb_MiniTableExtension* ext_l) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (!in->internal) return;
- const upb_Message_Extension* base =
- UPB_PTR_AT(in->internal, in->internal->ext_begin, upb_Message_Extension);
- upb_Message_Extension* ext =
- (upb_Message_Extension*)_upb_Message_Getext(msg, ext_l);
- if (ext) {
- *ext = *base;
- in->internal->ext_begin += sizeof(upb_Message_Extension);
- }
-}
-
-UPB_INLINE void _upb_Message_ClearNonExtensionField(
- upb_Message* msg, const upb_MiniTableField* field) {
- if (field->presence > 0) {
- _upb_clearhas(msg, _upb_Message_Hasidx(field));
- } else if (_upb_MiniTableField_InOneOf(field)) {
- uint32_t* oneof_case = _upb_oneofcase_field(msg, field);
- if (*oneof_case != field->number) return;
- *oneof_case = 0;
- }
- const char zeros[16] = {0};
- _upb_MiniTable_CopyFieldData(_upb_MiniTableField_GetPtr(msg, field), zeros,
- field);
-}
-
-UPB_INLINE void _upb_Message_AssertMapIsUntagged(
- const upb_Message* msg, const upb_MiniTableField* field) {
- UPB_UNUSED(msg);
- _upb_MiniTableField_CheckIsMap(field);
-#ifndef NDEBUG
- upb_TaggedMessagePtr default_val = 0;
- upb_TaggedMessagePtr tagged;
- _upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
- UPB_ASSERT(!upb_TaggedMessagePtr_IsEmpty(tagged));
-#endif
-}
-
-UPB_INLINE upb_Map* _upb_Message_GetOrCreateMutableMap(
- upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
- size_t val_size, upb_Arena* arena) {
- _upb_MiniTableField_CheckIsMap(field);
- _upb_Message_AssertMapIsUntagged(msg, field);
- upb_Map* map = NULL;
- upb_Map* default_map_value = NULL;
- _upb_Message_GetNonExtensionField(msg, field, &default_map_value, &map);
- if (!map) {
- map = _upb_Map_New(arena, key_size, val_size);
- // Check again due to: https://godbolt.org/z/7WfaoKG1r
- _upb_MiniTableField_CheckIsMap(field);
- _upb_Message_SetNonExtensionField(msg, field, &map);
- }
- return map;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#if defined(__GNUC__) && !defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
-
-#endif // UPB_MESSAGE_INTERNAL_ACCESSORS_H_
-
-#ifndef UPB_MESSAGE_INTERNAL_ARRAY_H_
-#define UPB_MESSAGE_INTERNAL_ARRAY_H_
-
-#include <string.h>
-
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// LINT.IfChange(struct_definition)
-// Our internal representation for repeated fields.
-struct upb_Array {
- uintptr_t data; /* Tagged ptr: low 3 bits of ptr are lg2(elem size). */
- size_t size; /* The number of elements in the array. */
- size_t capacity; /* Allocated storage. Measured in elements. */
-};
-// LINT.ThenChange(GoogleInternalName1)
-
-UPB_INLINE size_t _upb_Array_ElementSizeLg2(const upb_Array* arr) {
- size_t ret = arr->data & 7;
- UPB_ASSERT(ret <= 4);
- return ret;
-}
-
-UPB_INLINE const void* _upb_array_constptr(const upb_Array* arr) {
- _upb_Array_ElementSizeLg2(arr); // Check assertion.
- return (void*)(arr->data & ~(uintptr_t)7);
-}
-
-UPB_INLINE uintptr_t _upb_array_tagptr(void* ptr, int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- return (uintptr_t)ptr | elem_size_lg2;
-}
-
-UPB_INLINE void* _upb_array_ptr(upb_Array* arr) {
- return (void*)_upb_array_constptr(arr);
-}
-
-UPB_INLINE uintptr_t _upb_tag_arrptr(void* ptr, int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- UPB_ASSERT(((uintptr_t)ptr & 7) == 0);
- return (uintptr_t)ptr | (unsigned)elem_size_lg2;
-}
-
-extern const char _upb_Array_CTypeSizeLg2Table[];
-
-UPB_INLINE size_t _upb_Array_CTypeSizeLg2(upb_CType ctype) {
- return _upb_Array_CTypeSizeLg2Table[ctype];
-}
-
-UPB_INLINE upb_Array* _upb_Array_New(upb_Arena* a, size_t init_capacity,
- int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- const size_t arr_size = UPB_ALIGN_UP(sizeof(upb_Array), UPB_MALLOC_ALIGN);
- const size_t bytes = arr_size + (init_capacity << elem_size_lg2);
- upb_Array* arr = (upb_Array*)upb_Arena_Malloc(a, bytes);
- if (!arr) return NULL;
- arr->data = _upb_tag_arrptr(UPB_PTR_AT(arr, arr_size, void), elem_size_lg2);
- arr->size = 0;
- arr->capacity = init_capacity;
- return arr;
-}
-
-// Resizes the capacity of the array to be at least min_size.
-bool _upb_array_realloc(upb_Array* arr, size_t min_size, upb_Arena* arena);
-
-UPB_INLINE bool _upb_array_reserve(upb_Array* arr, size_t size,
- upb_Arena* arena) {
- if (arr->capacity < size) return _upb_array_realloc(arr, size, arena);
- return true;
-}
-
-// Resize without initializing new elements.
-UPB_INLINE bool _upb_Array_ResizeUninitialized(upb_Array* arr, size_t size,
- upb_Arena* arena) {
- UPB_ASSERT(size <= arr->size || arena); // Allow NULL arena when shrinking.
- if (!_upb_array_reserve(arr, size, arena)) return false;
- arr->size = size;
- return true;
-}
-
-// This function is intended for situations where elem_size is compile-time
-// constant or a known expression of the form (1 << lg2), so that the expression
-// i*elem_size does not result in an actual multiplication.
-UPB_INLINE void _upb_Array_Set(upb_Array* arr, size_t i, const void* data,
- size_t elem_size) {
- UPB_ASSERT(i < arr->size);
- UPB_ASSERT(elem_size == 1U << _upb_Array_ElementSizeLg2(arr));
- char* arr_data = (char*)_upb_array_ptr(arr);
- memcpy(arr_data + (i * elem_size), data, elem_size);
-}
-
-UPB_INLINE void _upb_array_detach(const void* msg, size_t ofs) {
- *UPB_PTR_AT(msg, ofs, upb_Array*) = NULL;
+UPB_INLINE upb_Message* upb_TaggedMessagePtr_GetNonEmptyMessage(
+ upb_TaggedMessagePtr ptr) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetNonEmptyMessage)(ptr);
}
#ifdef __cplusplus
@@ -2601,7 +3001,50 @@
#endif
-#endif /* UPB_MESSAGE_INTERNAL_ARRAY_H_ */
+#endif /* UPB_MINI_TABLE_TAGGED_PTR_H_ */
+
+#ifndef UPB_MINI_TABLE_SUB_H_
+#define UPB_MINI_TABLE_SUB_H_
+
+
+// Must be last.
+
+typedef union upb_MiniTableSub upb_MiniTableSub;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Constructors
+
+UPB_API_INLINE upb_MiniTableSub
+upb_MiniTableSub_FromEnum(const upb_MiniTableEnum* subenum) {
+ return UPB_PRIVATE(_upb_MiniTableSub_FromEnum)(subenum);
+}
+
+UPB_API_INLINE upb_MiniTableSub
+upb_MiniTableSub_FromMessage(const upb_MiniTable* submsg) {
+ return UPB_PRIVATE(_upb_MiniTableSub_FromMessage)(submsg);
+}
+
+// Getters
+
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTableSub_Enum(
+ upb_MiniTableSub sub) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Enum)(sub);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableSub_Message(
+ upb_MiniTableSub sub) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Message)(sub);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_SUB_H_ */
// Must be last.
@@ -2638,28 +3081,62 @@
UPB_API_INLINE uint32_t upb_Message_WhichOneofFieldNumber(
const upb_Message* message, const upb_MiniTableField* oneof_field) {
- UPB_ASSUME(_upb_MiniTableField_InOneOf(oneof_field));
- return _upb_getoneofcase_field(message, oneof_field);
+ UPB_ASSUME(upb_MiniTableField_IsInOneof(oneof_field));
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(message, oneof_field);
+}
+
+// NOTE: The default_val is only used for fields that support presence.
+// For repeated/map fields, the resulting upb_Array*/upb_Map* can be NULL if a
+// upb_Array/upb_Map has not been allocated yet. Array/map fields do not have
+// presence, so this is semantically identical to a pointer to an empty
+// array/map, and must be treated the same for all semantic purposes.
+UPB_INLINE upb_MessageValue
+upb_Message_GetField(const upb_Message* msg, const upb_MiniTableField* field,
+ upb_MessageValue default_val) {
+ upb_MessageValue ret;
+ if (upb_MiniTableField_IsExtension(field)) {
+ _upb_Message_GetExtensionField(msg, (upb_MiniTableExtension*)field,
+ &default_val, &ret);
+ } else {
+ _upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
+ }
+ return ret;
+}
+
+UPB_INLINE bool upb_Message_SetField(upb_Message* msg,
+ const upb_MiniTableField* field,
+ upb_MessageValue val, upb_Arena* a) {
+ if (upb_MiniTableField_IsExtension(field)) {
+ const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)field;
+ return _upb_Message_SetExtensionField(msg, ext, &val, a);
+ } else {
+ _upb_Message_SetNonExtensionField(msg, field, &val);
+ return true;
+ }
}
UPB_API_INLINE bool upb_Message_GetBool(const upb_Message* msg,
const upb_MiniTableField* field,
bool default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Bool);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- bool ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_1Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue def;
+ def.bool_val = default_val;
+ return upb_Message_GetField(msg, field, def).bool_val;
}
UPB_API_INLINE bool upb_Message_SetBool(upb_Message* msg,
const upb_MiniTableField* field,
bool value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Bool);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_1Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.bool_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE int32_t upb_Message_GetInt32(const upb_Message* msg,
@@ -2667,11 +3144,13 @@
int32_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int32 ||
upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- int32_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.int32_val = default_val;
+ return upb_Message_GetField(msg, field, def).int32_val;
}
UPB_API_INLINE bool upb_Message_SetInt32(upb_Message* msg,
@@ -2679,37 +3158,46 @@
int32_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int32 ||
upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.int32_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE uint32_t upb_Message_GetUInt32(const upb_Message* msg,
const upb_MiniTableField* field,
uint32_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt32);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- uint32_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.uint32_val = default_val;
+ return upb_Message_GetField(msg, field, def).uint32_val;
}
UPB_API_INLINE bool upb_Message_SetUInt32(upb_Message* msg,
const upb_MiniTableField* field,
uint32_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt32);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.uint32_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE void upb_Message_SetClosedEnum(
upb_Message* msg, const upb_MiniTable* msg_mini_table,
const upb_MiniTableField* field, int32_t value) {
UPB_ASSERT(upb_MiniTableField_IsClosedEnum(field));
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
UPB_ASSERT(upb_MiniTableEnum_CheckValue(
upb_MiniTable_GetSubEnumTable(msg_mini_table, field), value));
_upb_Message_SetNonExtensionField(msg, field, &value);
@@ -2717,94 +3205,116 @@
UPB_API_INLINE int64_t upb_Message_GetInt64(const upb_Message* msg,
const upb_MiniTableField* field,
- uint64_t default_val) {
+ int64_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- int64_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.int64_val = default_val;
+ return upb_Message_GetField(msg, field, def).int64_val;
}
UPB_API_INLINE bool upb_Message_SetInt64(upb_Message* msg,
const upb_MiniTableField* field,
int64_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.int64_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE uint64_t upb_Message_GetUInt64(const upb_Message* msg,
const upb_MiniTableField* field,
uint64_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- uint64_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.uint64_val = default_val;
+ return upb_Message_GetField(msg, field, def).uint64_val;
}
UPB_API_INLINE bool upb_Message_SetUInt64(upb_Message* msg,
const upb_MiniTableField* field,
uint64_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.uint64_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE float upb_Message_GetFloat(const upb_Message* msg,
const upb_MiniTableField* field,
float default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Float);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- float ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.float_val = default_val;
+ return upb_Message_GetField(msg, field, def).float_val;
}
UPB_API_INLINE bool upb_Message_SetFloat(upb_Message* msg,
const upb_MiniTableField* field,
float value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Float);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.float_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE double upb_Message_GetDouble(const upb_Message* msg,
const upb_MiniTableField* field,
double default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Double);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- double ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.double_val = default_val;
+ return upb_Message_GetField(msg, field, def).double_val;
}
UPB_API_INLINE bool upb_Message_SetDouble(upb_Message* msg,
const upb_MiniTableField* field,
double value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Double);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.double_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE upb_StringView
upb_Message_GetString(const upb_Message* msg, const upb_MiniTableField* field,
- upb_StringView def_val) {
+ upb_StringView default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_String ||
upb_MiniTableField_CType(field) == kUpb_CType_Bytes);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_StringView);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- upb_StringView ret;
- _upb_Message_GetField(msg, field, &def_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_StringView);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.str_val = default_val;
+ return upb_Message_GetField(msg, field, def).str_val;
}
UPB_API_INLINE bool upb_Message_SetString(upb_Message* msg,
@@ -2812,18 +3322,21 @@
upb_StringView value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_String ||
upb_MiniTableField_CType(field) == kUpb_CType_Bytes);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_StringView);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_StringView);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.str_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE upb_TaggedMessagePtr upb_Message_GetTaggedMessagePtr(
const upb_Message* msg, const upb_MiniTableField* field,
upb_Message* default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) ==
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte));
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
upb_TaggedMessagePtr tagged;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
return tagged;
@@ -2844,10 +3357,11 @@
upb_Message* msg, const upb_MiniTable* mini_table,
const upb_MiniTableField* field, upb_TaggedMessagePtr sub_message) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) ==
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte));
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- UPB_ASSERT(mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ UPB_ASSERT(upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]));
_upb_Message_SetNonExtensionField(msg, field, &sub_message);
}
@@ -2856,7 +3370,8 @@
const upb_MiniTableField* field,
upb_Message* sub_message) {
_upb_Message_SetTaggedMessagePtr(
- msg, mini_table, field, _upb_TaggedMessagePtr_Pack(sub_message, false));
+ msg, mini_table, field,
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(sub_message, false));
}
UPB_API_INLINE upb_Message* upb_Message_GetOrCreateMutableMessage(
@@ -2864,21 +3379,22 @@
const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSERT(arena);
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- upb_Message* sub_message = *UPB_PTR_AT(msg, field->offset, upb_Message*);
+ upb_Message* sub_message =
+ *UPB_PTR_AT(msg, field->UPB_ONLYBITS(offset), upb_Message*);
if (!sub_message) {
- const upb_MiniTable* sub_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* sub_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]);
UPB_ASSERT(sub_mini_table);
sub_message = _upb_Message_New(sub_mini_table, arena);
- *UPB_PTR_AT(msg, field->offset, upb_Message*) = sub_message;
- _upb_Message_SetPresence(msg, field);
+ *UPB_PTR_AT(msg, field->UPB_ONLYBITS(offset), upb_Message*) = sub_message;
+ UPB_PRIVATE(_upb_Message_SetPresence)(msg, field);
}
return sub_message;
}
UPB_API_INLINE const upb_Array* upb_Message_GetArray(
const upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* ret;
const upb_Array* default_val = NULL;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
@@ -2887,20 +3403,23 @@
UPB_API_INLINE upb_Array* upb_Message_GetMutableArray(
upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
return (upb_Array*)upb_Message_GetArray(msg, field);
}
UPB_API_INLINE upb_Array* upb_Message_GetOrCreateMutableArray(
upb_Message* msg, const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSERT(arena);
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* array = upb_Message_GetMutableArray(msg, field);
if (!array) {
- array = _upb_Array_New(arena, 4, _upb_MiniTable_ElementSizeLg2(field));
+ array = UPB_PRIVATE(_upb_Array_New)(
+ arena, 4, UPB_PRIVATE(_upb_MiniTableField_ElemSizeLg2)(field));
// Check again due to: https://godbolt.org/z/7WfaoKG1r
- _upb_MiniTableField_CheckIsArray(field);
- _upb_Message_SetField(msg, field, &array, arena);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
+ upb_MessageValue val;
+ val.array_val = array;
+ upb_Message_SetField(msg, field, val, arena);
}
return array;
}
@@ -2908,7 +3427,7 @@
UPB_API_INLINE void* upb_Message_ResizeArrayUninitialized(
upb_Message* msg, const upb_MiniTableField* field, size_t size,
upb_Arena* arena) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(arr, size, arena)) return NULL;
return _upb_array_ptr(arr);
@@ -2916,7 +3435,7 @@
UPB_API_INLINE const upb_Map* upb_Message_GetMap(
const upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsMap(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
_upb_Message_AssertMapIsUntagged(msg, field);
upb_Map* ret;
const upb_Map* default_val = NULL;
@@ -2934,9 +3453,9 @@
const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
const upb_MiniTableField* map_entry_key_field =
- &map_entry_mini_table->fields[0];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[0];
const upb_MiniTableField* map_entry_value_field =
- &map_entry_mini_table->fields[1];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[1];
return _upb_Message_GetOrCreateMutableMap(
msg, field,
_upb_Map_CTypeSize(upb_MiniTableField_CType(map_entry_key_field)),
@@ -2945,15 +3464,9 @@
}
// Updates a map entry given an entry message.
-upb_MapInsertStatus upb_Message_InsertMapEntry(upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* map_entry_message,
- upb_Arena* arena);
-
-// Compares two messages by serializing them and calling memcmp().
-bool upb_Message_IsExactlyEqual(const upb_Message* m1, const upb_Message* m2,
- const upb_MiniTable* layout);
+bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
+ const upb_MiniTableField* field,
+ upb_Message* map_entry_message, upb_Arena* arena);
#ifdef __cplusplus
} /* extern "C" */
@@ -3015,14 +3528,6 @@
#define UPB_MINI_TABLE_DECODE_H_
-#ifndef UPB_MINI_TABLE_SUB_H_
-#define UPB_MINI_TABLE_SUB_H_
-
-
-typedef union upb_MiniTableSub upb_MiniTableSub;
-
-#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
-
// Export the newer headers, for legacy users. New users should include the
// more specific headers directly.
// IWYU pragma: begin_exports
@@ -3182,8 +3687,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_Build(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.submsg = NULL;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(NULL);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -3191,8 +3695,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildMessage(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTable* submsg, upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.submsg = submsg;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(submsg);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -3200,8 +3703,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildEnum(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTableEnum* subenum, upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.subenum = subenum;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromEnum(subenum);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -3224,6 +3726,80 @@
#endif /* UPB_MINI_TABLE_DECODE_H_ */
+#ifndef UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
+#define UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Extension registry: a dynamic data structure that stores a map of:
+ * (upb_MiniTable, number) -> extension info
+ *
+ * upb_decode() uses upb_ExtensionRegistry to look up extensions while parsing
+ * binary format.
+ *
+ * upb_ExtensionRegistry is part of the mini-table (msglayout) family of
+ * objects. Like all mini-table objects, it is suitable for reflection-less
+ * builds that do not want to expose names into the binary.
+ *
+ * Unlike most mini-table types, upb_ExtensionRegistry requires dynamic memory
+ * allocation and dynamic initialization:
+ * * If reflection is being used, then upb_DefPool will construct an appropriate
+ * upb_ExtensionRegistry automatically.
+ * * For a mini-table only build, the user must manually construct the
+ * upb_ExtensionRegistry and populate it with all of the extensions the user
+ * cares about.
+ * * A third alternative is to manually unpack relevant extensions after the
+ * main parse is complete, similar to how Any works. This is perhaps the
+ * nicest solution from the perspective of reducing dependencies, avoiding
+ * dynamic memory allocation, and avoiding the need to parse uninteresting
+ * extensions. The downsides are:
+ * (1) parse errors are not caught during the main parse
+ * (2) the CPU hit of parsing comes during access, which could cause an
+ * undesirable stutter in application performance.
+ *
+ * Users cannot directly get or put into this map. Users can only add the
+ * extensions from a generated module and pass the extension registry to the
+ * binary decoder.
+ *
+ * A upb_DefPool provides a upb_ExtensionRegistry, so any users who use
+ * reflection do not need to populate a upb_ExtensionRegistry directly.
+ */
+
+typedef struct upb_ExtensionRegistry upb_ExtensionRegistry;
+
+// Creates a upb_ExtensionRegistry in the given arena.
+// The arena must outlive any use of the extreg.
+UPB_API upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
+
+UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension* e);
+
+// Adds the given extension info for the array |e| of size |count| into the
+// registry. If there are any errors, the entire array is backed out.
+// The extensions must outlive the registry.
+// Possible errors include OOM or an extension number that already exists.
+// TODO: There is currently no way to know the exact reason for failure.
+bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension** e,
+ size_t count);
+
+// Looks up the extension (if any) defined for message type |t| and field
+// number |num|. Returns the extension if found, otherwise NULL.
+UPB_API const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
+ const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_EXTENSION_REGISTRY_H_ */
+
#ifndef UPB_MINI_TABLE_FILE_H_
#define UPB_MINI_TABLE_FILE_H_
@@ -3231,23 +3807,102 @@
#ifndef UPB_MINI_TABLE_INTERNAL_FILE_H_
#define UPB_MINI_TABLE_INTERNAL_FILE_H_
-
// Must be last.
struct upb_MiniTableFile {
- const struct upb_MiniTable** msgs;
- const struct upb_MiniTableEnum** enums;
- const struct upb_MiniTableExtension** exts;
- int msg_count;
- int enum_count;
- int ext_count;
+ const struct upb_MiniTable** UPB_PRIVATE(msgs);
+ const struct upb_MiniTableEnum** UPB_PRIVATE(enums);
+ const struct upb_MiniTableExtension** UPB_PRIVATE(exts);
+ int UPB_PRIVATE(msg_count);
+ int UPB_PRIVATE(enum_count);
+ int UPB_PRIVATE(ext_count);
};
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(enum_count);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(ext_count);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(msg_count);
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableFile_Enum)(
+ const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(enum_count));
+ return f->UPB_PRIVATE(enums)[i];
+}
+
+UPB_INLINE const struct upb_MiniTableExtension* UPB_PRIVATE(
+ _upb_MiniTableFile_Extension)(const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(ext_count));
+ return f->UPB_PRIVATE(exts)[i];
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableFile_Message)(
+ const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(msg_count));
+ return f->UPB_PRIVATE(msgs)[i];
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
#endif /* UPB_MINI_TABLE_INTERNAL_FILE_H_ */
+// Must be last.
+
typedef struct upb_MiniTableFile upb_MiniTableFile;
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTableFile_Enum(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Enum)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_EnumCount(const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(f);
+}
+
+UPB_API_INLINE const upb_MiniTableExtension* upb_MiniTableFile_Extension(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Extension)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_ExtensionCount(
+ const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(f);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableFile_Message(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Message)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_MessageCount(const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(f);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
#endif /* UPB_MINI_TABLE_FILE_H_ */
// upb_decode: parsing into a upb_Message using a upb_MiniTable.
@@ -3370,6 +4025,72 @@
#endif /* UPB_WIRE_DECODE_H_ */
+// upb_Encode: parsing from a upb_Message using a upb_MiniTable.
+
+#ifndef UPB_WIRE_ENCODE_H_
+#define UPB_WIRE_ENCODE_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+ /* If set, the results of serializing will be deterministic across all
+ * instances of this binary. There are no guarantees across different
+ * binary builds.
+ *
+ * If your proto contains maps, the encoder will need to malloc()/free()
+ * memory during encode. */
+ kUpb_EncodeOption_Deterministic = 1,
+
+ // When set, unknown fields are not printed.
+ kUpb_EncodeOption_SkipUnknown = 2,
+
+ // When set, the encode will fail if any required fields are missing.
+ kUpb_EncodeOption_CheckRequired = 4,
+};
+
+typedef enum {
+ kUpb_EncodeStatus_Ok = 0,
+ kUpb_EncodeStatus_OutOfMemory = 1, // Arena alloc failed
+ kUpb_EncodeStatus_MaxDepthExceeded = 2,
+
+ // kUpb_EncodeOption_CheckRequired failed but the parse otherwise succeeded.
+ kUpb_EncodeStatus_MissingRequired = 3,
+} upb_EncodeStatus;
+
+UPB_INLINE uint32_t upb_EncodeOptions_MaxDepth(uint16_t depth) {
+ return (uint32_t)depth << 16;
+}
+
+UPB_INLINE uint16_t upb_EncodeOptions_GetMaxDepth(uint32_t options) {
+ return options >> 16;
+}
+
+// Enforce an upper bound on recursion depth.
+UPB_INLINE int upb_Encode_LimitDepth(uint32_t encode_options, uint32_t limit) {
+ uint32_t max_depth = upb_EncodeOptions_GetMaxDepth(encode_options);
+ if (max_depth > limit) max_depth = limit;
+ return upb_EncodeOptions_MaxDepth(max_depth) | (encode_options & 0xffff);
+}
+
+UPB_API upb_EncodeStatus upb_Encode(const upb_Message* msg,
+ const upb_MiniTable* l, int options,
+ upb_Arena* arena, char** buf, size_t* size);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_WIRE_ENCODE_H_ */
+
// These are the specialized field parser functions for the fast parser.
// Generated tables will refer to these by name.
//
@@ -3404,8 +4125,8 @@
// - '1' for one-byte tags (field numbers 1-15)
// - '2' for two-byte tags (field numbers 16-2048)
-#ifndef UPB_WIRE_DECODE_FAST_H_
-#define UPB_WIRE_DECODE_FAST_H_
+#ifndef UPB_WIRE_INTERNAL_DECODE_FAST_H_
+#define UPB_WIRE_INTERNAL_DECODE_FAST_H_
// Must be last.
@@ -3473,6 +4194,7 @@
TAGBYTES(r)
#undef F
+#undef UTF8
#undef TAGBYTES
/* sub-message fields *********************************************************/
@@ -3495,9 +4217,9 @@
TAGBYTES(o)
TAGBYTES(r)
-#undef TAGBYTES
-#undef SIZES
#undef F
+#undef SIZES
+#undef TAGBYTES
#undef UPB_PARSE_PARAMS
@@ -3506,73 +4228,7 @@
#endif
-#endif /* UPB_WIRE_DECODE_FAST_H_ */
-
-// upb_Encode: parsing from a upb_Message using a upb_MiniTable.
-
-#ifndef UPB_WIRE_ENCODE_H_
-#define UPB_WIRE_ENCODE_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
- /* If set, the results of serializing will be deterministic across all
- * instances of this binary. There are no guarantees across different
- * binary builds.
- *
- * If your proto contains maps, the encoder will need to malloc()/free()
- * memory during encode. */
- kUpb_EncodeOption_Deterministic = 1,
-
- // When set, unknown fields are not printed.
- kUpb_EncodeOption_SkipUnknown = 2,
-
- // When set, the encode will fail if any required fields are missing.
- kUpb_EncodeOption_CheckRequired = 4,
-};
-
-typedef enum {
- kUpb_EncodeStatus_Ok = 0,
- kUpb_EncodeStatus_OutOfMemory = 1, // Arena alloc failed
- kUpb_EncodeStatus_MaxDepthExceeded = 2,
-
- // kUpb_EncodeOption_CheckRequired failed but the parse otherwise succeeded.
- kUpb_EncodeStatus_MissingRequired = 3,
-} upb_EncodeStatus;
-
-UPB_INLINE uint32_t upb_EncodeOptions_MaxDepth(uint16_t depth) {
- return (uint32_t)depth << 16;
-}
-
-UPB_INLINE uint16_t upb_EncodeOptions_GetMaxDepth(uint32_t options) {
- return options >> 16;
-}
-
-// Enforce an upper bound on recursion depth.
-UPB_INLINE int upb_Encode_LimitDepth(uint32_t encode_options, uint32_t limit) {
- uint32_t max_depth = upb_EncodeOptions_GetMaxDepth(encode_options);
- if (max_depth > limit) max_depth = limit;
- return upb_EncodeOptions_MaxDepth(max_depth) | (encode_options & 0xffff);
-}
-
-UPB_API upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
- int options, upb_Arena* arena, char** buf,
- size_t* size);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_WIRE_ENCODE_H_ */
+#endif /* UPB_WIRE_INTERNAL_DECODE_FAST_H_ */
// IWYU pragma: end_exports
#endif // UPB_GENERATED_CODE_SUPPORT_H_
@@ -3697,38 +4353,38 @@
extern "C" {
#endif
-typedef struct google_protobuf_FileDescriptorSet google_protobuf_FileDescriptorSet;
-typedef struct google_protobuf_FileDescriptorProto google_protobuf_FileDescriptorProto;
-typedef struct google_protobuf_DescriptorProto google_protobuf_DescriptorProto;
-typedef struct google_protobuf_DescriptorProto_ExtensionRange google_protobuf_DescriptorProto_ExtensionRange;
-typedef struct google_protobuf_DescriptorProto_ReservedRange google_protobuf_DescriptorProto_ReservedRange;
-typedef struct google_protobuf_ExtensionRangeOptions google_protobuf_ExtensionRangeOptions;
-typedef struct google_protobuf_ExtensionRangeOptions_Declaration google_protobuf_ExtensionRangeOptions_Declaration;
-typedef struct google_protobuf_FieldDescriptorProto google_protobuf_FieldDescriptorProto;
-typedef struct google_protobuf_OneofDescriptorProto google_protobuf_OneofDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto google_protobuf_EnumDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange google_protobuf_EnumDescriptorProto_EnumReservedRange;
-typedef struct google_protobuf_EnumValueDescriptorProto google_protobuf_EnumValueDescriptorProto;
-typedef struct google_protobuf_ServiceDescriptorProto google_protobuf_ServiceDescriptorProto;
-typedef struct google_protobuf_MethodDescriptorProto google_protobuf_MethodDescriptorProto;
-typedef struct google_protobuf_FileOptions google_protobuf_FileOptions;
-typedef struct google_protobuf_MessageOptions google_protobuf_MessageOptions;
-typedef struct google_protobuf_FieldOptions google_protobuf_FieldOptions;
-typedef struct google_protobuf_FieldOptions_EditionDefault google_protobuf_FieldOptions_EditionDefault;
-typedef struct google_protobuf_OneofOptions google_protobuf_OneofOptions;
-typedef struct google_protobuf_EnumOptions google_protobuf_EnumOptions;
-typedef struct google_protobuf_EnumValueOptions google_protobuf_EnumValueOptions;
-typedef struct google_protobuf_ServiceOptions google_protobuf_ServiceOptions;
-typedef struct google_protobuf_MethodOptions google_protobuf_MethodOptions;
-typedef struct google_protobuf_UninterpretedOption google_protobuf_UninterpretedOption;
-typedef struct google_protobuf_UninterpretedOption_NamePart google_protobuf_UninterpretedOption_NamePart;
-typedef struct google_protobuf_FeatureSet google_protobuf_FeatureSet;
-typedef struct google_protobuf_FeatureSetDefaults google_protobuf_FeatureSetDefaults;
-typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
-typedef struct google_protobuf_SourceCodeInfo google_protobuf_SourceCodeInfo;
-typedef struct google_protobuf_SourceCodeInfo_Location google_protobuf_SourceCodeInfo_Location;
-typedef struct google_protobuf_GeneratedCodeInfo google_protobuf_GeneratedCodeInfo;
-typedef struct google_protobuf_GeneratedCodeInfo_Annotation google_protobuf_GeneratedCodeInfo_Annotation;
+typedef struct google_protobuf_FileDescriptorSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorSet;
+typedef struct google_protobuf_FileDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorProto;
+typedef struct google_protobuf_DescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto;
+typedef struct google_protobuf_DescriptorProto_ExtensionRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ExtensionRange;
+typedef struct google_protobuf_DescriptorProto_ReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ReservedRange;
+typedef struct google_protobuf_ExtensionRangeOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions;
+typedef struct google_protobuf_ExtensionRangeOptions_Declaration { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions_Declaration;
+typedef struct google_protobuf_FieldDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldDescriptorProto;
+typedef struct google_protobuf_OneofDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto_EnumReservedRange;
+typedef struct google_protobuf_EnumValueDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueDescriptorProto;
+typedef struct google_protobuf_ServiceDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceDescriptorProto;
+typedef struct google_protobuf_MethodDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodDescriptorProto;
+typedef struct google_protobuf_FileOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FileOptions;
+typedef struct google_protobuf_MessageOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MessageOptions;
+typedef struct google_protobuf_FieldOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions;
+typedef struct google_protobuf_FieldOptions_EditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions_EditionDefault;
+typedef struct google_protobuf_OneofOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofOptions;
+typedef struct google_protobuf_EnumOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumOptions;
+typedef struct google_protobuf_EnumValueOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueOptions;
+typedef struct google_protobuf_ServiceOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceOptions;
+typedef struct google_protobuf_MethodOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodOptions;
+typedef struct google_protobuf_UninterpretedOption { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption;
+typedef struct google_protobuf_UninterpretedOption_NamePart { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption_NamePart;
+typedef struct google_protobuf_FeatureSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSet;
+typedef struct google_protobuf_FeatureSetDefaults { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults;
+typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
+typedef struct google_protobuf_SourceCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo;
+typedef struct google_protobuf_SourceCodeInfo_Location { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo_Location;
+typedef struct google_protobuf_GeneratedCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo;
+typedef struct google_protobuf_GeneratedCodeInfo_Annotation { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo_Annotation;
typedef enum {
google_protobuf_EDITION_UNKNOWN = 0,
@@ -3739,7 +4395,8 @@
google_protobuf_EDITION_2023 = 1000,
google_protobuf_EDITION_99997_TEST_ONLY = 99997,
google_protobuf_EDITION_99998_TEST_ONLY = 99998,
- google_protobuf_EDITION_99999_TEST_ONLY = 99999
+ google_protobuf_EDITION_99999_TEST_ONLY = 99999,
+ google_protobuf_EDITION_MAX = 2147483647
} google_protobuf_Edition;
typedef enum {
@@ -3780,8 +4437,8 @@
typedef enum {
google_protobuf_FeatureSet_UTF8_VALIDATION_UNKNOWN = 0,
- google_protobuf_FeatureSet_NONE = 1,
- google_protobuf_FeatureSet_VERIFY = 2
+ google_protobuf_FeatureSet_VERIFY = 2,
+ google_protobuf_FeatureSet_NONE = 3
} google_protobuf_FeatureSet_Utf8Validation;
typedef enum {
@@ -3870,7 +4527,8 @@
UPB_INLINE google_protobuf_FileDescriptorSet* google_protobuf_FileDescriptorSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorSet_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorSet_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3880,32 +4538,32 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorSet_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorSet_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize(const google_protobuf_FileDescriptorSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorSet_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorSet_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize_ex(const google_protobuf_FileDescriptorSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorSet_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorSet_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorSet_clear_file(google_protobuf_FileDescriptorSet* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileDescriptorProto* const* google_protobuf_FileDescriptorSet_file(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -3914,32 +4572,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorSet_file_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorSet_has_file(const google_protobuf_FileDescriptorSet* msg) {
- size_t size;
- google_protobuf_FileDescriptorSet_file(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_mutable_file(google_protobuf_FileDescriptorSet* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -3948,17 +4601,21 @@
}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_resize_file(google_protobuf_FileDescriptorSet* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorSet_add_file(google_protobuf_FileDescriptorSet* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FileDescriptorProto* sub = (struct google_protobuf_FileDescriptorProto*)_upb_Message_New(&google__protobuf__FileDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -3970,7 +4627,8 @@
UPB_INLINE google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3980,62 +4638,64 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize(const google_protobuf_FileDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize_ex(const google_protobuf_FileDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_name(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_name(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_name(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_package(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_package(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_package(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_FileDescriptorProto_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4044,35 +4704,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_message_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_FileDescriptorProto_message_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4081,35 +4736,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_message_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_message_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_message_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_enum_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_FileDescriptorProto_enum_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4118,35 +4768,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_enum_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_enum_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_service(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceDescriptorProto* const* google_protobuf_FileDescriptorProto_service(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ServiceDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4155,35 +4800,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_service_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_service(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_service(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_extension(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_FileDescriptorProto_extension(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4192,65 +4832,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_extension_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_extension(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_options(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_options(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_FileOptions* default_val = NULL;
const google_protobuf_FileOptions* ret;
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_options(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_source_code_info(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_SourceCodeInfo* default_val = NULL;
const google_protobuf_SourceCodeInfo* ret;
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_public_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_public_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4259,35 +4896,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_public_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_public_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_weak_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_weak_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4296,70 +4928,67 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_weak_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_weak_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_syntax(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_syntax(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_syntax(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_edition(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileDescriptorProto_edition(const google_protobuf_FileDescriptorProto* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_edition(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_name(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_package(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_mutable_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4368,22 +4997,26 @@
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_resize_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_dependency(google_protobuf_FileDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_mutable_message_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4392,24 +5025,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_resize_message_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_FileDescriptorProto_add_message_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(&google__protobuf__DescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_mutable_enum_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4418,24 +5055,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_resize_enum_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_FileDescriptorProto_add_enum_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(&google__protobuf__EnumDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_mutable_service(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ServiceDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4444,24 +5085,28 @@
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_resize_service(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ServiceDescriptorProto* google_protobuf_FileDescriptorProto_add_service(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ServiceDescriptorProto* sub = (struct google_protobuf_ServiceDescriptorProto*)_upb_Message_New(&google__protobuf__ServiceDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_mutable_extension(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4470,22 +5115,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_resize_extension(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_FileDescriptorProto_add_extension(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_options(google_protobuf_FileDescriptorProto *msg, google_protobuf_FileOptions* value) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_mutable_options(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FileOptions* sub = (struct google_protobuf_FileOptions*)google_protobuf_FileDescriptorProto_options(msg);
@@ -4497,7 +5146,7 @@
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_source_code_info(google_protobuf_FileDescriptorProto *msg, google_protobuf_SourceCodeInfo* value) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_mutable_source_code_info(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_SourceCodeInfo* sub = (struct google_protobuf_SourceCodeInfo*)google_protobuf_FileDescriptorProto_source_code_info(msg);
@@ -4509,9 +5158,9 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4520,22 +5169,26 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_public_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4544,24 +5197,28 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_weak_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_syntax(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_edition(google_protobuf_FileDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.DescriptorProto */
@@ -4572,7 +5229,8 @@
UPB_INLINE google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4582,47 +5240,48 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize(const google_protobuf_DescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize_ex(const google_protobuf_DescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_DescriptorProto_name(const google_protobuf_DescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_name(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_field(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_field(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4631,35 +5290,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_field_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_field(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_field(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_nested_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_DescriptorProto_nested_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4668,35 +5322,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_nested_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_nested_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_nested_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_enum_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_DescriptorProto_enum_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4705,35 +5354,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_enum_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_enum_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ExtensionRange* const* google_protobuf_DescriptorProto_extension_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ExtensionRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4742,35 +5386,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_extension(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4779,50 +5418,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_options(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MessageOptions* google_protobuf_DescriptorProto_options(const google_protobuf_DescriptorProto* msg) {
const google_protobuf_MessageOptions* default_val = NULL;
const google_protobuf_MessageOptions* ret;
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_options(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_oneof_decl(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofDescriptorProto* const* google_protobuf_DescriptorProto_oneof_decl(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_OneofDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4831,35 +5466,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_oneof_decl_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_oneof_decl(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_oneof_decl(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ReservedRange* const* google_protobuf_DescriptorProto_reserved_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4868,35 +5498,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_DescriptorProto_reserved_name(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4905,36 +5530,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_name_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_name(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_set_name(google_protobuf_DescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_field(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4943,24 +5563,28 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_field(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_field(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_mutable_nested_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4969,24 +5593,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_resize_nested_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_add_nested_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(&google__protobuf__DescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_mutable_enum_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4995,24 +5623,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_resize_enum_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_DescriptorProto_add_enum_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(&google__protobuf__EnumDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_mutable_extension_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ExtensionRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5021,24 +5653,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_resize_extension_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_add_extension_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ExtensionRange* sub = (struct google_protobuf_DescriptorProto_ExtensionRange*)_upb_Message_New(&google__protobuf__DescriptorProto__ExtensionRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_extension(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5047,22 +5683,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_extension(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_extension(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_DescriptorProto_set_options(google_protobuf_DescriptorProto *msg, google_protobuf_MessageOptions* value) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MessageOptions* google_protobuf_DescriptorProto_mutable_options(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MessageOptions* sub = (struct google_protobuf_MessageOptions*)google_protobuf_DescriptorProto_options(msg);
@@ -5074,9 +5714,9 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_mutable_oneof_decl(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_OneofDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5085,24 +5725,28 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_resize_oneof_decl(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_OneofDescriptorProto* google_protobuf_DescriptorProto_add_oneof_decl(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_OneofDescriptorProto* sub = (struct google_protobuf_OneofDescriptorProto*)_upb_Message_New(&google__protobuf__OneofDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_mutable_reserved_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5111,24 +5755,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_resize_reserved_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_add_reserved_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ReservedRange* sub = (struct google_protobuf_DescriptorProto_ReservedRange*)_upb_Message_New(&google__protobuf__DescriptorProto__ReservedRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_mutable_reserved_name(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5137,15 +5785,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_resize_reserved_name(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_DescriptorProto_add_reserved_name(google_protobuf_DescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -5157,7 +5809,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_ExtensionRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5167,80 +5820,83 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize(const google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize_ex(const google_protobuf_DescriptorProto_ExtensionRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_start(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_end(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_options(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const google_protobuf_ExtensionRangeOptions* default_val = NULL;
const google_protobuf_ExtensionRangeOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_start(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_end(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_options(google_protobuf_DescriptorProto_ExtensionRange *msg, google_protobuf_ExtensionRangeOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_mutable_options(google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena) {
struct google_protobuf_ExtensionRangeOptions* sub = (struct google_protobuf_ExtensionRangeOptions*)google_protobuf_DescriptorProto_ExtensionRange_options(msg);
@@ -5259,7 +5915,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_ReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ReservedRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ReservedRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5269,61 +5926,63 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ReservedRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ReservedRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize(const google_protobuf_DescriptorProto_ReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ReservedRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ReservedRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize_ex(const google_protobuf_DescriptorProto_ReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ReservedRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ReservedRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_start(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_end(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_start(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_end(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.ExtensionRangeOptions */
@@ -5334,7 +5993,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions* google_protobuf_ExtensionRangeOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5344,32 +6004,32 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize(const google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize_ex(const google_protobuf_ExtensionRangeOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_declaration(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions_Declaration* const* google_protobuf_ExtensionRangeOptions_declaration(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ExtensionRangeOptions_Declaration* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5378,65 +6038,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_declaration(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_declaration(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_verification(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_verification(const google_protobuf_ExtensionRangeOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_verification(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_features(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_features(const google_protobuf_ExtensionRangeOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_features(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ExtensionRangeOptions_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5445,32 +6102,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_mutable_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ExtensionRangeOptions_Declaration**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5479,26 +6131,30 @@
}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_resize_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_add_declaration(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ExtensionRangeOptions_Declaration* sub = (struct google_protobuf_ExtensionRangeOptions_Declaration*)_upb_Message_New(&google__protobuf__ExtensionRangeOptions__Declaration_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_verification(google_protobuf_ExtensionRangeOptions *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_features(google_protobuf_ExtensionRangeOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_mutable_features(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ExtensionRangeOptions_features(msg);
@@ -5510,9 +6166,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_mutable_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5521,17 +6177,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_resize_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ExtensionRangeOptions_add_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -5543,7 +6203,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_Declaration_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5553,118 +6214,123 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize(const google_protobuf_ExtensionRangeOptions_Declaration* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize_ex(const google_protobuf_ExtensionRangeOptions_Declaration* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_number(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_Declaration_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_full_name(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_type(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_reserved(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_repeated(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_number(google_protobuf_ExtensionRangeOptions_Declaration *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_full_name(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_type(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_reserved(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_repeated(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FieldDescriptorProto */
@@ -5675,7 +6341,8 @@
UPB_INLINE google_protobuf_FieldDescriptorProto* google_protobuf_FieldDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5685,220 +6352,231 @@
int options, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize(const google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize_ex(const google_protobuf_FieldDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_extendee(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_extendee(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_extendee(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_number(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_number(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_number(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_label(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_label(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_label(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_type(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_type_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_default_value(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_default_value(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_default_value(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_options(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_options(const google_protobuf_FieldDescriptorProto* msg) {
const google_protobuf_FieldOptions* default_val = NULL;
const google_protobuf_FieldOptions* ret;
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_options(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_oneof_index(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_json_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_json_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_json_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_proto3_optional(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_extendee(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_number(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_label(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_default_value(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_options(google_protobuf_FieldDescriptorProto *msg, google_protobuf_FieldOptions* value) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_mutable_options(google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FieldOptions* sub = (struct google_protobuf_FieldOptions*)google_protobuf_FieldDescriptorProto_options(msg);
@@ -5910,15 +6588,15 @@
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_oneof_index(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_json_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_proto3_optional(google_protobuf_FieldDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofDescriptorProto */
@@ -5929,7 +6607,8 @@
UPB_INLINE google_protobuf_OneofDescriptorProto* google_protobuf_OneofDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5939,61 +6618,63 @@
int options, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize(const google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize_ex(const google_protobuf_OneofDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_name(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_OneofDescriptorProto_name(const google_protobuf_OneofDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_name(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_options(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_options(const google_protobuf_OneofDescriptorProto* msg) {
const google_protobuf_OneofOptions* default_val = NULL;
const google_protobuf_OneofOptions* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_options(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_name(google_protobuf_OneofDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_options(google_protobuf_OneofDescriptorProto *msg, google_protobuf_OneofOptions* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_mutable_options(google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_OneofOptions* sub = (struct google_protobuf_OneofOptions*)google_protobuf_OneofDescriptorProto_options(msg);
@@ -6012,7 +6693,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto* google_protobuf_EnumDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6022,47 +6704,48 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize(const google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize_ex(const google_protobuf_EnumDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumDescriptorProto_name(const google_protobuf_EnumDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_name(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_value(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueDescriptorProto* const* google_protobuf_EnumDescriptorProto_value(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumValueDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6071,50 +6754,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_value_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_value(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_value(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_options(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_options(const google_protobuf_EnumDescriptorProto* msg) {
const google_protobuf_EnumOptions* default_val = NULL;
const google_protobuf_EnumOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_options(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_range(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto_EnumReservedRange* const* google_protobuf_EnumDescriptorProto_reserved_range(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto_EnumReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6123,35 +6802,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_range(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_EnumDescriptorProto_reserved_name(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6160,36 +6834,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_name(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_name(google_protobuf_EnumDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_mutable_value(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumValueDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6198,22 +6867,26 @@
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_resize_value(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumDescriptorProto_add_value(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumValueDescriptorProto* sub = (struct google_protobuf_EnumValueDescriptorProto*)_upb_Message_New(&google__protobuf__EnumValueDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_options(google_protobuf_EnumDescriptorProto *msg, google_protobuf_EnumOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_mutable_options(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumOptions* sub = (struct google_protobuf_EnumOptions*)google_protobuf_EnumDescriptorProto_options(msg);
@@ -6225,9 +6898,9 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_mutable_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6236,24 +6909,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_resize_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_add_reserved_range(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto_EnumReservedRange* sub = (struct google_protobuf_EnumDescriptorProto_EnumReservedRange*)_upb_Message_New(&google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_mutable_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6262,15 +6939,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_resize_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_add_reserved_name(google_protobuf_EnumDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -6282,7 +6963,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_EnumReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6292,61 +6974,63 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize_ex(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_start(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_end(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_start(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_end(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.EnumValueDescriptorProto */
@@ -6357,7 +7041,8 @@
UPB_INLINE google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumValueDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6367,80 +7052,83 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize(const google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize_ex(const google_protobuf_EnumValueDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_name(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumValueDescriptorProto_name(const google_protobuf_EnumValueDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_name(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_number(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumValueDescriptorProto_number(const google_protobuf_EnumValueDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_number(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_options(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const google_protobuf_EnumValueOptions* default_val = NULL;
const google_protobuf_EnumValueOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_name(google_protobuf_EnumValueDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_number(google_protobuf_EnumValueDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_options(google_protobuf_EnumValueDescriptorProto *msg, google_protobuf_EnumValueOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_mutable_options(google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumValueOptions* sub = (struct google_protobuf_EnumValueOptions*)google_protobuf_EnumValueDescriptorProto_options(msg);
@@ -6459,7 +7147,8 @@
UPB_INLINE google_protobuf_ServiceDescriptorProto* google_protobuf_ServiceDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6469,47 +7158,48 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize(const google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize_ex(const google_protobuf_ServiceDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_name(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ServiceDescriptorProto_name(const google_protobuf_ServiceDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_name(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_method(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodDescriptorProto* const* google_protobuf_ServiceDescriptorProto_method(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_MethodDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6518,51 +7208,47 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceDescriptorProto_method_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_method(const google_protobuf_ServiceDescriptorProto* msg) {
- size_t size;
- google_protobuf_ServiceDescriptorProto_method(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_options(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_options(const google_protobuf_ServiceDescriptorProto* msg) {
const google_protobuf_ServiceOptions* default_val = NULL;
const google_protobuf_ServiceOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_options(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_name(google_protobuf_ServiceDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_mutable_method(google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_MethodDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6571,22 +7257,26 @@
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_resize_method(google_protobuf_ServiceDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_MethodDescriptorProto* google_protobuf_ServiceDescriptorProto_add_method(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_MethodDescriptorProto* sub = (struct google_protobuf_MethodDescriptorProto*)_upb_Message_New(&google__protobuf__MethodDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_options(google_protobuf_ServiceDescriptorProto *msg, google_protobuf_ServiceOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_mutable_options(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_ServiceOptions* sub = (struct google_protobuf_ServiceOptions*)google_protobuf_ServiceDescriptorProto_options(msg);
@@ -6605,7 +7295,8 @@
UPB_INLINE google_protobuf_MethodDescriptorProto* google_protobuf_MethodDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6615,129 +7306,135 @@
int options, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize(const google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize_ex(const google_protobuf_MethodDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_name(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_name(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_name(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_input_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_input_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_input_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_output_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_output_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_output_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_options(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_options(const google_protobuf_MethodDescriptorProto* msg) {
const google_protobuf_MethodOptions* default_val = NULL;
const google_protobuf_MethodOptions* ret;
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_options(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_client_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_server_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_name(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_input_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_output_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_options(google_protobuf_MethodDescriptorProto *msg, google_protobuf_MethodOptions* value) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_mutable_options(google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MethodOptions* sub = (struct google_protobuf_MethodOptions*)google_protobuf_MethodDescriptorProto_options(msg);
@@ -6749,11 +7446,11 @@
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_client_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_server_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FileOptions */
@@ -6764,7 +7461,8 @@
UPB_INLINE google_protobuf_FileOptions* google_protobuf_FileOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6774,347 +7472,352 @@
int options, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize(const google_protobuf_FileOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize_ex(const google_protobuf_FileOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_outer_classname(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_outer_classname(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_outer_classname(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_optimize_for(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileOptions_optimize_for(const google_protobuf_FileOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_optimize_for(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_multiple_files(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_multiple_files(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_multiple_files(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_go_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_go_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_go_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_py_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_py_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_py_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generate_equals_and_hash(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_deprecated(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_deprecated(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_deprecated(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_string_check_utf8(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_enable_arenas(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
bool default_val = true;
bool ret;
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_objc_class_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_objc_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_objc_class_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_csharp_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_csharp_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_csharp_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_swift_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_swift_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_swift_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_class_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_class_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
-}
-UPB_INLINE void google_protobuf_FileOptions_clear_php_generic_services(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
-}
-UPB_INLINE bool google_protobuf_FileOptions_php_generic_services(const google_protobuf_FileOptions* msg) {
- bool default_val = false;
- bool ret;
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
- return ret;
-}
-UPB_INLINE bool google_protobuf_FileOptions_has_php_generic_services(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_metadata_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_ruby_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_ruby_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_ruby_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_features(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FileOptions_features(const google_protobuf_FileOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_features(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_uninterpreted_option(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FileOptions_uninterpreted_option(const google_protobuf_FileOptions* msg, size_t* size) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7122,111 +7825,102 @@
}
}
UPB_INLINE const upb_Array* _google_protobuf_FileOptions_uninterpreted_option_upb_array(const google_protobuf_FileOptions* msg, size_t* size) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileOptions_has_uninterpreted_option(const google_protobuf_FileOptions* msg) {
- size_t size;
- google_protobuf_FileOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileOptions_set_java_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_outer_classname(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_optimize_for(google_protobuf_FileOptions *msg, int32_t value) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_multiple_files(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_go_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_py_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generate_equals_and_hash(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_deprecated(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_string_check_utf8(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_enable_arenas(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_objc_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_csharp_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_swift_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
-}
-UPB_INLINE void google_protobuf_FileOptions_set_php_generic_services(google_protobuf_FileOptions *msg, bool value) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_metadata_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_ruby_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_features(google_protobuf_FileOptions *msg, google_protobuf_FeatureSet* value) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FileOptions_mutable_features(google_protobuf_FileOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FileOptions_features(msg);
@@ -7237,10 +7931,10 @@
return sub;
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_mutable_uninterpreted_option(google_protobuf_FileOptions* msg, size_t* size) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7248,18 +7942,22 @@
}
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_resize_uninterpreted_option(google_protobuf_FileOptions* msg, size_t size, upb_Arena* arena) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FileOptions_add_uninterpreted_option(google_protobuf_FileOptions* msg, upb_Arena* arena) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -7271,7 +7969,8 @@
UPB_INLINE google_protobuf_MessageOptions* google_protobuf_MessageOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MessageOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MessageOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -7281,122 +7980,128 @@
int options, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MessageOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MessageOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize(const google_protobuf_MessageOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MessageOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MessageOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize_ex(const google_protobuf_MessageOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MessageOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MessageOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MessageOptions_clear_message_set_wire_format(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_no_standard_descriptor_accessor(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_map_entry(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_map_entry(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_map_entry(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_features(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MessageOptions_features(const google_protobuf_MessageOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_features(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_uninterpreted_option(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MessageOptions_uninterpreted_option(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7405,50 +8110,45 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_upb_array(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MessageOptions_has_uninterpreted_option(const google_protobuf_MessageOptions* msg) {
- size_t size;
- google_protobuf_MessageOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MessageOptions_set_message_set_wire_format(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_no_standard_descriptor_accessor(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_map_entry(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_features(google_protobuf_MessageOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MessageOptions_mutable_features(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MessageOptions_features(msg);
@@ -7460,9 +8160,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_mutable_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7471,17 +8171,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_resize_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MessageOptions_add_uninterpreted_option(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -7493,7 +8197,8 @@
UPB_INLINE google_protobuf_FieldOptions* google_protobuf_FieldOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -7503,167 +8208,176 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize(const google_protobuf_FieldOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize_ex(const google_protobuf_FieldOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_clear_ctype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_ctype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_ctype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_packed(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_packed(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_packed(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_deprecated(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_deprecated(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_deprecated(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_jstype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_jstype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_jstype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_weak(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_weak(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_weak(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_unverified_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_unverified_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_unverified_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_debug_redact(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_debug_redact(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_debug_redact(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_retention(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_retention(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_retention(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_targets(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FieldOptions_targets(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7672,35 +8386,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_targets_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_targets(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_targets(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_edition_defaults(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions_EditionDefault* const* google_protobuf_FieldOptions_edition_defaults(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldOptions_EditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7709,50 +8418,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_edition_defaults_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_edition_defaults(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_edition_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_features(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FieldOptions_features(const google_protobuf_FieldOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_features(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_uninterpreted_option(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FieldOptions_uninterpreted_option(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7761,68 +8466,63 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_uninterpreted_option(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_set_ctype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_packed(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_deprecated(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_jstype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_weak(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_unverified_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_debug_redact(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_retention(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_mutable_targets(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7831,22 +8531,26 @@
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_resize_targets(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FieldOptions_add_targets(google_protobuf_FieldOptions* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_mutable_edition_defaults(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldOptions_EditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7855,22 +8559,26 @@
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_resize_edition_defaults(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_add_edition_defaults(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldOptions_EditionDefault* sub = (struct google_protobuf_FieldOptions_EditionDefault*)_upb_Message_New(&google__protobuf__FieldOptions__EditionDefault_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FieldOptions_set_features(google_protobuf_FieldOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FieldOptions_mutable_features(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FieldOptions_features(msg);
@@ -7882,9 +8590,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_mutable_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7893,17 +8601,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_resize_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FieldOptions_add_uninterpreted_option(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -7915,7 +8627,8 @@
UPB_INLINE google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_EditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions__EditionDefault_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions__EditionDefault_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -7925,61 +8638,63 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions__EditionDefault_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions__EditionDefault_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize(const google_protobuf_FieldOptions_EditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions__EditionDefault_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions__EditionDefault_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize_ex(const google_protobuf_FieldOptions_EditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions__EditionDefault_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions__EditionDefault_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_value(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldOptions_EditionDefault_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_edition(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_EditionDefault_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_value(google_protobuf_FieldOptions_EditionDefault *msg, upb_StringView value) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_edition(google_protobuf_FieldOptions_EditionDefault *msg, int32_t value) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofOptions */
@@ -7990,7 +8705,8 @@
UPB_INLINE google_protobuf_OneofOptions* google_protobuf_OneofOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8000,47 +8716,48 @@
int options, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize(const google_protobuf_OneofOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize_ex(const google_protobuf_OneofOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofOptions_clear_features(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_OneofOptions_features(const google_protobuf_OneofOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofOptions_has_features(const google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofOptions_clear_uninterpreted_option(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_OneofOptions_uninterpreted_option(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8049,30 +8766,25 @@
}
UPB_INLINE const upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_upb_array(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_OneofOptions_has_uninterpreted_option(const google_protobuf_OneofOptions* msg) {
- size_t size;
- google_protobuf_OneofOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_OneofOptions_set_features(google_protobuf_OneofOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_OneofOptions_mutable_features(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_OneofOptions_features(msg);
@@ -8084,9 +8796,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_mutable_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8095,17 +8807,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_resize_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_OneofOptions_add_uninterpreted_option(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8117,7 +8833,8 @@
UPB_INLINE google_protobuf_EnumOptions* google_protobuf_EnumOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8127,92 +8844,96 @@
int options, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize(const google_protobuf_EnumOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize_ex(const google_protobuf_EnumOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumOptions_clear_allow_alias(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_allow_alias(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_allow_alias(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_features(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumOptions_features(const google_protobuf_EnumOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_features(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_uninterpreted_option(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumOptions_uninterpreted_option(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8221,42 +8942,37 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_upb_array(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumOptions_has_uninterpreted_option(const google_protobuf_EnumOptions* msg) {
- size_t size;
- google_protobuf_EnumOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumOptions_set_allow_alias(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_features(google_protobuf_EnumOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumOptions_mutable_features(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumOptions_features(msg);
@@ -8268,9 +8984,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_mutable_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8279,17 +8995,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_resize_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumOptions_add_uninterpreted_option(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8301,7 +9021,8 @@
UPB_INLINE google_protobuf_EnumValueOptions* google_protobuf_EnumValueOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8311,77 +9032,80 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize(const google_protobuf_EnumValueOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize_ex(const google_protobuf_EnumValueOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_deprecated(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_deprecated(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_deprecated(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_features(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_features(const google_protobuf_EnumValueOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_features(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_debug_redact(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_debug_redact(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_debug_redact(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_uninterpreted_option(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumValueOptions_uninterpreted_option(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8390,34 +9114,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumValueOptions_has_uninterpreted_option(const google_protobuf_EnumValueOptions* msg) {
- size_t size;
- google_protobuf_EnumValueOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumValueOptions_set_deprecated(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_features(google_protobuf_EnumValueOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_mutable_features(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumValueOptions_features(msg);
@@ -8429,13 +9148,13 @@
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_debug_redact(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_mutable_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8444,17 +9163,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_resize_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumValueOptions_add_uninterpreted_option(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8466,7 +9189,8 @@
UPB_INLINE google_protobuf_ServiceOptions* google_protobuf_ServiceOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8476,62 +9200,64 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize(const google_protobuf_ServiceOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize_ex(const google_protobuf_ServiceOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_deprecated(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ServiceOptions_deprecated(const google_protobuf_ServiceOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_deprecated(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_features(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ServiceOptions_features(const google_protobuf_ServiceOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_features(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_uninterpreted_option(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ServiceOptions_uninterpreted_option(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8540,34 +9266,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceOptions_has_uninterpreted_option(const google_protobuf_ServiceOptions* msg) {
- size_t size;
- google_protobuf_ServiceOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceOptions_set_deprecated(google_protobuf_ServiceOptions *msg, bool value) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ServiceOptions_set_features(google_protobuf_ServiceOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ServiceOptions_mutable_features(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ServiceOptions_features(msg);
@@ -8579,9 +9300,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_mutable_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8590,17 +9311,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_resize_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ServiceOptions_add_uninterpreted_option(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8612,7 +9337,8 @@
UPB_INLINE google_protobuf_MethodOptions* google_protobuf_MethodOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8622,77 +9348,80 @@
int options, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize(const google_protobuf_MethodOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize_ex(const google_protobuf_MethodOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodOptions_clear_deprecated(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodOptions_deprecated(const google_protobuf_MethodOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_deprecated(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_idempotency_level(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_MethodOptions_idempotency_level(const google_protobuf_MethodOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_idempotency_level(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_features(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MethodOptions_features(const google_protobuf_MethodOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_features(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_uninterpreted_option(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MethodOptions_uninterpreted_option(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8701,38 +9430,33 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_upb_array(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MethodOptions_has_uninterpreted_option(const google_protobuf_MethodOptions* msg) {
- size_t size;
- google_protobuf_MethodOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MethodOptions_set_deprecated(google_protobuf_MethodOptions *msg, bool value) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_idempotency_level(google_protobuf_MethodOptions *msg, int32_t value) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_features(google_protobuf_MethodOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MethodOptions_mutable_features(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MethodOptions_features(msg);
@@ -8744,9 +9468,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_mutable_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8755,17 +9479,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_resize_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MethodOptions_add_uninterpreted_option(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8777,7 +9505,8 @@
UPB_INLINE google_protobuf_UninterpretedOption* google_protobuf_UninterpretedOption_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8787,32 +9516,32 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize(const google_protobuf_UninterpretedOption* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize_ex(const google_protobuf_UninterpretedOption* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_name(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption_NamePart* const* google_protobuf_UninterpretedOption_name(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption_NamePart* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8821,122 +9550,123 @@
}
UPB_INLINE const upb_Array* _google_protobuf_UninterpretedOption_name_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_UninterpretedOption_has_name(const google_protobuf_UninterpretedOption* msg) {
- size_t size;
- google_protobuf_UninterpretedOption_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_identifier_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_identifier_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_identifier_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_positive_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE uint64_t google_protobuf_UninterpretedOption_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
uint64_t default_val = (uint64_t)0ull;
uint64_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_negative_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int64_t google_protobuf_UninterpretedOption_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
int64_t default_val = (int64_t)0ll;
int64_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_double_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE double google_protobuf_UninterpretedOption_double_value(const google_protobuf_UninterpretedOption* msg) {
double default_val = 0;
double ret;
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_double_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_string_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_string_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_string_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_aggregate_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_mutable_name(google_protobuf_UninterpretedOption* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption_NamePart**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8945,42 +9675,46 @@
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_resize_name(google_protobuf_UninterpretedOption* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_add_name(google_protobuf_UninterpretedOption* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption_NamePart* sub = (struct google_protobuf_UninterpretedOption_NamePart*)_upb_Message_New(&google__protobuf__UninterpretedOption__NamePart_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_identifier_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_positive_int_value(google_protobuf_UninterpretedOption *msg, uint64_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_negative_int_value(google_protobuf_UninterpretedOption *msg, int64_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_double_value(google_protobuf_UninterpretedOption *msg, double value) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_string_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_aggregate_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.UninterpretedOption.NamePart */
@@ -8991,7 +9725,8 @@
UPB_INLINE google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_NamePart_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption__NamePart_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption__NamePart_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9001,61 +9736,63 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption__NamePart_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption__NamePart_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize(const google_protobuf_UninterpretedOption_NamePart* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption__NamePart_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption__NamePart_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize_ex(const google_protobuf_UninterpretedOption_NamePart* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption__NamePart_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption__NamePart_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_name_part(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_NamePart_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_is_extension(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_name_part(google_protobuf_UninterpretedOption_NamePart *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_is_extension(google_protobuf_UninterpretedOption_NamePart *msg, bool value) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSet */
@@ -9066,7 +9803,8 @@
UPB_INLINE google_protobuf_FeatureSet* google_protobuf_FeatureSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSet_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSet_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9076,137 +9814,143 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSet_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSet_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize(const google_protobuf_FeatureSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSet_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSet_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize_ex(const google_protobuf_FeatureSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSet_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSet_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSet_clear_field_presence(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_field_presence(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_field_presence(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_enum_type(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_enum_type(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_enum_type(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_repeated_field_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_utf8_validation(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_utf8_validation(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_utf8_validation(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_message_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_message_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_message_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_json_format(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_json_format(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_json_format(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_set_field_presence(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_enum_type(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_repeated_field_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_utf8_validation(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_message_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_json_format(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults */
@@ -9217,7 +9961,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults* google_protobuf_FeatureSetDefaults_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9227,32 +9972,32 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize(const google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize_ex(const google_protobuf_FeatureSetDefaults* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_defaults(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const* google_protobuf_FeatureSetDefaults_defaults(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9261,62 +10006,59 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FeatureSetDefaults_defaults_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_defaults(const google_protobuf_FeatureSetDefaults* msg) {
- size_t size;
- google_protobuf_FeatureSetDefaults_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_minimum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_maximum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_mutable_defaults(google_protobuf_FeatureSetDefaults* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9325,26 +10067,30 @@
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_resize_defaults(google_protobuf_FeatureSetDefaults* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_add_defaults(google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* sub = (struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault*)_upb_Message_New(&google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_minimum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_maximum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault */
@@ -9355,7 +10101,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9365,57 +10112,59 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize_ex(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_mutable_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(msg);
@@ -9427,7 +10176,7 @@
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.SourceCodeInfo */
@@ -9438,7 +10187,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo* google_protobuf_SourceCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9448,32 +10198,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize(const google_protobuf_SourceCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize_ex(const google_protobuf_SourceCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_clear_location(google_protobuf_SourceCodeInfo* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo_Location* const* google_protobuf_SourceCodeInfo_location(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_SourceCodeInfo_Location* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9482,32 +10232,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_location_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_has_location(const google_protobuf_SourceCodeInfo* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_location(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_mutable_location(google_protobuf_SourceCodeInfo* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_SourceCodeInfo_Location**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9516,17 +10261,21 @@
}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_resize_location(google_protobuf_SourceCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_add_location(google_protobuf_SourceCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_SourceCodeInfo_Location* sub = (struct google_protobuf_SourceCodeInfo_Location*)_upb_Message_New(&google__protobuf__SourceCodeInfo__Location_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -9538,7 +10287,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_Location_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo__Location_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo__Location_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9548,32 +10298,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo__Location_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo__Location_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize(const google_protobuf_SourceCodeInfo_Location* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo__Location_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo__Location_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize_ex(const google_protobuf_SourceCodeInfo_Location* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo__Location_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo__Location_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_path(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_path(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9582,35 +10332,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_path_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_path(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_span(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_span(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9619,65 +10364,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_span_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_span(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_span(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_trailing_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_SourceCodeInfo_Location_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9686,32 +10428,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_leading_detached_comments(msg, &size);
- return size != 0;
-}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_path(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9720,22 +10457,26 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_path(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_path(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_span(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9744,30 +10485,34 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_span(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_span(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_leading_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_trailing_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_mutable_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9776,15 +10521,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_resize_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -9796,7 +10545,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo* google_protobuf_GeneratedCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9806,32 +10556,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize(const google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize_ex(const google_protobuf_GeneratedCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_clear_annotation(google_protobuf_GeneratedCodeInfo* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_GeneratedCodeInfo_Annotation* const* google_protobuf_GeneratedCodeInfo_annotation(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_GeneratedCodeInfo_Annotation* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9840,32 +10590,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_has_annotation(const google_protobuf_GeneratedCodeInfo* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_annotation(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_mutable_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_GeneratedCodeInfo_Annotation**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9874,17 +10619,21 @@
}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_resize_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_add_annotation(google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_GeneratedCodeInfo_Annotation* sub = (struct google_protobuf_GeneratedCodeInfo_Annotation*)_upb_Message_New(&google__protobuf__GeneratedCodeInfo__Annotation_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -9896,7 +10645,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_Annotation_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9906,32 +10656,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize(const google_protobuf_GeneratedCodeInfo_Annotation* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize_ex(const google_protobuf_GeneratedCodeInfo_Annotation* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_path(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_GeneratedCodeInfo_Annotation_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9940,92 +10690,91 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_Annotation_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_source_file(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_GeneratedCodeInfo_Annotation_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_begin(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_end(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_semantic(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_mutable_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10034,37 +10783,41 @@
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_resize_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_add_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_source_file(google_protobuf_GeneratedCodeInfo_Annotation *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_begin(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_end(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_semantic(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* Max size 32 is google.protobuf.FileOptions */
/* Max size 64 is google.protobuf.FileOptions */
-#define _UPB_MAXOPT_SIZE UPB_SIZE(112, 200)
+#define _UPB_MAXOPT_SIZE UPB_SIZE(104, 192)
#ifdef __cplusplus
} /* extern "C" */
@@ -10164,6 +10917,11 @@
UPB_API const UPB_DESC(FeatureSetDefaults) *
upb_DefPool_FeatureSetDefaults(const upb_DefPool* s);
+UPB_API bool upb_DefPool_SetFeatureSetDefaults(upb_DefPool* s,
+ const char* serialized_defaults,
+ size_t serialized_len,
+ upb_Status* status);
+
UPB_API const upb_MessageDef* upb_DefPool_FindMessageByName(
const upb_DefPool* s, const char* sym);
@@ -10186,7 +10944,7 @@
const upb_FieldDef* upb_DefPool_FindExtensionByMiniTable(
const upb_DefPool* s, const upb_MiniTableExtension* ext);
-const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
+UPB_API const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
const char* sym);
const upb_FieldDef* upb_DefPool_FindExtensionByNameWithSize(
@@ -10209,7 +10967,7 @@
upb_DefPool* s, const UPB_DESC(FileDescriptorProto) * file_proto,
upb_Status* status);
-const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
+UPB_API const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
const upb_DefPool* s);
const upb_FieldDef** upb_DefPool_GetAllExtensions(const upb_DefPool* s,
@@ -10410,6 +11168,8 @@
extern "C" {
#endif
+UPB_API const char* upb_FileDef_EditionName(int edition);
+
const upb_FileDef* upb_FileDef_Dependency(const upb_FileDef* f, int i);
int upb_FileDef_DependencyCount(const upb_FileDef* f);
bool upb_FileDef_HasOptions(const upb_FileDef* f);
@@ -11329,108 +12089,6 @@
#endif // UPB_WIRE_EPS_COPY_INPUT_STREAM_H_
-#ifndef UPB_BASE_INTERNAL_LOG2_H_
-#define UPB_BASE_INTERNAL_LOG2_H_
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE int upb_Log2Ceiling(int x) {
- if (x <= 1) return 0;
-#ifdef __GNUC__
- return 32 - __builtin_clz(x - 1);
-#else
- int lg2 = 0;
- while ((1 << lg2) < x) lg2++;
- return lg2;
-#endif
-}
-
-UPB_INLINE int upb_Log2CeilingSize(int x) { return 1 << upb_Log2Ceiling(x); }
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_BASE_INTERNAL_LOG2_H_ */
-
-#ifndef UPB_HASH_INT_TABLE_H_
-#define UPB_HASH_INT_TABLE_H_
-
-
-// Must be last.
-
-typedef struct {
- upb_table t; // For entries that don't fit in the array part.
- const upb_tabval* array; // Array part of the table. See const note above.
- size_t array_size; // Array part size.
- size_t array_count; // Array part number of elements.
-} upb_inttable;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Initialize a table. If memory allocation failed, false is returned and
-// the table is uninitialized.
-bool upb_inttable_init(upb_inttable* table, upb_Arena* a);
-
-// Returns the number of values in the table.
-size_t upb_inttable_count(const upb_inttable* t);
-
-// Inserts the given key into the hashtable with the given value.
-// The key must not already exist in the hash table.
-// The value must not be UINTPTR_MAX.
-//
-// If a table resize was required but memory allocation failed, false is
-// returned and the table is unchanged.
-bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
- upb_Arena* a);
-
-// Looks up key in this table, returning "true" if the key was found.
-// If v is non-NULL, copies the value for this key into *v.
-bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v);
-
-// Removes an item from the table. Returns true if the remove was successful,
-// and stores the removed item in *val if non-NULL.
-bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val);
-
-// Updates an existing entry in an inttable.
-// If the entry does not exist, returns false and does nothing.
-// Unlike insert/remove, this does not invalidate iterators.
-bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val);
-
-// Optimizes the table for the current set of entries, for both memory use and
-// lookup time. Client should call this after all entries have been inserted;
-// inserting more entries is legal, but will likely require a table resize.
-void upb_inttable_compact(upb_inttable* t, upb_Arena* a);
-
-// Iteration over inttable:
-//
-// intptr_t iter = UPB_INTTABLE_BEGIN;
-// uintptr_t key;
-// upb_value val;
-// while (upb_inttable_next(t, &key, &val, &iter)) {
-// // ...
-// }
-
-#define UPB_INTTABLE_BEGIN -1
-
-bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
- intptr_t* iter);
-void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_HASH_INT_TABLE_H_ */
-
#ifndef UPB_JSON_DECODE_H_
#define UPB_JSON_DECODE_H_
@@ -11698,109 +12356,6 @@
#endif // UPB_PORT_VSNPRINTF_COMPAT_H_
-#ifndef UPB_LEX_STRTOD_H_
-#define UPB_LEX_STRTOD_H_
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-double _upb_NoLocaleStrtod(const char *str, char **endptr);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_LEX_STRTOD_H_ */
-
-#ifndef UPB_MEM_INTERNAL_ARENA_H_
-#define UPB_MEM_INTERNAL_ARENA_H_
-
-
-// Must be last.
-
-typedef struct _upb_MemBlock _upb_MemBlock;
-
-struct upb_Arena {
- _upb_ArenaHead head;
-
- // upb_alloc* together with a low bit which signals if there is an initial
- // block.
- uintptr_t block_alloc;
-
- // When multiple arenas are fused together, each arena points to a parent
- // arena (root points to itself). The root tracks how many live arenas
- // reference it.
-
- // The low bit is tagged:
- // 0: pointer to parent
- // 1: count, left shifted by one
- UPB_ATOMIC(uintptr_t) parent_or_count;
-
- // All nodes that are fused together are in a singly-linked list.
- UPB_ATOMIC(upb_Arena*) next; // NULL at end of list.
-
- // The last element of the linked list. This is present only as an
- // optimization, so that we do not have to iterate over all members for every
- // fuse. Only significant for an arena root. In other cases it is ignored.
- UPB_ATOMIC(upb_Arena*) tail; // == self when no other list members.
-
- // Linked list of blocks to free/cleanup. Atomic only for the benefit of
- // upb_Arena_SpaceAllocated().
- UPB_ATOMIC(_upb_MemBlock*) blocks;
-};
-
-UPB_INLINE bool _upb_Arena_IsTaggedRefcount(uintptr_t parent_or_count) {
- return (parent_or_count & 1) == 1;
-}
-
-UPB_INLINE bool _upb_Arena_IsTaggedPointer(uintptr_t parent_or_count) {
- return (parent_or_count & 1) == 0;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_RefCountFromTagged(uintptr_t parent_or_count) {
- UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
- return parent_or_count >> 1;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_TaggedFromRefcount(uintptr_t refcount) {
- uintptr_t parent_or_count = (refcount << 1) | 1;
- UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
- return parent_or_count;
-}
-
-UPB_INLINE upb_Arena* _upb_Arena_PointerFromTagged(uintptr_t parent_or_count) {
- UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
- return (upb_Arena*)parent_or_count;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_TaggedFromPointer(upb_Arena* a) {
- uintptr_t parent_or_count = (uintptr_t)a;
- UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
- return parent_or_count;
-}
-
-UPB_INLINE upb_alloc* upb_Arena_BlockAlloc(upb_Arena* arena) {
- return (upb_alloc*)(arena->block_alloc & ~0x1);
-}
-
-UPB_INLINE uintptr_t upb_Arena_MakeBlockAlloc(upb_alloc* alloc,
- bool has_initial) {
- uintptr_t alloc_uint = (uintptr_t)alloc;
- UPB_ASSERT((alloc_uint & 1) == 0);
- return alloc_uint | (has_initial ? 1 : 0);
-}
-
-UPB_INLINE bool upb_Arena_HasInitialBlock(upb_Arena* arena) {
- return arena->block_alloc & 0x1;
-}
-
-
-#endif /* UPB_MEM_INTERNAL_ARENA_H_ */
-
#ifndef UPB_PORT_ATOMIC_H_
#define UPB_PORT_ATOMIC_H_
@@ -11876,300 +12431,49 @@
#endif // UPB_PORT_ATOMIC_H_
-#ifndef UPB_WIRE_READER_H_
-#define UPB_WIRE_READER_H_
-
-
-#ifndef UPB_WIRE_INTERNAL_SWAP_H_
-#define UPB_WIRE_INTERNAL_SWAP_H_
+#ifndef UPB_MESSAGE_COMPAT_H_
+#define UPB_MESSAGE_COMPAT_H_
#include <stdint.h>
+
// Must be last.
+// upb does not support mixing minitables from different sources but these
+// functions are still used by some existing users so for now we make them
+// available here. This may or may not change in the future so do not add
+// them to new code.
+
#ifdef __cplusplus
extern "C" {
#endif
-UPB_INLINE bool _upb_IsLittleEndian(void) {
- int x = 1;
- return *(char*)&x == 1;
-}
+const upb_Extension* upb_Message_ExtensionByIndex(const upb_Message* msg,
+ size_t index);
-UPB_INLINE uint32_t _upb_BigEndian_Swap32(uint32_t val) {
- if (_upb_IsLittleEndian()) return val;
-
- return ((val & 0xff) << 24) | ((val & 0xff00) << 8) |
- ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);
-}
-
-UPB_INLINE uint64_t _upb_BigEndian_Swap64(uint64_t val) {
- if (_upb_IsLittleEndian()) return val;
-
- return ((uint64_t)_upb_BigEndian_Swap32((uint32_t)val) << 32) |
- _upb_BigEndian_Swap32((uint32_t)(val >> 32));
-}
+// Returns the extension with the given field number, or NULL on failure.
+const upb_Extension* upb_Message_FindExtensionByNumber(const upb_Message* msg,
+ uint32_t field_number);
#ifdef __cplusplus
} /* extern "C" */
#endif
-#endif /* UPB_WIRE_INTERNAL_SWAP_H_ */
-
-#ifndef UPB_WIRE_TYPES_H_
-#define UPB_WIRE_TYPES_H_
-
-// A list of types as they are encoded on the wire.
-typedef enum {
- kUpb_WireType_Varint = 0,
- kUpb_WireType_64Bit = 1,
- kUpb_WireType_Delimited = 2,
- kUpb_WireType_StartGroup = 3,
- kUpb_WireType_EndGroup = 4,
- kUpb_WireType_32Bit = 5
-} upb_WireType;
-
-#endif /* UPB_WIRE_TYPES_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// The upb_WireReader interface is suitable for general-purpose parsing of
-// protobuf binary wire format. It is designed to be used along with
-// upb_EpsCopyInputStream for buffering, and all parsing routines in this file
-// assume that at least kUpb_EpsCopyInputStream_SlopBytes worth of data is
-// available to read without any bounds checks.
-
-#define kUpb_WireReader_WireTypeMask 7
-#define kUpb_WireReader_WireTypeBits 3
-
-typedef struct {
- const char* ptr;
- uint64_t val;
-} _upb_WireReader_ReadLongVarintRet;
-
-_upb_WireReader_ReadLongVarintRet _upb_WireReader_ReadLongVarint(
- const char* ptr, uint64_t val);
-
-static UPB_FORCEINLINE const char* _upb_WireReader_ReadVarint(const char* ptr,
- uint64_t* val,
- int maxlen,
- uint64_t maxval) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = (uint32_t)byte;
- return ptr + 1;
- }
- const char* start = ptr;
- _upb_WireReader_ReadLongVarintRet res =
- _upb_WireReader_ReadLongVarint(ptr, byte);
- if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) ||
- res.val > maxval) {
- return NULL; // Malformed.
- }
- *val = res.val;
- return res.ptr;
-}
-
-// Parses a tag into `tag`, and returns a pointer past the end of the tag, or
-// NULL if there was an error in the tag data.
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-static UPB_FORCEINLINE const char* upb_WireReader_ReadTag(const char* ptr,
- uint32_t* tag) {
- uint64_t val;
- ptr = _upb_WireReader_ReadVarint(ptr, &val, 5, UINT32_MAX);
- if (!ptr) return NULL;
- *tag = val;
- return ptr;
-}
-
-// Given a tag, returns the field number.
-UPB_INLINE uint32_t upb_WireReader_GetFieldNumber(uint32_t tag) {
- return tag >> kUpb_WireReader_WireTypeBits;
-}
-
-// Given a tag, returns the wire type.
-UPB_INLINE uint8_t upb_WireReader_GetWireType(uint32_t tag) {
- return tag & kUpb_WireReader_WireTypeMask;
-}
-
-UPB_INLINE const char* upb_WireReader_ReadVarint(const char* ptr,
- uint64_t* val) {
- return _upb_WireReader_ReadVarint(ptr, val, 10, UINT64_MAX);
-}
-
-// Skips data for a varint, returning a pointer past the end of the varint, or
-// NULL if there was an error in the varint data.
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_SkipVarint(const char* ptr) {
- uint64_t val;
- return upb_WireReader_ReadVarint(ptr, &val);
-}
-
-// Reads a varint indicating the size of a delimited field into `size`, or
-// NULL if there was an error in the varint data.
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_ReadSize(const char* ptr, int* size) {
- uint64_t size64;
- ptr = upb_WireReader_ReadVarint(ptr, &size64);
- if (!ptr || size64 >= INT32_MAX) return NULL;
- *size = size64;
- return ptr;
-}
-
-// Reads a fixed32 field, performing byte swapping if necessary.
-//
-// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_ReadFixed32(const char* ptr, void* val) {
- uint32_t uval;
- memcpy(&uval, ptr, 4);
- uval = _upb_BigEndian_Swap32(uval);
- memcpy(val, &uval, 4);
- return ptr + 4;
-}
-
-// Reads a fixed64 field, performing byte swapping if necessary.
-//
-// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_ReadFixed64(const char* ptr, void* val) {
- uint64_t uval;
- memcpy(&uval, ptr, 8);
- uval = _upb_BigEndian_Swap64(uval);
- memcpy(val, &uval, 8);
- return ptr + 8;
-}
-
-const char* _upb_WireReader_SkipGroup(const char* ptr, uint32_t tag,
- int depth_limit,
- upb_EpsCopyInputStream* stream);
-
-// Skips data for a group, returning a pointer past the end of the group, or
-// NULL if there was an error parsing the group. The `tag` argument should be
-// the start group tag that begins the group. The `depth_limit` argument
-// indicates how many levels of recursion the group is allowed to have before
-// reporting a parse error (this limit exists to protect against stack
-// overflow).
-//
-// TODO: evaluate how the depth_limit should be specified. Do users need
-// control over this?
-UPB_INLINE const char* upb_WireReader_SkipGroup(
- const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
- return _upb_WireReader_SkipGroup(ptr, tag, 100, stream);
-}
-
-UPB_INLINE const char* _upb_WireReader_SkipValue(
- const char* ptr, uint32_t tag, int depth_limit,
- upb_EpsCopyInputStream* stream) {
- switch (upb_WireReader_GetWireType(tag)) {
- case kUpb_WireType_Varint:
- return upb_WireReader_SkipVarint(ptr);
- case kUpb_WireType_32Bit:
- return ptr + 4;
- case kUpb_WireType_64Bit:
- return ptr + 8;
- case kUpb_WireType_Delimited: {
- int size;
- ptr = upb_WireReader_ReadSize(ptr, &size);
- if (!ptr) return NULL;
- ptr += size;
- return ptr;
- }
- case kUpb_WireType_StartGroup:
- return _upb_WireReader_SkipGroup(ptr, tag, depth_limit, stream);
- case kUpb_WireType_EndGroup:
- return NULL; // Should be handled before now.
- default:
- return NULL; // Unknown wire type.
- }
-}
-
-// Skips data for a wire value of any type, returning a pointer past the end of
-// the data, or NULL if there was an error parsing the group. The `tag` argument
-// should be the tag that was just parsed. The `depth_limit` argument indicates
-// how many levels of recursion a group is allowed to have before reporting a
-// parse error (this limit exists to protect against stack overflow).
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-//
-// TODO: evaluate how the depth_limit should be specified. Do users need
-// control over this?
-UPB_INLINE const char* upb_WireReader_SkipValue(
- const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
- return _upb_WireReader_SkipValue(ptr, tag, 100, stream);
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif // UPB_WIRE_READER_H_
-
-#ifndef UPB_MESSAGE_COPY_H_
-#define UPB_MESSAGE_COPY_H_
-
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Deep clones a message using the provided target arena.
-upb_Message* upb_Message_DeepClone(const upb_Message* message,
- const upb_MiniTable* mini_table,
- upb_Arena* arena);
-
-// Deep clones array contents.
-upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
- const upb_MiniTable* sub, upb_Arena* arena);
-
-// Deep clones map contents.
-upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
- upb_CType value_type,
- const upb_MiniTable* map_entry_table,
- upb_Arena* arena);
-
-// Deep copies the message from src to dst.
-bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table, upb_Arena* arena);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif // UPB_MESSAGE_COPY_H_
+#endif /* UPB_MESSAGE_COMPAT_H_ */
// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_
+#ifndef UPB_MESSAGE_INTERNAL_MAP_SORTER_H_
+#define UPB_MESSAGE_INTERNAL_MAP_SORTER_H_
#include <stdlib.h>
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
+#ifndef UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
+#define UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
+
+#include <stdint.h>
// Map entries aren't actually stored for map fields, they are only used during
@@ -12200,7 +12504,7 @@
upb_MapEntryData data;
} upb_MapEntry;
-#endif // UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
+#endif // UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
// Must be last.
@@ -12231,10 +12535,11 @@
}
UPB_INLINE void _upb_mapsorter_destroy(_upb_mapsorter* s) {
- if (s->entries) free(s->entries);
+ if (s->entries) upb_gfree(s->entries);
}
-UPB_INLINE bool _upb_sortedmap_next(_upb_mapsorter* s, const upb_Map* map,
+UPB_INLINE bool _upb_sortedmap_next(_upb_mapsorter* s,
+ const struct upb_Map* map,
_upb_sortedmap* sorted, upb_MapEntry* ent) {
if (sorted->pos == sorted->end) return false;
const upb_tabent* tabent = (const upb_tabent*)s->entries[sorted->pos++];
@@ -12247,9 +12552,9 @@
UPB_INLINE bool _upb_sortedmap_nextext(_upb_mapsorter* s,
_upb_sortedmap* sorted,
- const upb_Message_Extension** ext) {
+ const struct upb_Extension** ext) {
if (sorted->pos == sorted->end) return false;
- *ext = (const upb_Message_Extension*)s->entries[sorted->pos++];
+ *ext = (const struct upb_Extension*)s->entries[sorted->pos++];
return true;
}
@@ -12259,10 +12564,10 @@
}
bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
- const upb_Map* map, _upb_sortedmap* sorted);
+ const struct upb_Map* map, _upb_sortedmap* sorted);
bool _upb_mapsorter_pushexts(_upb_mapsorter* s,
- const upb_Message_Extension* exts, size_t count,
+ const struct upb_Extension* exts, size_t count,
_upb_sortedmap* sorted);
#ifdef __cplusplus
@@ -12270,11 +12575,101 @@
#endif
-#endif /* UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_ */
+#endif /* UPB_MESSAGE_INTERNAL_MAP_SORTER_H_ */
-#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
-#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
+#ifndef UPB_BASE_INTERNAL_LOG2_H_
+#define UPB_BASE_INTERNAL_LOG2_H_
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE int upb_Log2Ceiling(int x) {
+ if (x <= 1) return 0;
+#ifdef __GNUC__
+ return 32 - __builtin_clz(x - 1);
+#else
+ int lg2 = 0;
+ while ((1 << lg2) < x) lg2++;
+ return lg2;
+#endif
+}
+
+UPB_INLINE int upb_Log2CeilingSize(int x) { return 1 << upb_Log2Ceiling(x); }
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_BASE_INTERNAL_LOG2_H_ */
+
+#ifndef UPB_MESSAGE_COMPARE_H_
+#define UPB_MESSAGE_COMPARE_H_
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Compares two messages by serializing them and calling memcmp().
+UPB_API bool upb_Message_IsExactlyEqual(const upb_Message* msg1,
+ const upb_Message* msg2,
+ const upb_MiniTable* m);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_MESSAGE_COMPARE_H_
+
+#ifndef UPB_MESSAGE_COPY_H_
+#define UPB_MESSAGE_COPY_H_
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Deep clones a message using the provided target arena.
+upb_Message* upb_Message_DeepClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Shallow clones a message using the provided target arena.
+upb_Message* upb_Message_ShallowClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Deep clones array contents.
+upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
+ const upb_MiniTable* sub, upb_Arena* arena);
+
+// Deep clones map contents.
+upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
+ upb_CType value_type,
+ const upb_MiniTable* map_entry_table,
+ upb_Arena* arena);
+
+// Deep copies the message from src to dst.
+bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Shallow copies the message from src to dst.
+void upb_Message_ShallowCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_MESSAGE_COPY_H_
#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_
#define UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_
@@ -12330,6 +12725,10 @@
#endif // UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_
+#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
+#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
+
+
// Must be last.
// upb_MdDecoder: used internally for decoding MiniDescriptors for messages,
@@ -12456,6 +12855,541 @@
#endif // UPB_MINI_DESCRIPTOR_INTERNAL_MODIFIERS_H_
+#ifndef UPB_MINI_TABLE_COMPAT_H_
+#define UPB_MINI_TABLE_COMPAT_H_
+
+
+// Must be last.
+
+// upb does not support mixing minitables from different sources but these
+// functions are still used by some existing users so for now we make them
+// available here. This may or may not change in the future so do not add
+// them to new code.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Checks if memory layout of src is compatible with dst.
+bool upb_MiniTable_Compatible(const upb_MiniTable* src,
+ const upb_MiniTable* dst);
+
+typedef enum {
+ kUpb_MiniTableEquals_NotEqual,
+ kUpb_MiniTableEquals_Equal,
+ kUpb_MiniTableEquals_OutOfMemory,
+} upb_MiniTableEquals_Status;
+
+// Checks equality of mini tables originating from different language runtimes.
+upb_MiniTableEquals_Status upb_MiniTable_Equals(const upb_MiniTable* src,
+ const upb_MiniTable* dst);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_COMPAT_H_ */
+
+#ifndef UPB_HASH_INT_TABLE_H_
+#define UPB_HASH_INT_TABLE_H_
+
+
+// Must be last.
+
+typedef struct {
+ upb_table t; // For entries that don't fit in the array part.
+ const upb_tabval* array; // Array part of the table. See const note above.
+ size_t array_size; // Array part size.
+ size_t array_count; // Array part number of elements.
+} upb_inttable;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Initialize a table. If memory allocation failed, false is returned and
+// the table is uninitialized.
+bool upb_inttable_init(upb_inttable* table, upb_Arena* a);
+
+// Returns the number of values in the table.
+size_t upb_inttable_count(const upb_inttable* t);
+
+// Inserts the given key into the hashtable with the given value.
+// The key must not already exist in the hash table.
+// The value must not be UINTPTR_MAX.
+//
+// If a table resize was required but memory allocation failed, false is
+// returned and the table is unchanged.
+bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
+ upb_Arena* a);
+
+// Looks up key in this table, returning "true" if the key was found.
+// If v is non-NULL, copies the value for this key into *v.
+bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v);
+
+// Removes an item from the table. Returns true if the remove was successful,
+// and stores the removed item in *val if non-NULL.
+bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val);
+
+// Updates an existing entry in an inttable.
+// If the entry does not exist, returns false and does nothing.
+// Unlike insert/remove, this does not invalidate iterators.
+bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val);
+
+// Optimizes the table for the current set of entries, for both memory use and
+// lookup time. Client should call this after all entries have been inserted;
+// inserting more entries is legal, but will likely require a table resize.
+void upb_inttable_compact(upb_inttable* t, upb_Arena* a);
+
+// Iteration over inttable:
+//
+// intptr_t iter = UPB_INTTABLE_BEGIN;
+// uintptr_t key;
+// upb_value val;
+// while (upb_inttable_next(t, &key, &val, &iter)) {
+// // ...
+// }
+
+#define UPB_INTTABLE_BEGIN -1
+
+bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
+ intptr_t* iter);
+void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_HASH_INT_TABLE_H_ */
+
+#ifndef UPB_BASE_INTERNAL_ENDIAN_H_
+#define UPB_BASE_INTERNAL_ENDIAN_H_
+
+#include <stdint.h>
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE bool upb_IsLittleEndian(void) {
+ const int x = 1;
+ return *(char*)&x == 1;
+}
+
+UPB_INLINE uint32_t upb_BigEndian32(uint32_t val) {
+ if (upb_IsLittleEndian()) return val;
+
+ return ((val & 0xff) << 24) | ((val & 0xff00) << 8) |
+ ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);
+}
+
+UPB_INLINE uint64_t upb_BigEndian64(uint64_t val) {
+ if (upb_IsLittleEndian()) return val;
+
+ const uint64_t hi = ((uint64_t)upb_BigEndian32((uint32_t)val)) << 32;
+ const uint64_t lo = upb_BigEndian32((uint32_t)(val >> 32));
+ return hi | lo;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_BASE_INTERNAL_ENDIAN_H_ */
+
+#ifndef UPB_WIRE_INTERNAL_CONSTANTS_H_
+#define UPB_WIRE_INTERNAL_CONSTANTS_H_
+
+#define kUpb_WireFormat_DefaultDepthLimit 100
+
+// MessageSet wire format is:
+// message MessageSet {
+// repeated group Item = 1 {
+// required int32 type_id = 2;
+// required bytes message = 3;
+// }
+// }
+
+enum {
+ kUpb_MsgSet_Item = 1,
+ kUpb_MsgSet_TypeId = 2,
+ kUpb_MsgSet_Message = 3,
+};
+
+#endif /* UPB_WIRE_INTERNAL_CONSTANTS_H_ */
+
+/*
+ * Internal implementation details of the decoder that are shared between
+ * decode.c and decode_fast.c.
+ */
+
+#ifndef UPB_WIRE_INTERNAL_DECODER_H_
+#define UPB_WIRE_INTERNAL_DECODER_H_
+
+#include "utf8_range.h"
+
+// Must be last.
+
+#define DECODE_NOGROUP (uint32_t) - 1
+
+typedef struct upb_Decoder {
+ upb_EpsCopyInputStream input;
+ const upb_ExtensionRegistry* extreg;
+ const char* unknown; // Start of unknown data, preserve at buffer flip
+ upb_Message* unknown_msg; // Pointer to preserve data to
+ int depth; // Tracks recursion depth to bound stack usage.
+ uint32_t end_group; // field number of END_GROUP tag, else DECODE_NOGROUP.
+ uint16_t options;
+ bool missing_required;
+ union {
+ upb_Arena arena;
+ void* foo[UPB_ARENA_SIZE_HACK];
+ };
+ upb_DecodeStatus status;
+ jmp_buf err;
+
+#ifndef NDEBUG
+ const char* debug_tagstart;
+ const char* debug_valstart;
+#endif
+} upb_Decoder;
+
+/* Error function that will abort decoding with longjmp(). We can't declare this
+ * UPB_NORETURN, even though it is appropriate, because if we do then compilers
+ * will "helpfully" refuse to tailcall to it
+ * (see: https://stackoverflow.com/a/55657013), which will defeat a major goal
+ * of our optimizations. That is also why we must declare it in a separate file,
+ * otherwise the compiler will see that it calls longjmp() and deduce that it is
+ * noreturn. */
+const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status);
+
+extern const uint8_t upb_utf8_offsets[];
+
+UPB_INLINE
+bool _upb_Decoder_VerifyUtf8Inline(const char* ptr, int len) {
+ return utf8_range_IsValid(ptr, len);
+}
+
+const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
+ const upb_Message* msg,
+ const upb_MiniTable* m);
+
+/* x86-64 pointers always have the high 16 bits matching. So we can shift
+ * left 8 and right 8 without loss of information. */
+UPB_INLINE intptr_t decode_totable(const upb_MiniTable* tablep) {
+ return ((intptr_t)tablep << 8) | tablep->UPB_PRIVATE(table_mask);
+}
+
+UPB_INLINE const upb_MiniTable* decode_totablep(intptr_t table) {
+ return (const upb_MiniTable*)(table >> 8);
+}
+
+const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
+ const char* ptr, int overrun);
+
+UPB_INLINE bool _upb_Decoder_IsDone(upb_Decoder* d, const char** ptr) {
+ return upb_EpsCopyInputStream_IsDoneWithCallback(
+ &d->input, ptr, &_upb_Decoder_IsDoneFallback);
+}
+
+UPB_INLINE const char* _upb_Decoder_BufferFlipCallback(
+ upb_EpsCopyInputStream* e, const char* old_end, const char* new_start) {
+ upb_Decoder* d = (upb_Decoder*)e;
+ if (!old_end) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+
+ if (d->unknown) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(
+ d->unknown_msg, d->unknown, old_end - d->unknown, &d->arena)) {
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ d->unknown = new_start;
+ }
+ return new_start;
+}
+
+#if UPB_FASTTABLE
+UPB_INLINE
+const char* _upb_FastDecoder_TagDispatch(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t tag) {
+ const upb_MiniTable* table_p = decode_totablep(table);
+ uint8_t mask = table;
+ uint64_t data;
+ size_t idx = tag & mask;
+ UPB_ASSUME((idx & 7) == 0);
+ idx >>= 3;
+ data = table_p->UPB_PRIVATE(fasttable)[idx].field_data ^ tag;
+ UPB_MUSTTAIL return table_p->UPB_PRIVATE(fasttable)[idx].field_parser(
+ d, ptr, msg, table, hasbits, data);
+}
+#endif
+
+UPB_INLINE uint32_t _upb_FastDecoder_LoadTag(const char* ptr) {
+ uint16_t tag;
+ memcpy(&tag, ptr, 2);
+ return tag;
+}
+
+
+#endif /* UPB_WIRE_INTERNAL_DECODER_H_ */
+
+#ifndef UPB_WIRE_READER_H_
+#define UPB_WIRE_READER_H_
+
+
+#ifndef UPB_WIRE_INTERNAL_READER_H_
+#define UPB_WIRE_INTERNAL_READER_H_
+
+// Must be last.
+
+#define kUpb_WireReader_WireTypeBits 3
+#define kUpb_WireReader_WireTypeMask 7
+
+typedef struct {
+ const char* ptr;
+ uint64_t val;
+} UPB_PRIVATE(_upb_WireReader_LongVarint);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_PRIVATE(_upb_WireReader_LongVarint)
+UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val);
+
+static UPB_FORCEINLINE const char* UPB_PRIVATE(_upb_WireReader_ReadVarint)(
+ const char* ptr, uint64_t* val, int maxlen, uint64_t maxval) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = (uint32_t)byte;
+ return ptr + 1;
+ }
+ const char* start = ptr;
+ UPB_PRIVATE(_upb_WireReader_LongVarint)
+ res = UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(ptr, byte);
+ if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) ||
+ res.val > maxval) {
+ return NULL; // Malformed.
+ }
+ *val = res.val;
+ return res.ptr;
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(uint32_t tag) {
+ return tag >> kUpb_WireReader_WireTypeBits;
+}
+
+UPB_INLINE uint8_t UPB_PRIVATE(_upb_WireReader_GetWireType)(uint32_t tag) {
+ return tag & kUpb_WireReader_WireTypeMask;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_WIRE_INTERNAL_READER_H_
+
+#ifndef UPB_WIRE_TYPES_H_
+#define UPB_WIRE_TYPES_H_
+
+// A list of types as they are encoded on the wire.
+typedef enum {
+ kUpb_WireType_Varint = 0,
+ kUpb_WireType_64Bit = 1,
+ kUpb_WireType_Delimited = 2,
+ kUpb_WireType_StartGroup = 3,
+ kUpb_WireType_EndGroup = 4,
+ kUpb_WireType_32Bit = 5
+} upb_WireType;
+
+#endif /* UPB_WIRE_TYPES_H_ */
+
+// Must be last.
+
+// The upb_WireReader interface is suitable for general-purpose parsing of
+// protobuf binary wire format. It is designed to be used along with
+// upb_EpsCopyInputStream for buffering, and all parsing routines in this file
+// assume that at least kUpb_EpsCopyInputStream_SlopBytes worth of data is
+// available to read without any bounds checks.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Parses a tag into `tag`, and returns a pointer past the end of the tag, or
+// NULL if there was an error in the tag data.
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+static UPB_FORCEINLINE const char* upb_WireReader_ReadTag(const char* ptr,
+ uint32_t* tag) {
+ uint64_t val;
+ ptr = UPB_PRIVATE(_upb_WireReader_ReadVarint)(ptr, &val, 5, UINT32_MAX);
+ if (!ptr) return NULL;
+ *tag = val;
+ return ptr;
+}
+
+// Given a tag, returns the field number.
+UPB_INLINE uint32_t upb_WireReader_GetFieldNumber(uint32_t tag) {
+ return UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(tag);
+}
+
+// Given a tag, returns the wire type.
+UPB_INLINE uint8_t upb_WireReader_GetWireType(uint32_t tag) {
+ return UPB_PRIVATE(_upb_WireReader_GetWireType)(tag);
+}
+
+UPB_INLINE const char* upb_WireReader_ReadVarint(const char* ptr,
+ uint64_t* val) {
+ return UPB_PRIVATE(_upb_WireReader_ReadVarint)(ptr, val, 10, UINT64_MAX);
+}
+
+// Skips data for a varint, returning a pointer past the end of the varint, or
+// NULL if there was an error in the varint data.
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_SkipVarint(const char* ptr) {
+ uint64_t val;
+ return upb_WireReader_ReadVarint(ptr, &val);
+}
+
+// Reads a varint indicating the size of a delimited field into `size`, or
+// NULL if there was an error in the varint data.
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_ReadSize(const char* ptr, int* size) {
+ uint64_t size64;
+ ptr = upb_WireReader_ReadVarint(ptr, &size64);
+ if (!ptr || size64 >= INT32_MAX) return NULL;
+ *size = size64;
+ return ptr;
+}
+
+// Reads a fixed32 field, performing byte swapping if necessary.
+//
+// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_ReadFixed32(const char* ptr, void* val) {
+ uint32_t uval;
+ memcpy(&uval, ptr, 4);
+ uval = upb_BigEndian32(uval);
+ memcpy(val, &uval, 4);
+ return ptr + 4;
+}
+
+// Reads a fixed64 field, performing byte swapping if necessary.
+//
+// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_ReadFixed64(const char* ptr, void* val) {
+ uint64_t uval;
+ memcpy(&uval, ptr, 8);
+ uval = upb_BigEndian64(uval);
+ memcpy(val, &uval, 8);
+ return ptr + 8;
+}
+
+const char* UPB_PRIVATE(_upb_WireReader_SkipGroup)(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream);
+
+// Skips data for a group, returning a pointer past the end of the group, or
+// NULL if there was an error parsing the group. The `tag` argument should be
+// the start group tag that begins the group. The `depth_limit` argument
+// indicates how many levels of recursion the group is allowed to have before
+// reporting a parse error (this limit exists to protect against stack
+// overflow).
+//
+// TODO: evaluate how the depth_limit should be specified. Do users need
+// control over this?
+UPB_INLINE const char* upb_WireReader_SkipGroup(
+ const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
+ return UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, tag, 100, stream);
+}
+
+UPB_INLINE const char* _upb_WireReader_SkipValue(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream) {
+ switch (upb_WireReader_GetWireType(tag)) {
+ case kUpb_WireType_Varint:
+ return upb_WireReader_SkipVarint(ptr);
+ case kUpb_WireType_32Bit:
+ return ptr + 4;
+ case kUpb_WireType_64Bit:
+ return ptr + 8;
+ case kUpb_WireType_Delimited: {
+ int size;
+ ptr = upb_WireReader_ReadSize(ptr, &size);
+ if (!ptr) return NULL;
+ ptr += size;
+ return ptr;
+ }
+ case kUpb_WireType_StartGroup:
+ return UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, tag, depth_limit,
+ stream);
+ case kUpb_WireType_EndGroup:
+ return NULL; // Should be handled before now.
+ default:
+ return NULL; // Unknown wire type.
+ }
+}
+
+// Skips data for a wire value of any type, returning a pointer past the end of
+// the data, or NULL if there was an error parsing the group. The `tag` argument
+// should be the tag that was just parsed. The `depth_limit` argument indicates
+// how many levels of recursion a group is allowed to have before reporting a
+// parse error (this limit exists to protect against stack overflow).
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+//
+// TODO: evaluate how the depth_limit should be specified. Do users need
+// control over this?
+UPB_INLINE const char* upb_WireReader_SkipValue(
+ const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
+ return _upb_WireReader_SkipValue(ptr, tag, 100, stream);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_WIRE_READER_H_
+
+#ifndef UPB_LEX_STRTOD_H_
+#define UPB_LEX_STRTOD_H_
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+double _upb_NoLocaleStrtod(const char *str, char **endptr);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_LEX_STRTOD_H_ */
+
#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_ENCODE_H_
#define UPB_MINI_DESCRIPTOR_INTERNAL_ENCODE_H_
@@ -12894,7 +13828,7 @@
// features. This is used for feature resolution under Editions.
// NOLINTBEGIN
// clang-format off
-#define UPB_INTERNAL_UPB_EDITION_DEFAULTS "\n\021\022\014\010\001\020\002\030\002 \001(\0010\002\030\346\007\n\021\022\014\010\002\020\001\030\001 \002(\0010\001\030\347\007\n\021\022\014\010\001\020\001\030\001 \002(\0010\001\030\350\007 \346\007(\350\007"
+#define UPB_INTERNAL_UPB_EDITION_DEFAULTS "\n\021\022\014\010\001\020\002\030\002 \003(\0010\002\030\346\007\n\021\022\014\010\002\020\001\030\001 \002(\0010\001\030\347\007\n\021\022\014\010\001\020\001\030\001 \002(\0010\001\030\350\007 \346\007(\350\007"
// clang-format on
// NOLINTEND
@@ -13134,158 +14068,6 @@
#endif /* UPB_REFLECTION_METHOD_DEF_INTERNAL_H_ */
-#ifndef UPB_WIRE_INTERNAL_CONSTANTS_H_
-#define UPB_WIRE_INTERNAL_CONSTANTS_H_
-
-#define kUpb_WireFormat_DefaultDepthLimit 100
-
-// MessageSet wire format is:
-// message MessageSet {
-// repeated group Item = 1 {
-// required int32 type_id = 2;
-// required bytes message = 3;
-// }
-// }
-
-enum {
- kUpb_MsgSet_Item = 1,
- kUpb_MsgSet_TypeId = 2,
- kUpb_MsgSet_Message = 3,
-};
-
-#endif /* UPB_WIRE_INTERNAL_CONSTANTS_H_ */
-
-/*
- * Internal implementation details of the decoder that are shared between
- * decode.c and decode_fast.c.
- */
-
-#ifndef UPB_WIRE_INTERNAL_DECODE_H_
-#define UPB_WIRE_INTERNAL_DECODE_H_
-
-#include "utf8_range.h"
-
-// Must be last.
-
-#define DECODE_NOGROUP (uint32_t) - 1
-
-typedef struct upb_Decoder {
- upb_EpsCopyInputStream input;
- const upb_ExtensionRegistry* extreg;
- const char* unknown; // Start of unknown data, preserve at buffer flip
- upb_Message* unknown_msg; // Pointer to preserve data to
- int depth; // Tracks recursion depth to bound stack usage.
- uint32_t end_group; // field number of END_GROUP tag, else DECODE_NOGROUP.
- uint16_t options;
- bool missing_required;
- upb_Arena arena;
- upb_DecodeStatus status;
- jmp_buf err;
-
-#ifndef NDEBUG
- const char* debug_tagstart;
- const char* debug_valstart;
-#endif
-} upb_Decoder;
-
-/* Error function that will abort decoding with longjmp(). We can't declare this
- * UPB_NORETURN, even though it is appropriate, because if we do then compilers
- * will "helpfully" refuse to tailcall to it
- * (see: https://stackoverflow.com/a/55657013), which will defeat a major goal
- * of our optimizations. That is also why we must declare it in a separate file,
- * otherwise the compiler will see that it calls longjmp() and deduce that it is
- * noreturn. */
-const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status);
-
-extern const uint8_t upb_utf8_offsets[];
-
-UPB_INLINE
-bool _upb_Decoder_VerifyUtf8Inline(const char* ptr, int len) {
- const char* end = ptr + len;
-
- // Check 8 bytes at a time for any non-ASCII char.
- while (end - ptr >= 8) {
- uint64_t data;
- memcpy(&data, ptr, 8);
- if (data & 0x8080808080808080) goto non_ascii;
- ptr += 8;
- }
-
- // Check one byte at a time for non-ASCII.
- while (ptr < end) {
- if (*ptr & 0x80) goto non_ascii;
- ptr++;
- }
-
- return true;
-
-non_ascii:
- return utf8_range2((const unsigned char*)ptr, end - ptr) == 0;
-}
-
-const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
- const upb_Message* msg,
- const upb_MiniTable* l);
-
-/* x86-64 pointers always have the high 16 bits matching. So we can shift
- * left 8 and right 8 without loss of information. */
-UPB_INLINE intptr_t decode_totable(const upb_MiniTable* tablep) {
- return ((intptr_t)tablep << 8) | tablep->table_mask;
-}
-
-UPB_INLINE const upb_MiniTable* decode_totablep(intptr_t table) {
- return (const upb_MiniTable*)(table >> 8);
-}
-
-const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
- const char* ptr, int overrun);
-
-UPB_INLINE bool _upb_Decoder_IsDone(upb_Decoder* d, const char** ptr) {
- return upb_EpsCopyInputStream_IsDoneWithCallback(
- &d->input, ptr, &_upb_Decoder_IsDoneFallback);
-}
-
-UPB_INLINE const char* _upb_Decoder_BufferFlipCallback(
- upb_EpsCopyInputStream* e, const char* old_end, const char* new_start) {
- upb_Decoder* d = (upb_Decoder*)e;
- if (!old_end) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-
- if (d->unknown) {
- if (!_upb_Message_AddUnknown(d->unknown_msg, d->unknown,
- old_end - d->unknown, &d->arena)) {
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- d->unknown = new_start;
- }
- return new_start;
-}
-
-#if UPB_FASTTABLE
-UPB_INLINE
-const char* _upb_FastDecoder_TagDispatch(upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t tag) {
- const upb_MiniTable* table_p = decode_totablep(table);
- uint8_t mask = table;
- uint64_t data;
- size_t idx = tag & mask;
- UPB_ASSUME((idx & 7) == 0);
- idx >>= 3;
- data = table_p->fasttable[idx].field_data ^ tag;
- UPB_MUSTTAIL return table_p->fasttable[idx].field_parser(d, ptr, msg, table,
- hasbits, data);
-}
-#endif
-
-UPB_INLINE uint32_t _upb_FastDecoder_LoadTag(const char* ptr) {
- uint16_t tag;
- memcpy(&tag, ptr, 2);
- return tag;
-}
-
-
-#endif /* UPB_WIRE_INTERNAL_DECODE_H_ */
-
// This should #undef all macros #defined in def.inc
#undef UPB_SIZE
@@ -13299,6 +14081,7 @@
#undef UPB_ALIGN_DOWN
#undef UPB_ALIGN_MALLOC
#undef UPB_ALIGN_OF
+#undef UPB_ALIGN_AS
#undef UPB_MALLOC_ALIGN
#undef UPB_LIKELY
#undef UPB_UNLIKELY
@@ -13335,3 +14118,4 @@
#undef UPB_ATOMIC
#undef UPB_USE_C11_ATOMICS
#undef UPB_PRIVATE
+#undef UPB_ONLYBITS
diff --git a/php/tests/GeneratedServiceTest.php b/php/tests/GeneratedServiceTest.php
deleted file mode 100644
index be9234c..0000000
--- a/php/tests/GeneratedServiceTest.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-require_once('test_base.php');
-require_once('test_util.php');
-
-use Google\Protobuf\Internal\RepeatedField;
-use Google\Protobuf\Internal\MapField;
-use Google\Protobuf\Internal\GPBType;
-use Foo\Greeter;
-use Foo\HelloRequest;
-use Foo\HelloReply;
-
-class GeneratedServiceTest extends TestBase
-{
- /**
- * @var \ReflectionClass
- */
- private $serviceClass;
-
- /**
- * @var \ReflectionClass
- */
- private $namespacedServiceClass;
-
- /**
- * @var array
- */
- private $methodNames = [
- 'sayHello',
- 'sayHelloAgain'
- ];
-
- /**
- * Avoid calling setUp, which has void return type (not avalialbe in php7.0).
- *
- * @before
- */
- public function setUpTest()
- {
- $this->serviceClass = new ReflectionClass('Foo\GreeterInterface');
-
- $this->namespacedServiceClass = new ReflectionClass('Bar\OtherGreeterInterface');
- }
-
- public function testIsInterface()
- {
- $this->assertTrue($this->serviceClass->isInterface());
- }
-
- public function testPhpDocForClass()
- {
- $this->assertStringContains(
- 'foo.Greeter', $this->serviceClass->getDocComment());
- }
-
- public function testPhpDocForNamespacedClass()
- {
- $this->assertStringContains(
- 'foo.OtherGreeter', $this->namespacedServiceClass->getDocComment());
- }
-
- public function testServiceMethodsAreGenerated()
- {
- $this->assertCount(
- count($this->methodNames), $this->serviceClass->getMethods());
- foreach ($this->methodNames as $methodName) {
- $this->assertTrue($this->serviceClass->hasMethod($methodName));
- }
- }
-
- public function testPhpDocForServiceMethod()
- {
- foreach ($this->methodNames as $methodName) {
- $docComment =
- $this->serviceClass->getMethod($methodName)->getDocComment();
- $this->assertStringContains($methodName, $docComment);
- $this->assertStringContains(
- '@param \Foo\HelloRequest $request', $docComment);
- $this->assertStringContains(
- '@return \Foo\HelloReply', $docComment);
- }
- }
-
- public function testPhpDocForServiceMethodInNamespacedClass()
- {
- foreach ($this->methodNames as $methodName) {
- $docComment =
- $this->namespacedServiceClass->getMethod(
- $methodName)->getDocComment();
- $this->assertStringContains($methodName, $docComment);
- $this->assertStringContains(
- '@param \Foo\HelloRequest $request', $docComment);
- $this->assertStringContains(
- '@return \Foo\HelloReply', $docComment);
- }
- }
-
- public function testParamForServiceMethod()
- {
- foreach ($this->methodNames as $methodName) {
- $method = $this->serviceClass->getMethod($methodName);
- $this->assertCount(1, $method->getParameters());
- $param = $method->getParameters()[0];
- $this->assertFalse($param->isOptional());
- $this->assertSame('request', $param->getName());
- // ReflectionParameter::getType only exists in PHP 7+, so get the
- // type from __toString
- $this->assertStringContains(
- 'Foo\HelloRequest $request', (string) $param);
- }
- }
-
- public function testParamForServiceMethodInNamespacedClass()
- {
- foreach ($this->methodNames as $methodName) {
- $method = $this->serviceClass->getMethod($methodName);
- $this->assertCount(1, $method->getParameters());
- $param = $method->getParameters()[0];
- $this->assertFalse($param->isOptional());
- $this->assertSame('request', $param->getName());
- // ReflectionParameter::getType only exists in PHP 7+, so get the
- // type from __toString
- $this->assertStringContains(
- 'Foo\HelloRequest $request', (string) $param);
- }
- }
-}
diff --git a/php/tests/proto/test_service.proto b/php/tests/proto/test_service.proto
deleted file mode 100644
index a03dbc4..0000000
--- a/php/tests/proto/test_service.proto
+++ /dev/null
@@ -1,18 +0,0 @@
-syntax = "proto3";
-
-package foo;
-
-option php_generic_services = true;
-
-service Greeter {
- rpc SayHello (HelloRequest) returns (HelloReply) {}
- rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
-}
-
-message HelloRequest {
- string name = 1;
-}
-
-message HelloReply {
- string message = 1;
-}
diff --git a/php/tests/proto/test_service_namespace.proto b/php/tests/proto/test_service_namespace.proto
deleted file mode 100644
index 719aa48..0000000
--- a/php/tests/proto/test_service_namespace.proto
+++ /dev/null
@@ -1,13 +0,0 @@
-syntax = "proto3";
-
-import "proto/test_service.proto";
-
-package foo;
-
-option php_generic_services = true;
-option php_namespace = "Bar";
-
-service OtherGreeter {
- rpc SayHello (HelloRequest) returns (HelloReply) {}
- rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
-}
diff --git a/pkg/BUILD.bazel b/pkg/BUILD.bazel
index 340fbaf..55079a6 100644
--- a/pkg/BUILD.bazel
+++ b/pkg/BUILD.bazel
@@ -220,6 +220,7 @@
"//src/google/protobuf:lite_test_util",
"//src/google/protobuf:test_util",
"//src/google/protobuf:test_util2",
+ "//src/google/protobuf:unredacted_debug_format_for_test",
"//src/google/protobuf/compiler:annotation_test_util",
"//src/google/protobuf/compiler/cpp:unittest_lib",
"//src/google/protobuf/io:test_zero_copy_stream",
diff --git a/protobuf.bzl b/protobuf.bzl
index d96eeb4..3c8afcc 100644
--- a/protobuf.bzl
+++ b/protobuf.bzl
@@ -2,7 +2,6 @@
load("@rules_cc//cc:defs.bzl", "objc_library")
load("@rules_proto//proto:defs.bzl", "ProtoInfo")
load("@rules_python//python:defs.bzl", "py_library")
-load("@rules_ruby//ruby:defs.bzl", "ruby_library")
def _GetPath(ctx, path):
if ctx.label.workspace_root:
@@ -81,6 +80,7 @@
srcs = ctx.files.srcs
langs = ctx.attr.langs or []
out_type = ctx.attr.out_type
+ enable_editions = ctx.attr.enable_editions
deps = depset(direct = ctx.files.srcs)
source_dir = _SourceDir(ctx)
gen_dir = _GenDir(ctx).rstrip("/")
@@ -131,6 +131,8 @@
generated_files = []
for src in srcs:
args = []
+ if enable_editions:
+ args.append("--experimental_editions")
in_gen_dir = src.root.path == gen_dir
if in_gen_dir:
@@ -248,6 +250,7 @@
attrs = {
"srcs": attr.label_list(allow_files = True),
"deps": attr.label_list(providers = [ProtoGenInfo]),
+ "enable_editions": attr.bool(),
"includes": attr.string_list(),
"protoc": attr.label(
cfg = "exec",
@@ -407,11 +410,11 @@
includes = ["."],
default_runtime = Label("//:protobuf_objc"),
protoc = Label("//:protoc"),
+ enable_editions = False,
testonly = None,
visibility = ["//visibility:public"],
**kwargs):
- """Bazel rule to create a Objective-C protobuf library from proto source
- files
+ """Bazel rule to create a Objective-C protobuf library from proto sources
NOTE: the rule is only an internal workaround to generate protos. The
interface may change and the rule may be removed when bazel has introduced
@@ -424,9 +427,10 @@
outs: a list of expected output files.
proto_deps: a list of proto file dependencies that don't have a
objc_proto_library rule.
- include: a string indicating the include path of the .proto files.
+ includes: a string indicating the include path of the .proto files.
default_runtime: the Objective-C Protobuf runtime
protoc: the label of the protocol compiler to generate the sources.
+ enable_editions: if editions should be enabled while invoking the compiler.
testonly: common rule attribute (see:
https://bazel.build/reference/be/common-definitions#common-attributes)
visibility: the visibility of the generated files.
@@ -441,6 +445,7 @@
testonly = testonly,
srcs = proto_deps,
protoc = protoc,
+ enable_editions = enable_editions,
includes = includes,
)
full_deps.append(":%s_deps_genproto" % name)
@@ -455,6 +460,7 @@
out_type = "hdrs",
includes = includes,
protoc = protoc,
+ enable_editions = enable_editions,
testonly = testonly,
visibility = visibility,
tags = ["manual"],
@@ -468,6 +474,7 @@
out_type = "srcs",
includes = includes,
protoc = protoc,
+ enable_editions = enable_editions,
testonly = testonly,
visibility = visibility,
tags = ["manual"],
@@ -490,6 +497,7 @@
def internal_ruby_proto_library(
name,
+ ruby_library,
srcs = [],
deps = [],
includes = ["."],
@@ -506,6 +514,7 @@
Args:
name: the name of the ruby_proto_library.
+ ruby_library: the ruby library rules to use.
srcs: the .proto files to compile.
deps: a list of dependency labels; must be a internal_ruby_proto_library.
includes: a string indicating the include path of the .proto files.
diff --git a/protobuf_deps.bzl b/protobuf_deps.bzl
index 6e3f5b0..9be6815 100644
--- a/protobuf_deps.bzl
+++ b/protobuf_deps.bzl
@@ -72,8 +72,8 @@
_github_archive(
name = "rules_cc",
repo = "https://github.com/bazelbuild/rules_cc",
- commit = "818289e5613731ae410efb54218a4077fb9dbb03",
- sha256 = "0adbd6f567291ad526e82c765e15aed33cea5e256eeba129f1501142c2c56610",
+ commit = "c8c38f8c710cbbf834283e4777916b68261b359c", # 0.0.9
+ sha256 = "5f862a44bbd032e1b48ed53c9c211ba2a1da60e10c5baa01c97369c249299ecb",
)
if not native.existing_rule("rules_java"):
@@ -101,14 +101,6 @@
url = "https://github.com/bazelbuild/rules_python/releases/download/0.26.0/rules_python-0.26.0.tar.gz",
)
- if not native.existing_rule("rules_ruby"):
- _github_archive(
- name = "rules_ruby",
- repo = "https://github.com/protocolbuffers/rules_ruby",
- commit = "b7f3e9756f3c45527be27bc38840d5a1ba690436",
- sha256 = "347927fd8de6132099fcdc58e8f7eab7bde4eb2fd424546b9cd4f1c6f8f8bad8",
- )
-
if not native.existing_rule("rules_jvm_external"):
_github_archive(
name = "rules_jvm_external",
@@ -130,8 +122,8 @@
if not native.existing_rule("build_bazel_rules_apple"):
http_archive(
name = "build_bazel_rules_apple",
- sha256 = "f94e6dddf74739ef5cb30f000e13a2a613f6ebfa5e63588305a71fce8a8a9911",
- url = "https://github.com/bazelbuild/rules_apple/releases/download/1.1.3/rules_apple.1.1.3.tar.gz",
+ sha256 = "34c41bfb59cdaea29ac2df5a2fa79e5add609c71bb303b2ebb10985f93fa20e7",
+ url = "https://github.com/bazelbuild/rules_apple/releases/download/3.1.1/rules_apple.3.1.1.tar.gz",
)
if not native.existing_rule("io_bazel_rules_kotlin"):
diff --git a/protobuf_release.bzl b/protobuf_release.bzl
index 327ae9a..a79a303 100644
--- a/protobuf_release.bzl
+++ b/protobuf_release.bzl
@@ -7,44 +7,42 @@
load(":protobuf_version.bzl", "PROTOC_VERSION")
def _package_naming_impl(ctx):
- values = {}
- values["version"] = PROTOC_VERSION
+ values = {}
+ values["version"] = PROTOC_VERSION
- # infer from the current cpp toolchain.
- toolchain = find_cpp_toolchain(ctx)
- cpu = toolchain.cpu
- system_name = toolchain.target_gnu_system_name
+ # infer from the current cpp toolchain.
+ toolchain = find_cpp_toolchain(ctx)
+ cpu = toolchain.cpu
+ system_name = toolchain.target_gnu_system_name
- # rename cpus to match what we want artifacts to be
- if cpu == "systemz":
- cpu = "s390_64"
- elif cpu == "aarch64":
- cpu = "aarch_64"
- elif cpu == "ppc64":
- cpu = "ppcle_64"
+ # rename cpus to match what we want artifacts to be
+ if cpu == "systemz":
+ cpu = "s390_64"
+ elif cpu == "aarch64":
+ cpu = "aarch_64"
+ elif cpu == "ppc64":
+ cpu = "ppcle_64"
- # use the system name to determine the os and then create platform names
- if "apple" in system_name:
- values["platform"] = "osx-" + cpu
- elif "linux" in system_name:
- values["platform"] = "linux-" + cpu
- elif "mingw" in system_name:
- if cpu == "x86_64":
- values["platform"] = "win64"
+ # use the system name to determine the os and then create platform names
+ if "apple" in system_name:
+ values["platform"] = "osx-" + cpu
+ elif "linux" in system_name:
+ values["platform"] = "linux-" + cpu
+ elif "mingw" in system_name:
+ if cpu == "x86_64":
+ values["platform"] = "win64"
+ else:
+ values["platform"] = "win32"
else:
- values["platform"] = "win32"
- else:
- values["platform"] = "unknown"
+ values["platform"] = "unknown"
- return PackageVariablesInfo(values = values)
-
+ return PackageVariablesInfo(values = values)
package_naming = rule(
- implementation = _package_naming_impl,
+ implementation = _package_naming_impl,
attrs = {
- # Necessary data dependency for find_cpp_toolchain.
- "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")),
+ # Necessary data dependency for find_cpp_toolchain.
+ "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")),
},
toolchains = ["@bazel_tools//tools/cpp:toolchain_type"],
- incompatible_use_toolchain_transition = True,
)
diff --git a/protos/BUILD b/protos/BUILD
index d037b60..460089b 100644
--- a/protos/BUILD
+++ b/protos/BUILD
@@ -35,8 +35,6 @@
"//upb:mem",
"//upb:message",
"//upb:message_copy",
- "//upb:message_types",
- "//upb:port",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/strings",
],
@@ -56,14 +54,13 @@
":protos_extension_lock",
"//upb:base",
"//upb:mem",
- "//upb:message_accessors_internal",
+ "//upb:message",
"//upb:message_copy",
- "//upb:message_internal",
"//upb:message_promote",
- "//upb:message_types",
"//upb:mini_table",
"//upb:wire",
- "//upb:wire_types",
+ "//upb:wire_reader",
+ "//upb/message:internal",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
@@ -133,10 +130,11 @@
copts = UPB_DEFAULT_CPPOPTS,
deps = [
":protos_internal",
- "@com_google_googletest//:gtest_main",
- "//upb:mem",
"//protos_generator/tests:test_model_upb_cc_proto",
"//protos_generator/tests:test_model_upb_proto",
+ "//upb:mem",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -151,6 +149,7 @@
srcs = ["repeated_field_iterator_test.cc"],
deps = [
":repeated_field",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
@@ -159,12 +158,13 @@
name = "protos_extension_lock_test",
srcs = ["protos_extension_lock_test.cc"],
deps = [
- "@com_google_googletest//:gtest_main",
- "//upb:mem",
"//protos",
"//protos:protos_extension_lock",
"//protos_generator/tests:test_model_upb_cc_proto",
+ "//upb:mem",
"@com_google_absl//absl/hash",
"@com_google_absl//absl/log:absl_check",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
diff --git a/protos/bazel/BUILD b/protos/bazel/BUILD
index ea91541..7381375 100644
--- a/protos/bazel/BUILD
+++ b/protos/bazel/BUILD
@@ -18,8 +18,8 @@
srcs = ["upb_cc_proto_library.bzl"],
visibility = ["//visibility:public"],
deps = [
- "@bazel_skylib//lib:paths",
"//bazel:upb_proto_library_bzl",
+ "@bazel_skylib//lib:paths",
"@bazel_tools//tools/cpp:toolchain_utils.bzl",
],
)
diff --git a/protos/bazel/upb_cc_proto_library.bzl b/protos/bazel/upb_cc_proto_library.bzl
index b59ae65..cacf709 100644
--- a/protos/bazel/upb_cc_proto_library.bzl
+++ b/protos/bazel/upb_cc_proto_library.bzl
@@ -22,6 +22,7 @@
def use_cpp_toolchain():
return ["@bazel_tools//tools/cpp:toolchain_type"]
+
# end:github_only
# Generic support code #########################################################
@@ -267,7 +268,6 @@
attr_aspects = ["deps"],
fragments = ["cpp"],
toolchains = use_cpp_toolchain(),
- incompatible_use_toolchain_transition = True,
)
upb_cc_proto_library = rule(
diff --git a/protos/protos.cc b/protos/protos.cc
index 29b9fbe..6522405 100644
--- a/protos/protos.cc
+++ b/protos/protos.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "protos/protos.h"
@@ -41,8 +18,8 @@
#include "upb/mem/arena.h"
#include "upb/message/copy.h"
#include "upb/message/internal/extension.h"
+#include "upb/message/message.h"
#include "upb/message/promote.h"
-#include "upb/message/types.h"
#include "upb/mini_table/extension.h"
#include "upb/mini_table/extension_registry.h"
#include "upb/mini_table/message.h"
@@ -138,14 +115,15 @@
const upb_MiniTableExtension* eid) {
MessageLock msg_lock(msg);
return _upb_Message_Getext(msg, eid) != nullptr ||
- upb_MiniTable_FindUnknown(msg, eid->field.number, 0).status ==
- kUpb_FindUnknown_Ok;
+ upb_Message_FindUnknown(msg, upb_MiniTableExtension_Number(eid), 0)
+ .status == kUpb_FindUnknown_Ok;
}
-const upb_Message_Extension* GetOrPromoteExtension(
- upb_Message* msg, const upb_MiniTableExtension* eid, upb_Arena* arena) {
+const upb_Extension* GetOrPromoteExtension(upb_Message* msg,
+ const upb_MiniTableExtension* eid,
+ upb_Arena* arena) {
MessageLock msg_lock(msg);
- const upb_Message_Extension* ext = _upb_Message_Getext(msg, eid);
+ const upb_Extension* ext = _upb_Message_Getext(msg, eid);
if (ext == nullptr) {
upb_GetExtension_Status ext_status = upb_MiniTable_GetOrPromoteExtension(
(upb_Message*)msg, eid, 0, arena, &ext);
@@ -185,7 +163,7 @@
absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
const upb_MiniTableExtension* ext,
upb_Message* extension, upb_Arena* extension_arena) {
- upb_Message_Extension* msg_ext =
+ upb_Extension* msg_ext =
_upb_Message_GetOrCreateExtension(message, ext, message_arena);
if (!msg_ext) {
return MessageAllocationError();
@@ -193,8 +171,9 @@
if (message_arena != extension_arena) {
// Try fuse, if fusing is not allowed or fails, create copy of extension.
if (!upb_Arena_Fuse(message_arena, extension_arena)) {
- msg_ext->data.ptr =
- DeepClone(extension, msg_ext->ext->sub.submsg, message_arena);
+ msg_ext->data.ptr = DeepClone(
+ extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext),
+ message_arena);
return absl::OkStatus();
}
}
@@ -205,14 +184,15 @@
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
const upb_MiniTableExtension* ext,
const upb_Message* extension) {
- upb_Message_Extension* msg_ext =
+ upb_Extension* msg_ext =
_upb_Message_GetOrCreateExtension(message, ext, message_arena);
if (!msg_ext) {
return MessageAllocationError();
}
// Clone extension into target message arena.
msg_ext->data.ptr =
- DeepClone(extension, msg_ext->ext->sub.submsg, message_arena);
+ DeepClone(extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext),
+ message_arena);
return absl::OkStatus();
}
diff --git a/protos/protos.h b/protos/protos.h
index 195d793..0521e33 100644
--- a/protos/protos.h
+++ b/protos/protos.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_PROTOS_PROTOS_H_
#define UPB_PROTOS_PROTOS_H_
@@ -41,6 +18,7 @@
#include "upb/message/copy.h"
#include "upb/message/internal/accessors.h"
#include "upb/message/internal/extension.h"
+#include "upb/mini_table/extension.h"
#include "upb/wire/decode.h"
#include "upb/wire/encode.h"
@@ -94,7 +72,7 @@
#endif
private:
- Ptr(void* msg, upb_Arena* arena) : p_(msg, arena) {} // NOLINT
+ Ptr(upb_Message* msg, upb_Arena* arena) : p_(msg, arena) {} // NOLINT
friend class Ptr<const T>;
friend typename T::Access;
@@ -154,11 +132,11 @@
return message->msg();
}
template <typename T>
- static auto Proxy(void* p, upb_Arena* arena) {
+ static auto Proxy(upb_Message* p, upb_Arena* arena) {
return typename T::Proxy(p, arena);
}
template <typename T>
- static auto CProxy(const void* p, upb_Arena* arena) {
+ static auto CProxy(const upb_Message* p, upb_Arena* arena) {
return typename T::CProxy(p, arena);
}
};
@@ -174,7 +152,7 @@
}
template <typename T>
-typename T::Proxy CreateMessageProxy(void* msg, upb_Arena* arena) {
+typename T::Proxy CreateMessageProxy(upb_Message* msg, upb_Arena* arena) {
return typename T::Proxy(msg, arena);
}
@@ -245,8 +223,9 @@
bool HasExtensionOrUnknown(const upb_Message* msg,
const upb_MiniTableExtension* eid);
-const upb_Message_Extension* GetOrPromoteExtension(
- upb_Message* msg, const upb_MiniTableExtension* eid, upb_Arena* arena);
+const upb_Extension* GetOrPromoteExtension(upb_Message* msg,
+ const upb_MiniTableExtension* eid,
+ upb_Arena* arena);
void DeepCopy(upb_Message* target, const upb_Message* source,
const upb_MiniTable* mini_table, upb_Arena* arena);
@@ -431,14 +410,15 @@
Ptr<T> message,
const ::protos::internal::ExtensionIdentifier<Extendee, Extension>& id) {
// TODO: Fix const correctness issues.
- const upb_Message_Extension* ext = ::protos::internal::GetOrPromoteExtension(
+ const upb_Extension* ext = ::protos::internal::GetOrPromoteExtension(
const_cast<upb_Message*>(internal::GetInternalMsg(message)),
id.mini_table_ext(), ::protos::internal::GetArena(message));
if (!ext) {
- return ExtensionNotFoundError(id.mini_table_ext()->field.number);
+ return ExtensionNotFoundError(
+ upb_MiniTableExtension_Number(id.mini_table_ext()));
}
return Ptr<const Extension>(::protos::internal::CreateMessage<Extension>(
- ext->data.ptr, ::protos::internal::GetArena(message)));
+ (upb_Message*)ext->data.ptr, ::protos::internal::GetArena(message)));
}
template <typename T, typename Extendee, typename Extension,
diff --git a/protos/protos_extension_lock.cc b/protos/protos_extension_lock.cc
index dbb2fc2..ba53342 100644
--- a/protos/protos_extension_lock.cc
+++ b/protos/protos_extension_lock.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "protos/protos_extension_lock.h"
diff --git a/protos/protos_extension_lock.h b/protos/protos_extension_lock.h
index 36d66f1..6abe9b4 100644
--- a/protos/protos_extension_lock.h
+++ b/protos/protos_extension_lock.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_PROTOS_PROTOS_EXTENSION_LOCK_H_
#define UPB_PROTOS_PROTOS_EXTENSION_LOCK_H_
diff --git a/protos/protos_extension_lock_test.cc b/protos/protos_extension_lock_test.cc
index a0ce399..9c2444b 100644
--- a/protos/protos_extension_lock_test.cc
+++ b/protos/protos_extension_lock_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "protos/protos_extension_lock.h"
diff --git a/protos/protos_internal.h b/protos/protos_internal.h
index 0a1f194..e973368 100644
--- a/protos/protos_internal.h
+++ b/protos/protos_internal.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_PROTOS_PROTOS_INTERNAL_H_
#define UPB_PROTOS_PROTOS_INTERNAL_H_
diff --git a/protos/protos_internal_test.cc b/protos/protos_internal_test.cc
index a173665..237f045 100644
--- a/protos/protos_internal_test.cc
+++ b/protos/protos_internal_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "protos/protos_internal.h"
@@ -49,8 +26,8 @@
protos_generator_test_TestModel_set_int_value_with_default(message, 123);
// Move ownership.
- TestModel model =
- protos::internal::MoveMessage<TestModel>(message, source_arena);
+ TestModel model = protos::internal::MoveMessage<TestModel>(
+ (upb_Message*)message, source_arena);
// Now that we have moved ownership, free original arena.
upb_Arena_Free(source_arena);
EXPECT_EQ(model.int_value_with_default(), 123);
diff --git a/protos/protos_traits.h b/protos/protos_traits.h
index 92b9dc3..7b4fe2e 100644
--- a/protos/protos_traits.h
+++ b/protos/protos_traits.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef THIRD_PARTY_UPB_PROTOS_PROTOS_TRAITS_H_
#define THIRD_PARTY_UPB_PROTOS_PROTOS_TRAITS_H_
diff --git a/protos/repeated_field.h b/protos/repeated_field.h
index da42c44..b1b1aa2 100644
--- a/protos/repeated_field.h
+++ b/protos/repeated_field.h
@@ -1,36 +1,15 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_PROTOS_REPEATED_FIELD_H_
#define UPB_PROTOS_REPEATED_FIELD_H_
+#include <assert.h>
+
#include <cstddef>
#include <iterator>
#include <type_traits>
@@ -43,13 +22,9 @@
#include "upb/mem/arena.h"
#include "upb/message/array.h"
#include "upb/message/copy.h"
-#include "upb/message/types.h"
-
-// Must be last:
-#include "upb/port/def.inc"
+#include "upb/message/message.h"
namespace protos {
-
namespace internal {
// Shared implementation of repeated fields for absl::string_view and
@@ -161,9 +136,11 @@
}
iterator begin() const {
- return iterator({static_cast<upb_Message**>(
- const_cast<void*>(upb_Array_DataPtr(this->arr_))),
- this->arena_});
+ return iterator(
+ {static_cast<upb_Message**>(
+ this->arr_ ? const_cast<void*>(upb_Array_DataPtr(this->arr_))
+ : nullptr),
+ this->arena_});
}
iterator end() const { return begin() + this->size(); }
reverse_iterator rbegin() const { return reverse_iterator(end()); }
@@ -208,9 +185,9 @@
void push_back(T t) {
upb_MessageValue message_value;
// Copy string to arena.
- UPB_ASSERT(this->arena_);
+ assert(this->arena_);
char* data = (char*)upb_Arena_Malloc(this->arena_, t.size());
- UPB_ASSERT(data);
+ assert(data);
memcpy(data, t.data(), t.size());
message_value.str_val = upb_StringView_FromDataAndSize(data, t.size());
upb_Array_Append(this->arr_, message_value, this->arena_);
@@ -320,6 +297,4 @@
} // namespace protos
-#include "upb/port/undef.inc"
-
#endif // UPB_PROTOS_REPEATED_FIELD_H_
diff --git a/protos/repeated_field_iterator.h b/protos/repeated_field_iterator.h
index 6ae25de..27af26b 100644
--- a/protos/repeated_field_iterator.h
+++ b/protos/repeated_field_iterator.h
@@ -1,32 +1,10 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
#ifndef UPB_PROTOS_REPEATED_FIELD_ITERATOR_H_
#define UPB_PROTOS_REPEATED_FIELD_ITERATOR_H_
@@ -40,11 +18,7 @@
#include "upb/base/string_view.h"
#include "upb/mem/arena.h"
#include "upb/message/array.h"
-#include "upb/message/copy.h"
-
-// Must be last:
-#include "upb/message/types.h"
-#include "upb/port/def.inc"
+#include "upb/message/message.h"
namespace protos {
namespace internal {
diff --git a/protos/repeated_field_iterator_test.cc b/protos/repeated_field_iterator_test.cc
index a8de900..593ee07 100644
--- a/protos/repeated_field_iterator_test.cc
+++ b/protos/repeated_field_iterator_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "protos/repeated_field_iterator.h"
diff --git a/protos_generator/BUILD b/protos_generator/BUILD
index ac8cfec..d76c944 100644
--- a/protos_generator/BUILD
+++ b/protos_generator/BUILD
@@ -56,12 +56,12 @@
":names",
":output",
"//:protobuf",
- "@com_google_absl//absl/container:flat_hash_set",
- "@com_google_absl//absl/strings",
"//upb_generator:common",
"//upb_generator:file_layout",
"//upb_generator:keywords",
"//upb_generator:names",
+ "@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_absl//absl/strings",
],
)
diff --git a/protos_generator/gen_accessors.cc b/protos_generator/gen_accessors.cc
index 5a121c8..44a0cc6 100644
--- a/protos_generator/gen_accessors.cc
+++ b/protos_generator/gen_accessors.cc
@@ -325,7 +325,7 @@
$5* msg_value;
$7bool success = $4_$9_get(msg_, $8, &msg_value);
if (success) {
- return ::protos::internal::CreateMessage<$6>(msg_value, arena_);
+ return ::protos::internal::CreateMessage<$6>(UPB_UPCAST(msg_value), arena_);
}
return absl::NotFoundError("");
}
diff --git a/protos_generator/gen_messages.cc b/protos_generator/gen_messages.cc
index 89ca861..03c48ea 100644
--- a/protos_generator/gen_messages.cc
+++ b/protos_generator/gen_messages.cc
@@ -181,8 +181,8 @@
output(
R"cc(
private:
- const void* msg() const { return msg_; }
- void* msg() { return msg_; }
+ const upb_Message* msg() const { return UPB_UPCAST(msg_); }
+ upb_Message* msg() { return UPB_UPCAST(msg_); }
$0(upb_Message* msg, upb_Arena* arena) : $0Access() {
msg_ = ($1*)msg;
@@ -242,9 +242,10 @@
output(
R"cc(
private:
- void* msg() const { return msg_; }
+ upb_Message* msg() const { return UPB_UPCAST(msg_); }
- $0Proxy(void* msg, upb_Arena* arena) : internal::$0Access(($1*)msg, arena) {}
+ $0Proxy(upb_Message* msg, upb_Arena* arena)
+ : internal::$0Access(($1*)msg, arena) {}
friend $0::Proxy(::protos::CreateMessage<$0>(::protos::Arena& arena));
friend $0::Proxy(::protos::internal::CreateMessageProxy<$0>(
upb_Message*, upb_Arena*));
@@ -295,9 +296,9 @@
R"cc(
private:
using AsNonConst = $0Proxy;
- const void* msg() const { return msg_; }
+ const upb_Message* msg() const { return UPB_UPCAST(msg_); }
- $0CProxy(const void* msg, upb_Arena* arena)
+ $0CProxy(const upb_Message* msg, upb_Arena* arena)
: internal::$0Access(($1*)msg, arena){};
friend struct ::protos::internal::PrivateAccess;
friend class RepeatedFieldProxy;
@@ -340,7 +341,7 @@
}
$0::$0(const $0& from) : $0Access() {
arena_ = owned_arena_.ptr();
- msg_ = ($1*)::protos::internal::DeepClone(from.msg_, &$2, arena_);
+ msg_ = ($1*)::protos::internal::DeepClone(UPB_UPCAST(from.msg_), &$2, arena_);
}
$0::$0(const CProxy& from) : $0Access() {
arena_ = owned_arena_.ptr();
@@ -354,7 +355,7 @@
}
$0& $0::operator=(const $3& from) {
arena_ = owned_arena_.ptr();
- msg_ = ($1*)::protos::internal::DeepClone(from.msg_, &$2, arena_);
+ msg_ = ($1*)::protos::internal::DeepClone(UPB_UPCAST(from.msg_), &$2, arena_);
return *this;
}
$0& $0::operator=(const CProxy& from) {
diff --git a/protos_generator/tests/BUILD b/protos_generator/tests/BUILD
index c47a71f..8ebb985 100644
--- a/protos_generator/tests/BUILD
+++ b/protos_generator/tests/BUILD
@@ -124,12 +124,13 @@
copts = UPB_DEFAULT_CPPOPTS,
deps = [
# begin:google_only
-# ":legacy_name_test_proto",
+ # ":legacy_name_test_proto",
# end:google_only
":no_package_upb_cc_proto",
":test_model_upb_cc_proto",
":test_model_upb_proto",
":naming_conflict_upb_cc_proto",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
diff --git a/protos_generator/tests/test_generated.cc b/protos_generator/tests/test_generated.cc
index 14638af..ffa3d5c 100644
--- a/protos_generator/tests/test_generated.cc
+++ b/protos_generator/tests/test_generated.cc
@@ -5,6 +5,7 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+#include <iterator>
#include <limits>
#include <memory>
#include <string>
@@ -571,6 +572,19 @@
EXPECT_EQ(test_model.mutable_child_models()->size(), 0);
}
+TEST(CppGeneratedCode, EmptyRepeatedFieldProxyForMessages) {
+ ::protos::Arena arena;
+ auto test_model = ::protos::CreateMessage<TestModel>(arena);
+ EXPECT_EQ(0, test_model.child_models().size());
+ ChildModel1 child1;
+ child1.set_child_str1(kTestStr1);
+
+ EXPECT_EQ(test_model.child_models().size(), 0);
+ EXPECT_EQ(std::distance(test_model.child_models().begin(),
+ test_model.child_models().end()),
+ 0);
+}
+
TEST(CppGeneratedCode, RepeatedFieldProxyForMessagesIndexOperator) {
::protos::Arena arena;
auto test_model = ::protos::CreateMessage<TestModel>(arena);
diff --git a/python/BUILD.bazel b/python/BUILD.bazel
index f604bad..325a56b 100644
--- a/python/BUILD.bazel
+++ b/python/BUILD.bazel
@@ -13,6 +13,7 @@
# begin:github_only
load("@rules_pkg//:mappings.bzl", "pkg_files")
load("//python:build_targets.bzl", "build_targets")
+
build_targets(name = "python")
# end:github_only
@@ -20,7 +21,7 @@
package(
# begin:google_only
-# default_applicable_licenses = ["//upb:license"],
+ # default_applicable_licenses = ["//upb:license"],
# end:google_only
default_visibility = ["//python/dist:__pkg__"],
)
@@ -136,10 +137,10 @@
# begin:github_only
_message_target_compatible_with = {
- "@platforms//os:windows": ["@platforms//:incompatible"],
- "@system_python//:none": ["@platforms//:incompatible"],
- "@system_python//:unsupported": ["@platforms//:incompatible"],
- "//conditions:default": [],
+ "@platforms//os:windows": ["@platforms//:incompatible"],
+ "@system_python//:none": ["@platforms//:incompatible"],
+ "@system_python//:unsupported": ["@platforms//:incompatible"],
+ "//conditions:default": [],
}
# end:github_only
@@ -176,7 +177,7 @@
"unknown_fields.h",
],
# begin:google_only
-# compatible_with = ["//buildenv/target:non_prod"],
+ # compatible_with = ["//buildenv/target:non_prod"],
# end:google_only
)
@@ -190,19 +191,19 @@
],
target_compatible_with = select(_message_target_compatible_with),
deps = [
+ "//third_party/utf8_range",
+ "//upb:base",
"//upb:descriptor_upb_proto_reflection",
"//upb:eps_copy_input_stream",
- "//upb:hash",
"//upb:message",
"//upb:message_copy",
"//upb:port",
"//upb:reflection",
"//upb:text",
"//upb:wire_reader",
- "//upb:wire_types",
+ "//upb/hash",
"//upb/util:compare",
"//upb/util:def_to_proto",
"//upb/util:required_fields",
- "//third_party/utf8_range",
],
)
diff --git a/python/build_targets.bzl b/python/build_targets.bzl
index 81a166f..05ed163 100644
--- a/python/build_targets.bzl
+++ b/python/build_targets.bzl
@@ -121,7 +121,6 @@
deps = [
":proto_api",
"//:protobuf",
- "//src/google/protobuf:descriptor_legacy",
] + select({
"//conditions:default": [],
":use_fast_cpp_protos": ["//external:python_headers"],
@@ -426,6 +425,20 @@
text_format_failure_list = "//conformance:text_format_failure_list_python_cpp.txt",
)
+ conformance_test(
+ name = "conformance_test_upb",
+ env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "upb"},
+ failure_list = "//conformance:failure_list_python_upb.txt",
+ target_compatible_with = select({
+ "@system_python//:none": ["@platforms//:incompatible"],
+ ":use_fast_cpp_protos": ["@platforms//:incompatible"],
+ "//conditions:default": [],
+ }),
+ maximum_edition = "2023",
+ testee = "//conformance:conformance_python",
+ text_format_failure_list = "//conformance:text_format_failure_list_python_upb.txt",
+ )
+
################################################################################
# Distribution files
################################################################################
diff --git a/python/convert.c b/python/convert.c
index 0c1174b..0b26bdc 100644
--- a/python/convert.c
+++ b/python/convert.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/convert.h"
@@ -264,7 +241,7 @@
// Use the object's bytes if they are valid UTF-8.
char* ptr;
if (PyBytes_AsStringAndSize(obj, &ptr, &size) < 0) return false;
- if (utf8_range2((const unsigned char*)ptr, size) != 0) {
+ if (!utf8_range_IsValid(ptr, size)) {
// Invalid UTF-8. Try to convert the message to a Python Unicode
// object, even though we know this will fail, just to get the
// idiomatic Python error message.
diff --git a/python/convert.h b/python/convert.h
index 1c594d3..a2bd200 100644
--- a/python/convert.h
+++ b/python/convert.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_CONVERT_H__
#define PYUPB_CONVERT_H__
diff --git a/python/descriptor.c b/python/descriptor.c
index 42e4bfe..c5af6dd 100644
--- a/python/descriptor.c
+++ b/python/descriptor.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/descriptor.h"
@@ -35,6 +12,7 @@
#include "python/descriptor_pool.h"
#include "python/message.h"
#include "python/protobuf.h"
+#include "upb/base/upcast.h"
#include "upb/reflection/def.h"
#include "upb/util/def_to_proto.h"
@@ -49,6 +27,7 @@
PyObject* pool; // We own a ref.
const void* def; // Type depends on the class. Kept alive by "pool".
PyObject* options; // NULL if not present or not cached.
+ PyObject* features; // NULL if not present or not cached.
PyObject* message_meta; // We own a ref.
} PyUpb_DescriptorBase;
@@ -72,6 +51,7 @@
base->pool = PyUpb_DescriptorPool_Get(upb_FileDef_Pool(file));
base->def = def;
base->options = NULL;
+ base->features = NULL;
base->message_meta = NULL;
PyUpb_ObjCache_Add(def, &base->ob_base);
@@ -105,11 +85,12 @@
return (PyUpb_DescriptorBase*)obj;
}
-static PyObject* PyUpb_DescriptorBase_GetOptions(PyUpb_DescriptorBase* self,
- const upb_Message* opts,
- const upb_MiniTable* layout,
- const char* msg_name) {
- if (!self->options) {
+static PyObject* PyUpb_DescriptorBase_GetCached(PyObject** cached,
+ const upb_Message* opts,
+ const upb_MiniTable* layout,
+ const char* msg_name,
+ const char* strip_field) {
+ if (!*cached) {
// Load descriptors protos if they are not loaded already. We have to do
// this lazily, otherwise, it would lead to circular imports.
PyObject* mod = PyImport_ImportModuleLevel(PYUPB_DESCRIPTOR_MODULE, NULL,
@@ -142,12 +123,34 @@
(void)ds;
assert(ds == kUpb_DecodeStatus_Ok);
- self->options = PyUpb_Message_Get(opts2, m, py_arena);
+ if (strip_field) {
+ const upb_FieldDef* field =
+ upb_MessageDef_FindFieldByName(m, strip_field);
+ assert(field);
+ upb_Message_ClearFieldByDef(opts2, field);
+ }
+
+ *cached = PyUpb_Message_Get(opts2, m, py_arena);
Py_DECREF(py_arena);
}
- Py_INCREF(self->options);
- return self->options;
+ Py_INCREF(*cached);
+ return *cached;
+}
+
+static PyObject* PyUpb_DescriptorBase_GetOptions(PyObject** cached,
+ const upb_Message* opts,
+ const upb_MiniTable* layout,
+ const char* msg_name) {
+ return PyUpb_DescriptorBase_GetCached(cached, opts, layout, msg_name,
+ "features");
+}
+
+static PyObject* PyUpb_DescriptorBase_GetFeatures(PyObject** cached,
+ const upb_Message* opts) {
+ return PyUpb_DescriptorBase_GetCached(
+ cached, opts, &google__protobuf__FeatureSet_msg_init,
+ PYUPB_DESCRIPTOR_PROTO_PACKAGE ".FeatureSet", NULL);
}
typedef void* PyUpb_ToProto_Func(const void* def, upb_Arena* arena);
@@ -216,6 +219,7 @@
Py_CLEAR(base->message_meta);
Py_CLEAR(base->pool);
Py_CLEAR(base->options);
+ Py_CLEAR(base->features);
PyUpb_Dealloc(base);
}
@@ -388,10 +392,17 @@
static PyObject* PyUpb_Descriptor_GetOptions(PyObject* _self, PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_MessageDef_Options(self->def), &google__protobuf__MessageOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_MessageDef_Options(self->def)),
+ &google__protobuf__MessageOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".MessageOptions");
}
+static PyObject* PyUpb_Descriptor_GetFeatures(PyObject* _self, PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_MessageDef_ResolvedFeatures(self->def)));
+}
+
static PyObject* PyUpb_Descriptor_CopyToProto(PyObject* _self,
PyObject* py_proto) {
return PyUpb_DescriptorBase_CopyToProto(
@@ -638,18 +649,6 @@
return PyUpb_ByNameMap_New(&funcs, self->def, self->pool);
}
-static PyObject* PyUpb_Descriptor_GetSyntax(PyObject* self, void* closure) {
- PyErr_WarnEx(NULL,
- "descriptor.syntax is deprecated. It will be removed soon. "
- "Most usages are checking field descriptors. Consider to use "
- "has_presence, is_packed on field descriptors.",
- 1);
- const upb_MessageDef* msgdef = PyUpb_Descriptor_GetDef(self);
- const char* syntax =
- upb_MessageDef_Syntax(msgdef) == kUpb_Syntax_Proto2 ? "proto2" : "proto3";
- return PyUnicode_InternFromString(syntax);
-}
-
static PyGetSetDef PyUpb_Descriptor_Getters[] = {
{"name", PyUpb_Descriptor_GetName, NULL, "Last name"},
{"full_name", PyUpb_Descriptor_GetFullName, NULL, "Full name"},
@@ -684,17 +683,11 @@
"Containing type"},
{"is_extendable", PyUpb_Descriptor_GetIsExtendable, NULL},
{"has_options", PyUpb_Descriptor_GetHasOptions, NULL, "Has Options"},
- // begin:github_only
- {"syntax", &PyUpb_Descriptor_GetSyntax, NULL, "Syntax"},
- // end:github_only
- // begin:google_only
-// // TODO Use this to open-source syntax deprecation.
-// {"deprecated_syntax", &PyUpb_Descriptor_GetSyntax, NULL, "Syntax"},
- // end:google_only
{NULL}};
static PyMethodDef PyUpb_Descriptor_Methods[] = {
{"GetOptions", PyUpb_Descriptor_GetOptions, METH_NOARGS},
+ {"_GetFeatures", PyUpb_Descriptor_GetFeatures, METH_NOARGS},
{"CopyToProto", PyUpb_Descriptor_CopyToProto, METH_O},
{"EnumValueName", PyUpb_Descriptor_EnumValueName, METH_VARARGS},
{NULL}};
@@ -708,10 +701,10 @@
{0, NULL}};
static PyType_Spec PyUpb_Descriptor_Spec = {
- PYUPB_MODULE_NAME ".Descriptor", // tp_name
- sizeof(PyUpb_DescriptorBase), // tp_basicsize
- 0, // tp_itemsize
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
+ PYUPB_MODULE_NAME ".Descriptor", // tp_name
+ sizeof(PyUpb_DescriptorBase), // tp_basicsize
+ 0, // tp_itemsize
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
PyUpb_Descriptor_Slots,
};
@@ -817,10 +810,18 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_EnumDef_Options(self->def), &google__protobuf__EnumOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_EnumDef_Options(self->def)),
+ &google__protobuf__EnumOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".EnumOptions");
}
+static PyObject* PyUpb_EnumDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_EnumDef_ResolvedFeatures(self->def)));
+}
+
static PyObject* PyUpb_EnumDescriptor_CopyToProto(PyObject* _self,
PyObject* py_proto) {
return PyUpb_DescriptorBase_CopyToProto(
@@ -847,6 +848,7 @@
static PyMethodDef PyUpb_EnumDescriptor_Methods[] = {
{"GetOptions", PyUpb_EnumDescriptor_GetOptions, METH_NOARGS},
+ {"_GetFeatures", PyUpb_EnumDescriptor_GetFeatures, METH_NOARGS},
{"CopyToProto", PyUpb_EnumDescriptor_CopyToProto, METH_O},
{NULL}};
@@ -907,11 +909,19 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_EnumValueDef_Options(self->def),
+ &self->options, UPB_UPCAST(upb_EnumValueDef_Options(self->def)),
&google__protobuf__EnumValueOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".EnumValueOptions");
}
+static PyObject* PyUpb_EnumValueDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features,
+ UPB_UPCAST(upb_EnumValueDef_ResolvedFeatures(self->def)));
+}
+
static PyGetSetDef PyUpb_EnumValueDescriptor_Getters[] = {
{"name", PyUpb_EnumValueDescriptor_GetName, NULL, "name"},
{"number", PyUpb_EnumValueDescriptor_GetNumber, NULL, "number"},
@@ -927,6 +937,11 @@
PyUpb_EnumValueDescriptor_GetOptions,
METH_NOARGS,
},
+ {
+ "_GetFeatures",
+ PyUpb_EnumValueDescriptor_GetFeatures,
+ METH_NOARGS,
+ },
{NULL}};
static PyType_Slot PyUpb_EnumValueDescriptor_Slots[] = {
@@ -1108,10 +1123,18 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_FieldDef_Options(self->def), &google__protobuf__FieldOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_FieldDef_Options(self->def)),
+ &google__protobuf__FieldOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".FieldOptions");
}
+static PyObject* PyUpb_FieldDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_FieldDef_ResolvedFeatures(self->def)));
+}
+
static PyGetSetDef PyUpb_FieldDescriptor_Getters[] = {
{"full_name", (getter)PyUpb_FieldDescriptor_GetFullName, NULL, "Full name"},
{"name", (getter)PyUpb_FieldDescriptor_GetName, NULL, "Unqualified name"},
@@ -1155,6 +1178,11 @@
PyUpb_FieldDescriptor_GetOptions,
METH_NOARGS,
},
+ {
+ "_GetFeatures",
+ PyUpb_FieldDescriptor_GetFeatures,
+ METH_NOARGS,
+ },
{NULL}};
static PyType_Slot PyUpb_FieldDescriptor_Slots[] = {
@@ -1203,26 +1231,34 @@
static const void* PyUpb_FileDescriptor_LookupMessage(
const upb_FileDef* filedef, const char* name) {
- return PyUpb_FileDescriptor_NestedLookup(
+ const upb_MessageDef* m = PyUpb_FileDescriptor_NestedLookup(
filedef, name, (void*)&upb_DefPool_FindMessageByName);
+ if (!m) return NULL;
+ return upb_MessageDef_File(m) == filedef ? m : NULL;
}
static const void* PyUpb_FileDescriptor_LookupEnum(const upb_FileDef* filedef,
const char* name) {
- return PyUpb_FileDescriptor_NestedLookup(filedef, name,
- (void*)&upb_DefPool_FindEnumByName);
+ const upb_EnumDef* e = PyUpb_FileDescriptor_NestedLookup(
+ filedef, name, (void*)&upb_DefPool_FindEnumByName);
+ if (!e) return NULL;
+ return upb_EnumDef_File(e) == filedef ? e : NULL;
}
static const void* PyUpb_FileDescriptor_LookupExtension(
const upb_FileDef* filedef, const char* name) {
- return PyUpb_FileDescriptor_NestedLookup(
+ const upb_FieldDef* f = PyUpb_FileDescriptor_NestedLookup(
filedef, name, (void*)&upb_DefPool_FindExtensionByName);
+ if (!f) return NULL;
+ return upb_FieldDef_File(f) == filedef ? f : NULL;
}
static const void* PyUpb_FileDescriptor_LookupService(
const upb_FileDef* filedef, const char* name) {
- return PyUpb_FileDescriptor_NestedLookup(
+ const upb_ServiceDef* s = PyUpb_FileDescriptor_NestedLookup(
filedef, name, (void*)&upb_DefPool_FindServiceByName);
+ if (!s) return NULL;
+ return upb_ServiceDef_File(s) == filedef ? s : NULL;
}
static PyObject* PyUpb_FileDescriptor_GetName(PyUpb_DescriptorBase* self,
@@ -1331,17 +1367,10 @@
return PyUpb_GenericSequence_New(&funcs, self->def, self->pool);
}
-static PyObject* PyUpb_FileDescriptor_GetSyntax(PyObject* _self,
- void* closure) {
- PyErr_WarnEx(NULL,
- "descriptor.syntax is deprecated. It will be removed soon. "
- "Most usages are checking field descriptors. Consider to use "
- "has_presence, is_packed on field descriptors.",
- 1);
+static PyObject* PyUpb_FileDescriptor_GetEdition(PyObject* _self,
+ void* closure) {
PyUpb_DescriptorBase* self = (void*)_self;
- const char* syntax =
- upb_FileDef_Syntax(self->def) == kUpb_Syntax_Proto2 ? "proto2" : "proto3";
- return PyUnicode_FromString(syntax);
+ return PyLong_FromLong(upb_FileDef_Edition(self->def));
}
static PyObject* PyUpb_FileDescriptor_GetHasOptions(PyObject* _self,
@@ -1354,10 +1383,18 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_FileDef_Options(self->def), &google__protobuf__FileOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_FileDef_Options(self->def)),
+ &google__protobuf__FileOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".FileOptions");
}
+static PyObject* PyUpb_FileDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_FileDef_ResolvedFeatures(self->def)));
+}
+
static PyObject* PyUpb_FileDescriptor_CopyToProto(PyObject* _self,
PyObject* py_proto) {
return PyUpb_DescriptorBase_CopyToProto(
@@ -1384,19 +1421,13 @@
{"public_dependencies", PyUpb_FileDescriptor_GetPublicDependencies, NULL,
"Dependencies"},
{"has_options", PyUpb_FileDescriptor_GetHasOptions, NULL, "Has Options"},
- // begin:github_only
- {"syntax", PyUpb_FileDescriptor_GetSyntax, (setter)NULL, "Syntax"},
- // end:github_only
- // begin:google_only
-// // TODO Use this to open-source syntax deprecation.
-// {"deprecated_syntax", PyUpb_FileDescriptor_GetSyntax, (setter)NULL,
-// "Syntax"},
- // end:google_only
+ {"edition", PyUpb_FileDescriptor_GetEdition, (setter)NULL, "Edition"},
{NULL},
};
static PyMethodDef PyUpb_FileDescriptor_Methods[] = {
{"GetOptions", PyUpb_FileDescriptor_GetOptions, METH_NOARGS},
+ {"_GetFeatures", PyUpb_FileDescriptor_GetFeatures, METH_NOARGS},
{"CopyToProto", PyUpb_FileDescriptor_CopyToProto, METH_O},
{NULL}};
@@ -1486,10 +1517,18 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_MethodDef_Options(self->def), &google__protobuf__MethodOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_MethodDef_Options(self->def)),
+ &google__protobuf__MethodOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".MethodOptions");
}
+static PyObject* PyUpb_MethodDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_MethodDef_ResolvedFeatures(self->def)));
+}
+
static PyObject* PyUpb_MethodDescriptor_CopyToProto(PyObject* _self,
PyObject* py_proto) {
return PyUpb_DescriptorBase_CopyToProto(
@@ -1516,6 +1555,7 @@
static PyMethodDef PyUpb_MethodDescriptor_Methods[] = {
{"GetOptions", PyUpb_MethodDescriptor_GetOptions, METH_NOARGS},
+ {"_GetFeatures", PyUpb_MethodDescriptor_GetFeatures, METH_NOARGS},
{"CopyToProto", PyUpb_MethodDescriptor_CopyToProto, METH_O},
{NULL}};
@@ -1594,10 +1634,18 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_OneofDef_Options(self->def), &google__protobuf__OneofOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_OneofDef_Options(self->def)),
+ &google__protobuf__OneofOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".OneofOptions");
}
+static PyObject* PyUpb_OneofDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_OneofDef_ResolvedFeatures(self->def)));
+}
+
static PyGetSetDef PyUpb_OneofDescriptor_Getters[] = {
{"name", PyUpb_OneofDescriptor_GetName, NULL, "Name"},
{"full_name", PyUpb_OneofDescriptor_GetFullName, NULL, "Full name"},
@@ -1609,7 +1657,9 @@
{NULL}};
static PyMethodDef PyUpb_OneofDescriptor_Methods[] = {
- {"GetOptions", PyUpb_OneofDescriptor_GetOptions, METH_NOARGS}, {NULL}};
+ {"GetOptions", PyUpb_OneofDescriptor_GetOptions, METH_NOARGS},
+ {"_GetFeatures", PyUpb_OneofDescriptor_GetFeatures, METH_NOARGS},
+ {NULL}};
static PyType_Slot PyUpb_OneofDescriptor_Slots[] = {
DESCRIPTOR_BASE_SLOTS,
@@ -1694,10 +1744,18 @@
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
- self, upb_ServiceDef_Options(self->def), &google__protobuf__ServiceOptions_msg_init,
+ &self->options, UPB_UPCAST(upb_ServiceDef_Options(self->def)),
+ &google__protobuf__ServiceOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".ServiceOptions");
}
+static PyObject* PyUpb_ServiceDescriptor_GetFeatures(PyObject* _self,
+ PyObject* args) {
+ PyUpb_DescriptorBase* self = (void*)_self;
+ return PyUpb_DescriptorBase_GetFeatures(
+ &self->features, UPB_UPCAST(upb_ServiceDef_ResolvedFeatures(self->def)));
+}
+
static PyObject* PyUpb_ServiceDescriptor_CopyToProto(PyObject* _self,
PyObject* py_proto) {
return PyUpb_DescriptorBase_CopyToProto(
@@ -1731,6 +1789,7 @@
static PyMethodDef PyUpb_ServiceDescriptor_Methods[] = {
{"GetOptions", PyUpb_ServiceDescriptor_GetOptions, METH_NOARGS},
+ {"_GetFeatures", PyUpb_ServiceDescriptor_GetFeatures, METH_NOARGS},
{"CopyToProto", PyUpb_ServiceDescriptor_CopyToProto, METH_O},
{"FindMethodByName", PyUpb_ServiceDescriptor_FindMethodByName, METH_O},
{NULL}};
diff --git a/python/descriptor.h b/python/descriptor.h
index 7fa0164..013f1d8 100644
--- a/python/descriptor.h
+++ b/python/descriptor.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_DESCRIPTOR_H__
#define PYUPB_DESCRIPTOR_H__
diff --git a/python/descriptor_containers.c b/python/descriptor_containers.c
index e1eacb2..05751a0 100644
--- a/python/descriptor_containers.c
+++ b/python/descriptor_containers.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/descriptor_containers.h"
diff --git a/python/descriptor_containers.h b/python/descriptor_containers.h
index 5b2b1fa..cd9f8cc 100644
--- a/python/descriptor_containers.h
+++ b/python/descriptor_containers.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_DESCRIPTOR_CONTAINERS_H__
#define PYUPB_DESCRIPTOR_CONTAINERS_H__
diff --git a/python/descriptor_pool.c b/python/descriptor_pool.c
index 00612f8..089d31b 100644
--- a/python/descriptor_pool.c
+++ b/python/descriptor_pool.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/descriptor_pool.h"
@@ -35,6 +12,7 @@
#include "python/descriptor.h"
#include "python/message.h"
#include "python/protobuf.h"
+#include "upb/base/upcast.h"
#include "upb/reflection/def.h"
#include "upb/util/def_to_proto.h"
@@ -170,8 +148,7 @@
static bool PyUpb_DescriptorPool_LoadDependentFiles(
PyUpb_DescriptorPool* self, google_protobuf_FileDescriptorProto* proto) {
size_t n;
- const upb_StringView* deps =
- google_protobuf_FileDescriptorProto_dependency(proto, &n);
+ const upb_StringView* deps = google_protobuf_FileDescriptorProto_dependency(proto, &n);
for (size_t i = 0; i < n; i++) {
const upb_FileDef* dep = upb_DefPool_FindFileByNameWithSize(
self->symtab, deps[i].data, deps[i].size);
@@ -214,14 +191,13 @@
if (file) {
// If the existing file is equal to the new file, then silently ignore the
// duplicate add.
- google_protobuf_FileDescriptorProto* existing =
- upb_FileDef_ToProto(file, arena);
+ google_protobuf_FileDescriptorProto* existing = upb_FileDef_ToProto(file, arena);
if (!existing) {
PyErr_SetNone(PyExc_MemoryError);
goto done;
}
const upb_MessageDef* m = PyUpb_DescriptorPool_GetFileProtoDef();
- if (upb_Message_IsEqual(proto, existing, m)) {
+ if (upb_Message_IsEqual(UPB_UPCAST(proto), UPB_UPCAST(existing), m)) {
result = PyUpb_FileDescriptor_Get(file);
goto done;
}
@@ -304,6 +280,48 @@
return PyUpb_DescriptorPool_DoAdd(_self, file_desc);
}
+static PyObject* PyUpb_DescriptorPool_SetFeatureSetDefaults(
+ PyObject* _self, PyObject* defaults) {
+ if (!PyUpb_Message_Verify(defaults)) {
+ return PyErr_Format(PyExc_TypeError,
+ "SetFeatureSetDefaults called with invalid type");
+ }
+ const upb_MessageDef* m = PyUpb_Message_GetMsgdef(defaults);
+ const char* file_proto_name =
+ PYUPB_DESCRIPTOR_PROTO_PACKAGE ".FeatureSetDefaults";
+ if (strcmp(upb_MessageDef_FullName(m), file_proto_name) != 0) {
+ return PyErr_Format(
+ PyExc_TypeError,
+ "SetFeatureSetDefaults called with invalid type: got %s, expected %s",
+ upb_MessageDef_FullName(m), file_proto_name);
+ }
+ PyObject* subargs = PyTuple_New(0);
+ if (!subargs) return NULL;
+ PyObject* py_serialized =
+ PyUpb_Message_SerializeToString(defaults, subargs, NULL);
+ Py_DECREF(subargs);
+ if (!py_serialized) return NULL;
+ char* serialized;
+ Py_ssize_t size;
+ if (PyBytes_AsStringAndSize(py_serialized, &serialized, &size) < 0) {
+ goto err;
+ }
+
+ PyUpb_DescriptorPool* self = (PyUpb_DescriptorPool*)_self;
+ upb_Status status;
+ if (!upb_DefPool_SetFeatureSetDefaults(self->symtab, serialized, size,
+ &status)) {
+ PyErr_SetString(PyExc_ValueError, upb_Status_ErrorMessage(&status));
+ goto err;
+ }
+
+ Py_DECREF(py_serialized);
+ Py_RETURN_NONE;
+err:
+ Py_DECREF(py_serialized);
+ return NULL;
+}
+
/*
* PyUpb_DescriptorPool_FindFileByName()
*
@@ -595,6 +613,8 @@
"Adds the FileDescriptorProto and its types to this pool."},
{"AddSerializedFile", PyUpb_DescriptorPool_AddSerializedFile, METH_O,
"Adds a serialized FileDescriptorProto to this pool."},
+ {"SetFeatureSetDefaults", PyUpb_DescriptorPool_SetFeatureSetDefaults,
+ METH_O, "Sets the default feature mappings used during the build."},
{"FindFileByName", PyUpb_DescriptorPool_FindFileByName, METH_O,
"Searches for a file descriptor by its .proto name."},
{"FindMessageTypeByName", PyUpb_DescriptorPool_FindMessageTypeByName,
diff --git a/python/descriptor_pool.h b/python/descriptor_pool.h
index ae50ef0..2283b96 100644
--- a/python/descriptor_pool.h
+++ b/python/descriptor_pool.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_DESCRIPTOR_POOL_H__
#define PYUPB_DESCRIPTOR_POOL_H__
diff --git a/python/extension_dict.c b/python/extension_dict.c
index d4b4dda..34e1f9b 100644
--- a/python/extension_dict.c
+++ b/python/extension_dict.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/extension_dict.h"
diff --git a/python/extension_dict.h b/python/extension_dict.h
index 99d2add..9db01cd 100644
--- a/python/extension_dict.h
+++ b/python/extension_dict.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_EXTENSION_DICT_H__
#define PYUPB_EXTENSION_DICT_H__
diff --git a/python/google/protobuf/descriptor.py b/python/google/protobuf/descriptor.py
index fb16bb4..29885ff 100755
--- a/python/google/protobuf/descriptor.py
+++ b/python/google/protobuf/descriptor.py
@@ -1179,24 +1179,23 @@
Attributes:
name (str): Name of file, relative to root of source tree.
package (str): Name of the package
- syntax (str): string indicating syntax of the file (can be "proto2" or
- "proto3")
+ edition (Edition): Enum value indicating edition of the file
serialized_pb (bytes): Byte string of serialized
:class:`descriptor_pb2.FileDescriptorProto`.
dependencies (list[FileDescriptor]): List of other :class:`FileDescriptor`
objects this :class:`FileDescriptor` depends on.
public_dependencies (list[FileDescriptor]): A subset of
:attr:`dependencies`, which were declared as "public".
- message_types_by_name (dict(str, Descriptor)): Mapping from message names
- to their :class:`Descriptor`.
+ message_types_by_name (dict(str, Descriptor)): Mapping from message names to
+ their :class:`Descriptor`.
enum_types_by_name (dict(str, EnumDescriptor)): Mapping from enum names to
their :class:`EnumDescriptor`.
extensions_by_name (dict(str, FieldDescriptor)): Mapping from extension
names declared at file scope to their :class:`FieldDescriptor`.
services_by_name (dict(str, ServiceDescriptor)): Mapping from services'
names to their :class:`ServiceDescriptor`.
- pool (DescriptorPool): The pool this descriptor belongs to. When not
- passed to the constructor, the global default pool is used.
+ pool (DescriptorPool): The pool this descriptor belongs to. When not passed
+ to the constructor, the global default pool is used.
"""
if _USE_C_DESCRIPTORS:
@@ -1260,7 +1259,6 @@
self.message_types_by_name = {}
self.name = name
self.package = package
- self._deprecated_syntax = syntax or "proto2"
self.serialized_pb = serialized_pb
self.enum_types_by_name = {}
@@ -1269,15 +1267,6 @@
self.dependencies = (dependencies or [])
self.public_dependencies = (public_dependencies or [])
- @property
- def syntax(self):
- warnings.warn(
- 'descriptor.syntax is deprecated. It will be removed'
- ' soon. Most usages are checking field descriptors. Consider to use'
- ' has_presence, is_packed on field descriptors.'
- )
- return self._deprecated_syntax
-
def CopyToProto(self, proto):
"""Copies this to a descriptor_pb2.FileDescriptorProto.
@@ -1290,6 +1279,13 @@
def _parent(self):
return None
+ @property
+ def edition(self):
+ # pylint: disable=g-import-not-at-top
+ from google.protobuf import descriptor_pb2
+
+ return descriptor_pb2.Edition.Value(self._edition)
+
def _ParseOptions(message, string):
"""Parses serialized options.
diff --git a/python/google/protobuf/descriptor_pool.py b/python/google/protobuf/descriptor_pool.py
index 10ad72d..bf3476f 100644
--- a/python/google/protobuf/descriptor_pool.py
+++ b/python/google/protobuf/descriptor_pool.py
@@ -703,6 +703,10 @@
# pylint: disable=g-import-not-at-top
from google.protobuf import descriptor_pb2
+ if not isinstance(defaults, descriptor_pb2.FeatureSetDefaults):
+ raise TypeError('SetFeatureSetDefaults called with invalid type')
+
+
if defaults.minimum_edition > defaults.maximum_edition:
raise ValueError(
'Invalid edition range %s to %s'
@@ -717,7 +721,14 @@
if d.edition == descriptor_pb2.Edition.EDITION_UNKNOWN:
raise ValueError('Invalid edition EDITION_UNKNOWN specified')
if prev_edition >= d.edition:
- raise ValueError('Feature set defaults are not strictly increasing')
+ raise ValueError(
+ 'Feature set defaults are not strictly increasing. %s is greater'
+ ' than or equal to %s'
+ % (
+ descriptor_pb2.Edition.Name(prev_edition),
+ descriptor_pb2.Edition.Name(d.edition),
+ )
+ )
prev_edition = d.edition
self._edition_defaults = defaults
diff --git a/python/google/protobuf/internal/descriptor_pool_test.py b/python/google/protobuf/internal/descriptor_pool_test.py
index 69fab8f..8f3bdeb 100644
--- a/python/google/protobuf/internal/descriptor_pool_test.py
+++ b/python/google/protobuf/internal/descriptor_pool_test.py
@@ -132,6 +132,51 @@
self.assertRaises(KeyError, self.pool.FindFileContainingSymbol,
'google.protobuf.python.internal.Factory1Message.none_field')
+ def testCrossFileMessageTypesByName(self):
+ self.assertIs(
+ descriptor_pool_test1_pb2.DescriptorPoolTest1.DESCRIPTOR,
+ descriptor_pool_test1_pb2.DESCRIPTOR.message_types_by_name[
+ 'DescriptorPoolTest1'
+ ],
+ )
+ with self.assertRaises(KeyError):
+ descriptor_pool_test2_pb2.DESCRIPTOR.message_types_by_name[
+ 'DescriptorPoolTest1'
+ ]
+
+ def testCrossFileEnumTypesByName(self):
+ self.assertIs(
+ descriptor_pool_test1_pb2.TopLevelEnumTest1.DESCRIPTOR,
+ descriptor_pool_test1_pb2.DESCRIPTOR.enum_types_by_name[
+ 'TopLevelEnumTest1'
+ ],
+ )
+ with self.assertRaises(KeyError):
+ descriptor_pool_test2_pb2.DESCRIPTOR.enum_types_by_name[
+ 'TopLevelEnumTest1'
+ ]
+
+ def testCrossFileExtensionsByName(self):
+ self.assertIs(
+ descriptor_pool_test1_pb2.top_level_extension_test1,
+ descriptor_pool_test1_pb2.DESCRIPTOR.extensions_by_name[
+ 'top_level_extension_test1'
+ ],
+ )
+ with self.assertRaises(KeyError):
+ descriptor_pool_test2_pb2.DESCRIPTOR.extensions_by_name[
+ 'top_level_extension_test1'
+ ]
+
+ def testCrossFileServicesByName(self):
+ descriptor_pool_test1_pb2.DESCRIPTOR.services_by_name[
+ 'DescriporPoolTestService'
+ ],
+ with self.assertRaises(KeyError):
+ descriptor_pool_test2_pb2.DESCRIPTOR.services_by_name[
+ 'DescriporPoolTestService'
+ ]
+
def testFindFileContainingSymbolFailure(self):
with self.assertRaises(KeyError):
self.pool.FindFileContainingSymbol('Does not exist')
@@ -1075,12 +1120,6 @@
pool._AddFileDescriptor(0)
-# TODO Expand these tests to upb and C++ once the DescriptorPool
-# API is unified.
-@unittest.skipIf(
- api_implementation.Type() != 'python',
- 'Only pure python allows SetFeatureSetDefaults()',
-)
@testing_refleaks.TestCase
class FeatureSetDefaults(unittest.TestCase):
@@ -1114,9 +1153,21 @@
file._GetFeatures().HasExtension(unittest_features_pb2.test)
)
+ def testInvalidType(self):
+ pool = descriptor_pool.DescriptorPool()
+ with self.assertRaisesRegex(TypeError, 'invalid type'):
+ pool.SetFeatureSetDefaults('Some data')
+
+ def testInvalidMessageType(self):
+ pool = descriptor_pool.DescriptorPool()
+ with self.assertRaisesRegex(TypeError, 'invalid type'):
+ pool.SetFeatureSetDefaults(descriptor_pb2.FileDescriptorProto())
+
def testInvalidEditionRange(self):
pool = descriptor_pool.DescriptorPool()
- with self.assertRaisesRegex(ValueError, 'Invalid edition range'):
+ with self.assertRaisesRegex(
+ ValueError, 'Invalid edition range.*2023.*PROTO2'
+ ):
pool.SetFeatureSetDefaults(
descriptor_pb2.FeatureSetDefaults(
defaults=[
@@ -1134,7 +1185,9 @@
def testNotStrictlyIncreasing(self):
pool = descriptor_pool.DescriptorPool()
- with self.assertRaisesRegex(ValueError, 'not strictly increasing'):
+ with self.assertRaisesRegex(
+ ValueError, 'not strictly increasing.*PROTO3.*greater.*PROTO2'
+ ):
pool.SetFeatureSetDefaults(
descriptor_pb2.FeatureSetDefaults(
defaults=[
@@ -1154,7 +1207,7 @@
def testUnknownEdition(self):
pool = descriptor_pool.DescriptorPool()
- with self.assertRaisesRegex(ValueError, 'Invalid edition'):
+ with self.assertRaisesRegex(ValueError, 'Invalid edition.*UNKNOWN'):
pool.SetFeatureSetDefaults(
descriptor_pb2.FeatureSetDefaults(
defaults=[
@@ -1218,7 +1271,7 @@
)
pool.SetFeatureSetDefaults(defaults)
file_desc = descriptor_pb2.FileDescriptorProto(name='some/file.proto')
- with self.assertRaisesRegex(TypeError, 'No valid default found'):
+ with self.assertRaisesRegex(TypeError, 'No valid default found.*PROTO2'):
file = pool.AddSerializedFile(file_desc.SerializeToString())
file._GetFeatures()
@@ -1236,7 +1289,9 @@
)
pool.SetFeatureSetDefaults(defaults)
file_desc = descriptor_pb2.FileDescriptorProto(name='some/file.proto')
- with self.assertRaisesRegex(TypeError, 'earlier than the minimum'):
+ with self.assertRaisesRegex(
+ TypeError, 'PROTO2.*earlier than the minimum.*PROTO3'
+ ):
file = pool.AddSerializedFile(file_desc.SerializeToString())
file._GetFeatures()
@@ -1258,7 +1313,9 @@
syntax='editions',
edition=descriptor_pb2.Edition.EDITION_2023,
)
- with self.assertRaisesRegex(TypeError, 'later than the maximum'):
+ with self.assertRaisesRegex(
+ TypeError, '2023.*later than the maximum.*PROTO3'
+ ):
file = pool.AddSerializedFile(file_desc.SerializeToString())
file._GetFeatures()
diff --git a/python/google/protobuf/internal/descriptor_pool_test1.proto b/python/google/protobuf/internal/descriptor_pool_test1.proto
index 8a73811..d254e82 100644
--- a/python/google/protobuf/internal/descriptor_pool_test1.proto
+++ b/python/google/protobuf/internal/descriptor_pool_test1.proto
@@ -9,6 +9,17 @@
package google.protobuf.python.internal;
+enum TopLevelEnumTest1 {
+ TOP_LEVEL_ENUM_TEST_1_NONE = 0;
+ TOP_LEVEL_ENUM_TEST_1_ONE = 1;
+}
+
+extend DescriptorPoolTest1 {
+ optional TopLevelEnumTest1 top_level_extension_test1 = 1000;
+}
+
+service DescriporPoolTestService {}
+
message DescriptorPoolTest1 {
extensions 1000 to max;
@@ -63,7 +74,7 @@
LAMBDA = 11;
MU = 12;
- reserved -1;
+ reserved - 1;
reserved 536870913; // 0x20000001
}
optional NestedEnum nested_enum = 1 [default = MU];
diff --git a/python/google/protobuf/internal/descriptor_test.py b/python/google/protobuf/internal/descriptor_test.py
index 2e90f0f..bf833a4 100755
--- a/python/google/protobuf/internal/descriptor_test.py
+++ b/python/google/protobuf/internal/descriptor_test.py
@@ -20,6 +20,7 @@
from google.protobuf.internal import api_implementation
from google.protobuf.internal import legacy_features_pb2
from google.protobuf.internal import test_util
+from google.protobuf.internal import testing_refleaks
from google.protobuf.internal import _parameterized
from google.protobuf import unittest_custom_options_pb2
@@ -60,6 +61,7 @@
warnings.simplefilter('error', DeprecationWarning)
+@testing_refleaks.TestCase
class DescriptorTest(unittest.TestCase):
def setUp(self):
@@ -537,7 +539,9 @@
self.assertEqual(self.my_file.package, 'protobuf_unittest')
self.assertEqual(self.my_file.pool, self.pool)
self.assertFalse(self.my_file.has_options)
- self.assertEqual(self.my_file.syntax, 'proto2')
+ self.assertEqual(
+ self.my_file.edition, descriptor_pb2.Edition.EDITION_PROTO2
+ )
file_proto = descriptor_pb2.FileDescriptorProto()
self.my_file.CopyToProto(file_proto)
self.assertEqual(self.my_file.serialized_pb,
@@ -1218,11 +1222,7 @@
json_names[index])
-# TODO Add _GetFeatures for upb and C++.
-@unittest.skipIf(
- api_implementation.Type() != 'python',
- 'Features field is only available with the pure python implementation',
-)
+@testing_refleaks.TestCase
class FeaturesTest(_parameterized.TestCase):
@_parameterized.named_parameters([
@@ -1369,15 +1369,11 @@
].int_multiple_feature = value
-# TODO Add _GetFeatures for upb and C++.
-@unittest.skipIf(
- api_implementation.Type() != 'python',
- 'Features field is only available with the pure python implementation',
-)
+@testing_refleaks.TestCase
class FeatureInheritanceTest(unittest.TestCase):
def setUp(self):
- super().setUp()
+ super(FeatureInheritanceTest, self).setUp()
self.file_proto = descriptor_pb2.FileDescriptorProto(
name='some/filename/some.proto',
package='protobuf_unittest',
@@ -1434,7 +1430,13 @@
)
def BuildPool(self):
- pool = descriptor_pool.DescriptorPool()
+
+ # These can't be put onto the fixture without breaking the refleak checks.
+ class ReturnObject:
+ pass
+
+ ret = ReturnObject()
+ ret.pool = descriptor_pool.DescriptorPool()
defaults = descriptor_pb2.FeatureSetDefaults(
defaults=[
descriptor_pb2.FeatureSetDefaults.FeatureSetEditionDefault(
@@ -1448,166 +1450,169 @@
defaults.defaults[0].features.Extensions[
unittest_features_pb2.test
].int_multiple_feature = 1
- pool.SetFeatureSetDefaults(defaults)
+ ret.pool.SetFeatureSetDefaults(defaults)
- self.file = pool.AddSerializedFile(self.file_proto.SerializeToString())
- self.top_message = pool.FindMessageTypeByName('protobuf_unittest.TopMessage')
- self.top_enum = pool.FindEnumTypeByName('protobuf_unittest.TopEnum')
- self.top_extension = pool.FindExtensionByName(
+ ret.file = ret.pool.AddSerializedFile(self.file_proto.SerializeToString())
+ ret.top_message = ret.pool.FindMessageTypeByName(
+ 'protobuf_unittest.TopMessage'
+ )
+ ret.top_enum = ret.pool.FindEnumTypeByName('protobuf_unittest.TopEnum')
+ ret.top_extension = ret.pool.FindExtensionByName(
'protobuf_unittest.top_extension'
)
- self.nested_message = self.top_message.nested_types_by_name['NestedMessage']
- self.nested_enum = self.top_message.enum_types_by_name['NestedEnum']
- self.nested_extension = self.top_message.extensions_by_name[
+ ret.nested_message = ret.top_message.nested_types_by_name['NestedMessage']
+ ret.nested_enum = ret.top_message.enum_types_by_name['NestedEnum']
+ ret.nested_extension = ret.top_message.extensions_by_name[
'nested_extension'
]
- self.field = self.top_message.fields_by_name['field']
- self.oneof = self.top_message.oneofs_by_name['Oneof']
- self.oneof_field = self.top_message.fields_by_name['oneof_field']
- self.enum_value = self.top_enum.values_by_name['TOP_VALUE']
- self.service = pool.FindServiceByName('protobuf_unittest.TestService')
- self.method = self.service.methods_by_name['CallMethod']
+ ret.field = ret.top_message.fields_by_name['field']
+ ret.oneof = ret.top_message.oneofs_by_name['Oneof']
+ ret.oneof_field = ret.top_message.fields_by_name['oneof_field']
+ ret.enum_value = ret.top_enum.values_by_name['TOP_VALUE']
+ ret.service = ret.pool.FindServiceByName('protobuf_unittest.TestService')
+ ret.method = ret.service.methods_by_name['CallMethod']
+ return ret
def testFileDefaults(self):
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.file), 1)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.file), 1)
def testFileOverride(self):
SetTestFeature(self.file_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.file), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.file), 3)
def testFileMessageInherit(self):
SetTestFeature(self.file_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.top_message), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.top_message), 3)
def testFileMessageOverride(self):
SetTestFeature(self.file_proto, 3)
SetTestFeature(self.top_message_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.top_message), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.top_message), 5)
def testFileEnumInherit(self):
SetTestFeature(self.file_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.top_enum), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.top_enum), 3)
def testFileEnumOverride(self):
SetTestFeature(self.file_proto, 3)
SetTestFeature(self.top_enum_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.top_enum), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.top_enum), 5)
def testFileExtensionInherit(self):
SetTestFeature(self.file_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.top_extension), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.top_extension), 3)
def testFileExtensionOverride(self):
SetTestFeature(self.file_proto, 3)
SetTestFeature(self.top_extension_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.top_extension), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.top_extension), 5)
def testFileServiceInherit(self):
SetTestFeature(self.file_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.service), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.service), 3)
def testFileServiceOverride(self):
SetTestFeature(self.file_proto, 3)
SetTestFeature(self.service_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.service), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.service), 5)
def testMessageFieldInherit(self):
SetTestFeature(self.top_message_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.field), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.field), 3)
def testMessageFieldOverride(self):
SetTestFeature(self.top_message_proto, 3)
SetTestFeature(self.field_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.field), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.field), 5)
def testMessageEnumInherit(self):
SetTestFeature(self.top_message_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.nested_enum), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.nested_enum), 3)
def testMessageEnumOverride(self):
SetTestFeature(self.top_message_proto, 3)
SetTestFeature(self.nested_enum_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.nested_enum), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.nested_enum), 5)
def testMessageMessageInherit(self):
SetTestFeature(self.top_message_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.nested_message), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.nested_message), 3)
def testMessageMessageOverride(self):
SetTestFeature(self.top_message_proto, 3)
SetTestFeature(self.nested_message_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.nested_message), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.nested_message), 5)
def testMessageExtensionInherit(self):
SetTestFeature(self.top_message_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.nested_extension), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.nested_extension), 3)
def testMessageExtensionOverride(self):
SetTestFeature(self.top_message_proto, 3)
SetTestFeature(self.nested_extension_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.nested_extension), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.nested_extension), 5)
def testMessageOneofInherit(self):
SetTestFeature(self.top_message_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.oneof), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.oneof), 3)
def testMessageOneofOverride(self):
SetTestFeature(self.top_message_proto, 3)
SetTestFeature(self.oneof_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.oneof), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.oneof), 5)
def testOneofFieldInherit(self):
SetTestFeature(self.oneof_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.oneof_field), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.oneof_field), 3)
def testOneofFieldOverride(self):
SetTestFeature(self.oneof_proto, 3)
SetTestFeature(self.oneof_field_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.oneof_field), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.oneof_field), 5)
def testEnumValueInherit(self):
SetTestFeature(self.top_enum_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.enum_value), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.enum_value), 3)
def testEnumValueOverride(self):
SetTestFeature(self.top_enum_proto, 3)
SetTestFeature(self.enum_value_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.enum_value), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.enum_value), 5)
def testServiceMethodInherit(self):
SetTestFeature(self.service_proto, 3)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.method), 3)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.method), 3)
def testServiceMethodOverride(self):
SetTestFeature(self.service_proto, 3)
SetTestFeature(self.method_proto, 5)
- self.BuildPool()
- self.assertEqual(GetTestFeature(self.method), 5)
+ pool = self.BuildPool()
+ self.assertEqual(GetTestFeature(pool.method), 5)
if __name__ == '__main__':
diff --git a/python/google/protobuf/internal/json_format_test.py b/python/google/protobuf/internal/json_format_test.py
index 15b376c..6c4d2da 100644
--- a/python/google/protobuf/internal/json_format_test.py
+++ b/python/google/protobuf/internal/json_format_test.py
@@ -1060,7 +1060,14 @@
json_format.Parse, text, message)
# Time bigger than maximum time.
message.value.seconds = 253402300800
- self.assertRaisesRegex(OverflowError, 'date value out of range',
+ self.assertRaisesRegex(json_format.SerializeToJsonError,
+ 'Timestamp is not valid',
+ json_format.MessageToJson, message)
+ # Nanos smaller than 0
+ message.value.seconds = 0
+ message.value.nanos = -1
+ self.assertRaisesRegex(json_format.SerializeToJsonError,
+ 'Timestamp is not valid',
json_format.MessageToJson, message)
# Lower case t does not accept.
text = '{"value": "0001-01-01t00:00:00Z"}'
diff --git a/python/google/protobuf/internal/message_test.py b/python/google/protobuf/internal/message_test.py
index b0f1ae7..a6223c2 100755
--- a/python/google/protobuf/internal/message_test.py
+++ b/python/google/protobuf/internal/message_test.py
@@ -1340,6 +1340,17 @@
self.assertEqual(False, message.optional_bool)
self.assertEqual(0, message.optional_nested_message.bb)
+ def testDel(self):
+ msg = unittest_pb2.TestAllTypes()
+
+ # Fields cannot be deleted.
+ with self.assertRaises(AttributeError):
+ del msg.optional_int32
+ with self.assertRaises(AttributeError):
+ del msg.optional_bool
+ with self.assertRaises(AttributeError):
+ del msg.repeated_nested_message
+
def testAssignInvalidEnum(self):
"""Assigning an invalid enum number is not allowed in proto2."""
m = unittest_pb2.TestAllTypes()
diff --git a/python/google/protobuf/internal/python_message.py b/python/google/protobuf/internal/python_message.py
index 40c7764..870ff18 100755
--- a/python/google/protobuf/internal/python_message.py
+++ b/python/google/protobuf/internal/python_message.py
@@ -1385,15 +1385,9 @@
def _UnknownFields(self):
- warnings.warn(
- 'message.UnknownFields() is deprecated. Please use the add one '
- 'feature unknown_fields.UnknownFieldSet(message) in '
- 'unknown_fields.py instead.'
- )
- if self._unknown_field_set is None: # pylint: disable=protected-access
- # pylint: disable=protected-access
- self._unknown_field_set = containers.UnknownFieldSet()
- return self._unknown_field_set # pylint: disable=protected-access
+ raise NotImplementedError('Please use the add-on feaure '
+ 'unknown_fields.UnknownFieldSet(message) in '
+ 'unknown_fields.py instead.')
def _DiscardUnknownFields(self):
diff --git a/python/google/protobuf/internal/well_known_types.py b/python/google/protobuf/internal/well_known_types.py
index 5727bc9..59e99e0 100644
--- a/python/google/protobuf/internal/well_known_types.py
+++ b/python/google/protobuf/internal/well_known_types.py
@@ -20,6 +20,7 @@
import calendar
import collections.abc
import datetime
+import warnings
from google.protobuf.internal import field_mask
@@ -33,6 +34,8 @@
_MICROS_PER_SECOND = 1000000
_SECONDS_PER_DAY = 24 * 3600
_DURATION_SECONDS_MAX = 315576000000
+_TIMESTAMP_SECONDS_MIN = -62135596800
+_TIMESTAMP_SECONDS_MAX = 253402300799
_EPOCH_DATETIME_NAIVE = datetime.datetime(1970, 1, 1, tzinfo=None)
_EPOCH_DATETIME_AWARE = _EPOCH_DATETIME_NAIVE.replace(
@@ -85,10 +88,10 @@
and uses 3, 6 or 9 fractional digits as required to represent the
exact time. Example of the return format: '1972-01-01T10:00:20.021Z'
"""
- nanos = self.nanos % _NANOS_PER_SECOND
- total_sec = self.seconds + (self.nanos - nanos) // _NANOS_PER_SECOND
- seconds = total_sec % _SECONDS_PER_DAY
- days = (total_sec - seconds) // _SECONDS_PER_DAY
+ _CheckTimestampValid(self.seconds, self.nanos)
+ nanos = self.nanos
+ seconds = self.seconds % _SECONDS_PER_DAY
+ days = (self.seconds - seconds) // _SECONDS_PER_DAY
dt = datetime.datetime(1970, 1, 1) + datetime.timedelta(days, seconds)
result = dt.isoformat()
@@ -166,6 +169,7 @@
else:
seconds += (int(timezone[1:pos])*60+int(timezone[pos+1:]))*60
# Set seconds and nanos
+ _CheckTimestampValid(seconds, nanos)
self.seconds = int(seconds)
self.nanos = int(nanos)
@@ -175,39 +179,53 @@
def ToNanoseconds(self):
"""Converts Timestamp to nanoseconds since epoch."""
+ _CheckTimestampValid(self.seconds, self.nanos)
return self.seconds * _NANOS_PER_SECOND + self.nanos
def ToMicroseconds(self):
"""Converts Timestamp to microseconds since epoch."""
+ _CheckTimestampValid(self.seconds, self.nanos)
return (self.seconds * _MICROS_PER_SECOND +
self.nanos // _NANOS_PER_MICROSECOND)
def ToMilliseconds(self):
"""Converts Timestamp to milliseconds since epoch."""
+ _CheckTimestampValid(self.seconds, self.nanos)
return (self.seconds * _MILLIS_PER_SECOND +
self.nanos // _NANOS_PER_MILLISECOND)
def ToSeconds(self):
"""Converts Timestamp to seconds since epoch."""
+ _CheckTimestampValid(self.seconds, self.nanos)
return self.seconds
def FromNanoseconds(self, nanos):
"""Converts nanoseconds since epoch to Timestamp."""
- self.seconds = nanos // _NANOS_PER_SECOND
- self.nanos = nanos % _NANOS_PER_SECOND
+ seconds = nanos // _NANOS_PER_SECOND
+ nanos = nanos % _NANOS_PER_SECOND
+ _CheckTimestampValid(seconds, nanos)
+ self.seconds = seconds
+ self.nanos = nanos
def FromMicroseconds(self, micros):
"""Converts microseconds since epoch to Timestamp."""
- self.seconds = micros // _MICROS_PER_SECOND
- self.nanos = (micros % _MICROS_PER_SECOND) * _NANOS_PER_MICROSECOND
+ seconds = micros // _MICROS_PER_SECOND
+ nanos = (micros % _MICROS_PER_SECOND) * _NANOS_PER_MICROSECOND
+ _CheckTimestampValid(seconds, nanos)
+ self.seconds = seconds
+ self.nanos = nanos
def FromMilliseconds(self, millis):
"""Converts milliseconds since epoch to Timestamp."""
- self.seconds = millis // _MILLIS_PER_SECOND
- self.nanos = (millis % _MILLIS_PER_SECOND) * _NANOS_PER_MILLISECOND
+ seconds = millis // _MILLIS_PER_SECOND
+ nanos = (millis % _MILLIS_PER_SECOND) * _NANOS_PER_MILLISECOND
+ _CheckTimestampValid(seconds, nanos)
+ self.seconds = seconds
+ self.nanos = nanos
def FromSeconds(self, seconds):
"""Converts seconds since epoch to Timestamp."""
+ _CheckTimestampValid(seconds, 0)
self.seconds = seconds
self.nanos = 0
@@ -229,6 +247,7 @@
# https://github.com/python/cpython/issues/109849) or full range (on some
# platforms, see https://github.com/python/cpython/issues/110042) of
# datetime.
+ _CheckTimestampValid(self.seconds, self.nanos)
delta = datetime.timedelta(
seconds=self.seconds,
microseconds=_RoundTowardZero(self.nanos, _NANOS_PER_MICROSECOND),
@@ -252,8 +271,22 @@
# manipulated into a long value of seconds. During the conversion from
# struct_time to long, the source date in UTC, and so it follows that the
# correct transformation is calendar.timegm()
- self.seconds = calendar.timegm(dt.utctimetuple())
- self.nanos = dt.microsecond * _NANOS_PER_MICROSECOND
+ seconds = calendar.timegm(dt.utctimetuple())
+ nanos = dt.microsecond * _NANOS_PER_MICROSECOND
+ _CheckTimestampValid(seconds, nanos)
+ self.seconds = seconds
+ self.nanos = nanos
+
+
+def _CheckTimestampValid(seconds, nanos):
+ if seconds < _TIMESTAMP_SECONDS_MIN or seconds > _TIMESTAMP_SECONDS_MAX:
+ raise ValueError(
+ 'Timestamp is not valid: Seconds {0} must be in range '
+ '[-62135596800, 253402300799].'.format(seconds))
+ if nanos < 0 or nanos >= _NANOS_PER_SECOND:
+ raise ValueError(
+ 'Timestamp is not valid: Nanos {} must be in a range '
+ '[0, 999999].'.format(nanos))
class Duration(object):
diff --git a/python/google/protobuf/internal/well_known_types_test.py b/python/google/protobuf/internal/well_known_types_test.py
index 37d2049..da27316 100644
--- a/python/google/protobuf/internal/well_known_types_test.py
+++ b/python/google/protobuf/internal/well_known_types_test.py
@@ -352,27 +352,15 @@
)
def testNanosOneSecond(self):
- # TODO: b/301980950 - Test error behavior instead once ToDatetime validates
- # that nanos are in expected range.
tz = _TZ_PACIFIC
ts = timestamp_pb2.Timestamp(nanos=1_000_000_000)
- self.assertEqual(ts.ToDatetime(), datetime.datetime(1970, 1, 1, 0, 0, 1))
- self.assertEqual(
- ts.ToDatetime(tz), datetime.datetime(1969, 12, 31, 16, 0, 1, tzinfo=tz)
- )
+ self.assertRaisesRegex(ValueError, 'Timestamp is not valid',
+ ts.ToDatetime)
def testNanosNegativeOneSecond(self):
- # TODO: b/301980950 - Test error behavior instead once ToDatetime validates
- # that nanos are in expected range.
- tz = _TZ_PACIFIC
ts = timestamp_pb2.Timestamp(nanos=-1_000_000_000)
- self.assertEqual(
- ts.ToDatetime(), datetime.datetime(1969, 12, 31, 23, 59, 59)
- )
- self.assertEqual(
- ts.ToDatetime(tz),
- datetime.datetime(1969, 12, 31, 15, 59, 59, tzinfo=tz),
- )
+ self.assertRaisesRegex(ValueError, 'Timestamp is not valid',
+ ts.ToDatetime)
def testTimedeltaConversion(self):
message = duration_pb2.Duration()
@@ -421,8 +409,10 @@
self.assertRaisesRegex(ValueError, 'year (0 )?is out of range',
message.FromJsonString, '0000-01-01T00:00:00Z')
message.seconds = 253402300800
- self.assertRaisesRegex(OverflowError, 'date value out of range',
+ self.assertRaisesRegex(ValueError, 'Timestamp is not valid',
message.ToJsonString)
+ self.assertRaisesRegex(ValueError, 'Timestamp is not valid',
+ message.FromSeconds, -62135596801)
def testInvalidDuration(self):
message = duration_pb2.Duration()
diff --git a/python/google/protobuf/pyext/descriptor.cc b/python/google/protobuf/pyext/descriptor.cc
index 734aea6..2c5bd1a 100644
--- a/python/google/protobuf/pyext/descriptor.cc
+++ b/python/google/protobuf/pyext/descriptor.cc
@@ -9,9 +9,6 @@
#include "google/protobuf/pyext/descriptor.h"
-#include "absl/log/absl_check.h"
-#include "google/protobuf/descriptor_legacy.h"
-
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <frameobject.h>
@@ -21,14 +18,17 @@
#include <unordered_map>
#include "google/protobuf/descriptor.pb.h"
+#include "absl/container/flat_hash_map.h"
+#include "absl/log/absl_check.h"
+#include "absl/strings/string_view.h"
+#include "google/protobuf/descriptor.h"
#include "google/protobuf/dynamic_message.h"
+#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/pyext/descriptor_containers.h"
#include "google/protobuf/pyext/descriptor_pool.h"
#include "google/protobuf/pyext/message.h"
#include "google/protobuf/pyext/message_factory.h"
#include "google/protobuf/pyext/scoped_pyobject_ptr.h"
-#include "absl/strings/string_view.h"
-#include "google/protobuf/io/coded_stream.h"
#define PyString_AsStringAndSize(ob, charpp, sizep) \
(PyUnicode_Check(ob) \
@@ -230,28 +230,25 @@
}
return true;
}
-// Converts options into a Python protobuf, and cache the result.
+
+// Converts descriptor messages into a Python protobuf, and cache the result.
//
// This is a bit tricky because options can contain extension fields defined in
// the same proto file. In this case the options parsed from the serialized_pb
// have unknown fields, and we need to parse them again.
//
// Always returns a new reference.
-template<class DescriptorClass>
-static PyObject* GetOrBuildOptions(const DescriptorClass *descriptor) {
- // Options are cached in the pool that owns the descriptor.
+static PyObject* GetOrBuildMessageInDefaultPool(
+ absl::flat_hash_map<const void*, PyObject*>& cache, const void* key,
+ const Message& message) {
// First search in the cache.
- PyDescriptorPool* caching_pool = GetDescriptorPool_FromPool(
- GetFileDescriptor(descriptor)->pool());
- std::unordered_map<const void*, PyObject*>* descriptor_options =
- caching_pool->descriptor_options;
- if (descriptor_options->find(descriptor) != descriptor_options->end()) {
- PyObject *value = (*descriptor_options)[descriptor];
+ if (cache.find(key) != cache.end()) {
+ PyObject* value = cache[key];
Py_INCREF(value);
return value;
}
- // Similar to the C++ implementation, we return an Options object from the
+ // Similar to the C++ implementation, we return a message object from the
// default (generated) factory, so that client code know that they can use
// extensions from generated files:
// d.GetOptions().Extensions[some_pb2.extension]
@@ -262,14 +259,13 @@
PyMessageFactory* message_factory =
GetDefaultDescriptorPool()->py_message_factory;
- // Build the Options object: get its Python class, and make a copy of the C++
+ // Build the message object: get its Python class, and make a copy of the C++
// read-only instance.
- const Message& options(descriptor->options());
- const Descriptor *message_type = options.GetDescriptor();
- CMessageClass* message_class = message_factory::GetOrCreateMessageClass(
- message_factory, message_type);
+ const Descriptor* message_type = message.GetDescriptor();
+ CMessageClass* message_class =
+ message_factory::GetOrCreateMessageClass(message_factory, message_type);
if (message_class == nullptr) {
- PyErr_Format(PyExc_TypeError, "Could not retrieve class for Options: %s",
+ PyErr_Format(PyExc_TypeError, "Could not retrieve class for: %s",
message_type->full_name().c_str());
return nullptr;
}
@@ -281,20 +277,20 @@
return nullptr;
}
if (!PyObject_TypeCheck(value.get(), CMessage_Type)) {
- PyErr_Format(PyExc_TypeError, "Invalid class for %s: %s",
- message_type->full_name().c_str(),
- Py_TYPE(value.get())->tp_name);
- return nullptr;
+ PyErr_Format(PyExc_TypeError, "Invalid class for %s: %s",
+ message_type->full_name().c_str(),
+ Py_TYPE(value.get())->tp_name);
+ return nullptr;
}
CMessage* cmsg = reinterpret_cast<CMessage*>(value.get());
- const Reflection* reflection = options.GetReflection();
- const UnknownFieldSet& unknown_fields(reflection->GetUnknownFields(options));
+ const Reflection* reflection = message.GetReflection();
+ const UnknownFieldSet& unknown_fields(reflection->GetUnknownFields(message));
if (unknown_fields.empty()) {
- cmsg->message->CopyFrom(options);
+ cmsg->message->CopyFrom(message);
} else {
// Reparse options string! XXX call cmessage::MergeFromString
- if (!Reparse(message_factory, options, cmsg->message)) {
+ if (!Reparse(message_factory, message, cmsg->message)) {
PyErr_Format(PyExc_ValueError, "Error reparsing Options message");
return nullptr;
}
@@ -302,11 +298,35 @@
// Cache the result.
Py_INCREF(value.get());
- (*descriptor_options)[descriptor] = value.get();
+ cache[key] = value.get();
return value.release();
}
+template <class DescriptorClass>
+static PyObject* GetOrBuildOptions(const DescriptorClass* descriptor) {
+ // Options are cached in the pool that owns the descriptor.
+ PyDescriptorPool* caching_pool =
+ GetDescriptorPool_FromPool(GetFileDescriptor(descriptor)->pool());
+ return GetOrBuildMessageInDefaultPool(*caching_pool->descriptor_options,
+ descriptor, descriptor->options());
+}
+
+template <class DescriptorClass>
+static PyObject* GetFeaturesImpl(const DescriptorClass* descriptor) {
+ if (descriptor == nullptr) {
+ return nullptr;
+ }
+ const FeatureSet& features =
+ internal::InternalFeatureHelper::GetFeatures(*descriptor);
+
+ // Features are cached in the pool that owns the descriptor.
+ PyDescriptorPool* caching_pool =
+ GetDescriptorPool_FromPool(GetFileDescriptor(descriptor)->pool());
+ return GetOrBuildMessageInDefaultPool(*caching_pool->descriptor_features,
+ descriptor, features);
+}
+
// Copy the C++ descriptor to a Python message.
// The Python message is an instance of descriptor_pb2.DescriptorProto
// or similar.
@@ -638,6 +658,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static int SetOptions(PyBaseDescriptor *self, PyObject *value,
void *closure) {
return CheckCalledFromGeneratedFile("_options");
@@ -671,17 +695,6 @@
return PyString_FromCppString(enum_value->name());
}
-static PyObject* GetSyntax(PyBaseDescriptor *self, void *closure) {
- PyErr_WarnEx(nullptr,
- "descriptor.syntax is deprecated. It will be removed soon. "
- "Most usages are checking field descriptors. Consider to use "
- "has_presence, is_packed on field descriptors.",
- 1);
- std::string syntax(FileDescriptorLegacy::SyntaxName(
- FileDescriptorLegacy(_GetDescriptor(self)->file()).syntax()));
- return PyUnicode_InternFromString(syntax.c_str());
-}
-
static PyGetSetDef Getters[] = {
{"name", (getter)GetName, nullptr, "Last name"},
{"full_name", (getter)GetFullName, nullptr, "Full name"},
@@ -718,12 +731,12 @@
{"_options", (getter) nullptr, (setter)SetOptions, "Options"},
{"_serialized_options", (getter) nullptr, (setter)SetSerializedOptions,
"Serialized Options"},
- {"syntax", (getter)GetSyntax, (setter) nullptr, "Syntax"},
{nullptr},
};
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{"CopyToProto", (PyCFunction)CopyToProto, METH_O},
{"EnumValueName", (PyCFunction)EnumValueName, METH_VARARGS},
{nullptr},
@@ -1009,6 +1022,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static int SetOptions(PyBaseDescriptor *self, PyObject *value,
void *closure) {
return CheckCalledFromGeneratedFile("_options");
@@ -1056,6 +1073,7 @@
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{nullptr},
};
@@ -1184,6 +1202,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static int SetOptions(PyBaseDescriptor *self, PyObject *value,
void *closure) {
return CheckCalledFromGeneratedFile("_options");
@@ -1200,6 +1222,7 @@
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{"CopyToProto", (PyCFunction)CopyToProto, METH_O},
{nullptr},
};
@@ -1321,6 +1344,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static int SetOptions(PyBaseDescriptor *self, PyObject *value,
void *closure) {
return CheckCalledFromGeneratedFile("_options");
@@ -1347,6 +1374,7 @@
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{nullptr},
};
@@ -1487,6 +1515,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyFileDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static int SetOptions(PyFileDescriptor *self, PyObject *value,
void *closure) {
return CheckCalledFromGeneratedFile("_options");
@@ -1497,15 +1529,8 @@
return CheckCalledFromGeneratedFile("_serialized_options");
}
-static PyObject* GetSyntax(PyFileDescriptor *self, void *closure) {
- PyErr_WarnEx(nullptr,
- "descriptor.syntax is deprecated. It will be removed soon. "
- "Most usages are checking field descriptors. Consider to use "
- "has_presence, is_packed on field descriptors.",
- 1);
- std::string syntax(FileDescriptorLegacy::SyntaxName(
- FileDescriptorLegacy(_GetDescriptor(self)).syntax()));
- return PyUnicode_InternFromString(syntax.c_str());
+static PyObject* GetEdition(PyFileDescriptor* self, void* closure) {
+ return PyLong_FromLong(_GetDescriptor(self)->edition());
}
static PyObject* CopyToProto(PyFileDescriptor *self, PyObject *target) {
@@ -1534,13 +1559,14 @@
{"_options", (getter) nullptr, (setter)SetOptions, "Options"},
{"_serialized_options", (getter) nullptr, (setter)SetSerializedOptions,
"Serialized Options"},
- {"syntax", (getter)GetSyntax, (setter) nullptr, "Syntax"},
+ {"edition", (getter)GetEdition, (setter) nullptr, "Edition"},
{nullptr},
};
static PyMethodDef Methods[] = {
{"GetDebugString", (PyCFunction)GetDebugString, METH_NOARGS},
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{"CopyToProto", (PyCFunction)CopyToProto, METH_O},
{nullptr},
};
@@ -1680,6 +1706,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static int SetOptions(PyBaseDescriptor *self, PyObject *value,
void *closure) {
return CheckCalledFromGeneratedFile("_options");
@@ -1707,6 +1737,7 @@
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{nullptr},
};
@@ -1810,6 +1841,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static PyObject* CopyToProto(PyBaseDescriptor *self, PyObject *target) {
return CopyToPythonProto<ServiceDescriptorProto>(_GetDescriptor(self),
target);
@@ -1828,6 +1863,7 @@
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{"CopyToProto", (PyCFunction)CopyToProto, METH_O},
{"FindMethodByName", (PyCFunction)FindMethodByName, METH_O},
{nullptr},
@@ -1936,6 +1972,10 @@
return GetOrBuildOptions(_GetDescriptor(self));
}
+static PyObject* GetFeatures(PyBaseDescriptor* self) {
+ return GetFeaturesImpl(_GetDescriptor(self));
+}
+
static PyObject* CopyToProto(PyBaseDescriptor *self, PyObject *target) {
return CopyToPythonProto<MethodDescriptorProto>(_GetDescriptor(self), target);
}
@@ -1957,6 +1997,7 @@
static PyMethodDef Methods[] = {
{"GetOptions", (PyCFunction)GetOptions, METH_NOARGS},
+ {"_GetFeatures", (PyCFunction)GetFeatures, METH_NOARGS},
{"CopyToProto", (PyCFunction)CopyToProto, METH_O},
{nullptr},
};
diff --git a/python/google/protobuf/pyext/descriptor_database.cc b/python/google/protobuf/pyext/descriptor_database.cc
index 92d1928..2a608e5 100644
--- a/python/google/protobuf/pyext/descriptor_database.cc
+++ b/python/google/protobuf/pyext/descriptor_database.cc
@@ -16,6 +16,7 @@
#include "google/protobuf/descriptor.pb.h"
#include "absl/log/absl_log.h"
+#include "google/protobuf/message.h"
#include "google/protobuf/pyext/message.h"
#include "google/protobuf/pyext/scoped_pyobject_ptr.h"
@@ -54,7 +55,7 @@
message->message->GetDescriptor() == filedescriptor_descriptor) {
// Fast path: Just use the pointer.
FileDescriptorProto* file_proto =
- static_cast<FileDescriptorProto*>(message->message);
+ google::protobuf::DownCastToGenerated<FileDescriptorProto>(message->message);
*output = *file_proto;
return true;
} else {
diff --git a/python/google/protobuf/pyext/descriptor_pool.cc b/python/google/protobuf/pyext/descriptor_pool.cc
index 6ba3c60..272dcb8 100644
--- a/python/google/protobuf/pyext/descriptor_pool.cc
+++ b/python/google/protobuf/pyext/descriptor_pool.cc
@@ -16,6 +16,8 @@
#include <Python.h>
#include "google/protobuf/descriptor.pb.h"
+#include "absl/container/flat_hash_map.h"
+#include "absl/status/status.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_replace.h"
#include "absl/strings/string_view.h"
@@ -95,7 +97,9 @@
cpool->is_owned = false;
cpool->is_mutable = false;
- cpool->descriptor_options = new std::unordered_map<const void*, PyObject*>();
+ cpool->descriptor_options = new absl::flat_hash_map<const void*, PyObject*>();
+ cpool->descriptor_features =
+ new absl::flat_hash_map<const void*, PyObject*>();
cpool->py_message_factory = message_factory::NewMessageFactory(
&PyMessageFactory_Type, cpool);
@@ -191,12 +195,16 @@
PyDescriptorPool* self = reinterpret_cast<PyDescriptorPool*>(pself);
descriptor_pool_map->erase(self->pool);
Py_CLEAR(self->py_message_factory);
- for (std::unordered_map<const void*, PyObject*>::iterator it =
- self->descriptor_options->begin();
+ for (auto it = self->descriptor_options->begin();
it != self->descriptor_options->end(); ++it) {
Py_DECREF(it->second);
}
delete self->descriptor_options;
+ for (auto it = self->descriptor_features->begin();
+ it != self->descriptor_features->end(); ++it) {
+ Py_DECREF(it->second);
+ }
+ delete self->descriptor_features;
delete self->database;
if (self->is_owned) {
delete self->pool;
@@ -635,11 +643,51 @@
return AddSerializedFile(self, serialized_pb.get());
}
+static PyObject* SetFeatureSetDefaults(PyObject* pself, PyObject* pdefaults) {
+ PyDescriptorPool* self = reinterpret_cast<PyDescriptorPool*>(pself);
+
+ if (!self->is_mutable) {
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "This DescriptorPool is not mutable and cannot add new definitions.");
+ return nullptr;
+ }
+
+ if (!PyObject_TypeCheck(pdefaults, CMessage_Type)) {
+ PyErr_Format(PyExc_TypeError,
+ "SetFeatureSetDefaults called with invalid type: got %s.",
+ Py_TYPE(pdefaults)->tp_name);
+ return nullptr;
+ }
+
+ CMessage* defaults = reinterpret_cast<CMessage*>(pdefaults);
+ if (defaults->message->GetDescriptor() !=
+ FeatureSetDefaults::GetDescriptor()) {
+ PyErr_Format(PyExc_TypeError,
+ "SetFeatureSetDefaults called with invalid type: "
+ " got %s.",
+ defaults->message->GetDescriptor()->full_name().c_str());
+ return nullptr;
+ }
+
+ absl::Status status =
+ const_cast<DescriptorPool*>(self->pool)
+ ->SetFeatureSetDefaults(
+ *reinterpret_cast<FeatureSetDefaults*>(defaults->message));
+ if (!status.ok()) {
+ PyErr_SetString(PyExc_ValueError, std::string(status.message()).c_str());
+ return nullptr;
+ }
+ Py_RETURN_NONE;
+}
+
static PyMethodDef Methods[] = {
{"Add", Add, METH_O,
"Adds the FileDescriptorProto and its types to this pool."},
{"AddSerializedFile", AddSerializedFile, METH_O,
"Adds a serialized FileDescriptorProto to this pool."},
+ {"SetFeatureSetDefaults", SetFeatureSetDefaults, METH_O,
+ "Sets the default feature mappings used during the build."},
{"AddFileDescriptor", AddFileDescriptor, METH_O,
"No-op. Add() must have been called before."},
diff --git a/python/google/protobuf/pyext/descriptor_pool.h b/python/google/protobuf/pyext/descriptor_pool.h
index 2814cc2..b2ce55c 100644
--- a/python/google/protobuf/pyext/descriptor_pool.h
+++ b/python/google/protobuf/pyext/descriptor_pool.h
@@ -11,7 +11,7 @@
#define PY_SSIZE_T_CLEAN
#include <Python.h>
-#include <unordered_map>
+#include "absl/container/flat_hash_map.h"
#include "google/protobuf/descriptor.h"
namespace google {
@@ -65,7 +65,9 @@
// Cache the options for any kind of descriptor.
// Descriptor pointers are owned by the DescriptorPool above.
// Python objects are owned by the map.
- std::unordered_map<const void*, PyObject*>* descriptor_options;
+ absl::flat_hash_map<const void*, PyObject*>* descriptor_options;
+ // Similar cache for features.
+ absl::flat_hash_map<const void*, PyObject*>* descriptor_features;
} PyDescriptorPool;
diff --git a/python/google/protobuf/pyext/message.cc b/python/google/protobuf/pyext/message.cc
index 449a11d..7e01f64 100644
--- a/python/google/protobuf/pyext/message.cc
+++ b/python/google/protobuf/pyext/message.cc
@@ -2346,16 +2346,11 @@
}
static PyObject* GetUnknownFields(CMessage* self) {
- PyErr_Warn(nullptr,
- "message.UnknownFields() is deprecated. Please use the "
- "add one feature unknown_fields.UnknownFieldSet(message) in "
- "unknown_fields.py instead.");
- if (self->unknown_field_set == nullptr) {
- self->unknown_field_set = unknown_fields::NewPyUnknownFields(self);
- } else {
- Py_INCREF(self->unknown_field_set);
- }
- return self->unknown_field_set;
+ PyErr_Format(PyExc_NotImplementedError,
+ "Please use the add-on feature "
+ "unknown_fields.UnknownFieldSet(message) in "
+ "unknown_fields.py instead.");
+ return nullptr;
}
static PyGetSetDef Getters[] = {
diff --git a/python/map.c b/python/map.c
index 6bf12af..bbbd636 100644
--- a/python/map.c
+++ b/python/map.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/map.h"
@@ -85,7 +62,7 @@
PyUpb_Dealloc(_self);
}
-PyTypeObject* PyUpb_MapContainer_GetClass(const upb_FieldDef* f) {
+static PyTypeObject* PyUpb_MapContainer_GetClass(const upb_FieldDef* f) {
assert(upb_FieldDef_IsMap(f));
PyUpb_ModuleState* state = PyUpb_ModuleState_Get();
const upb_FieldDef* val =
@@ -153,9 +130,9 @@
return map;
}
-bool PyUpb_MapContainer_Set(PyUpb_MapContainer* self, upb_Map* map,
- upb_MessageValue key, upb_MessageValue val,
- upb_Arena* arena) {
+static bool PyUpb_MapContainer_Set(PyUpb_MapContainer* self, upb_Map* map,
+ upb_MessageValue key, upb_MessageValue val,
+ upb_Arena* arena) {
switch (upb_Map_Insert(map, key, val, arena)) {
case kUpb_MapInsertStatus_Inserted:
return true;
@@ -169,8 +146,9 @@
return false; // Unreachable, silence compiler warning.
}
-int PyUpb_MapContainer_AssignSubscript(PyObject* _self, PyObject* key,
- PyObject* val) {
+// Assigns `self[key] = val` for the map `self`.
+static int PyUpb_MapContainer_AssignSubscript(PyObject* _self, PyObject* key,
+ PyObject* val) {
PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
upb_Map* map = PyUpb_MapContainer_EnsureReified(_self);
const upb_FieldDef* f = PyUpb_MapContainer_GetField(self);
@@ -193,7 +171,7 @@
return 0;
}
-PyObject* PyUpb_MapContainer_Subscript(PyObject* _self, PyObject* key) {
+static PyObject* PyUpb_MapContainer_Subscript(PyObject* _self, PyObject* key) {
PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
upb_Map* map = PyUpb_MapContainer_GetIfReified(self);
const upb_FieldDef* f = PyUpb_MapContainer_GetField(self);
@@ -206,7 +184,7 @@
map = PyUpb_MapContainer_EnsureReified(_self);
upb_Arena* arena = PyUpb_Arena_Get(self->arena);
if (upb_FieldDef_IsSubMessage(val_f)) {
- const upb_Message* m = upb_FieldDef_MessageSubDef(val_f);
+ const upb_MessageDef* m = upb_FieldDef_MessageSubDef(val_f);
const upb_MiniTable* layout = upb_MessageDef_MiniTable(m);
u_val.msg_val = upb_Message_New(layout, arena);
} else {
@@ -217,7 +195,7 @@
return PyUpb_UpbToPy(u_val, val_f, self->arena);
}
-PyObject* PyUpb_MapContainer_Contains(PyObject* _self, PyObject* key) {
+static PyObject* PyUpb_MapContainer_Contains(PyObject* _self, PyObject* key) {
PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
upb_Map* map = PyUpb_MapContainer_GetIfReified(self);
if (!map) Py_RETURN_FALSE;
@@ -233,7 +211,7 @@
}
}
-PyObject* PyUpb_MapContainer_Clear(PyObject* _self, PyObject* key) {
+static PyObject* PyUpb_MapContainer_Clear(PyObject* _self, PyObject* key) {
upb_Map* map = PyUpb_MapContainer_EnsureReified(_self);
upb_Map_Clear(map);
Py_RETURN_NONE;
@@ -275,13 +253,13 @@
return PyUpb_Descriptor_GetClass(entry_m);
}
-Py_ssize_t PyUpb_MapContainer_Length(PyObject* _self) {
+static Py_ssize_t PyUpb_MapContainer_Length(PyObject* _self) {
PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
upb_Map* map = PyUpb_MapContainer_GetIfReified(self);
return map ? upb_Map_Size(map) : 0;
}
-PyUpb_MapContainer* PyUpb_MapContainer_Check(PyObject* _self) {
+static PyUpb_MapContainer* PyUpb_MapContainer_Check(PyObject* _self) {
PyUpb_ModuleState* state = PyUpb_ModuleState_Get();
if (!PyObject_TypeCheck(_self, state->message_map_container_type) &&
!PyObject_TypeCheck(_self, state->scalar_map_container_type)) {
@@ -467,7 +445,7 @@
PyUpb_Dealloc(_self);
}
-PyObject* PyUpb_MapIterator_IterNext(PyObject* _self) {
+static PyObject* PyUpb_MapIterator_IterNext(PyObject* _self) {
PyUpb_MapIterator* self = (PyUpb_MapIterator*)_self;
if (self->version != self->map->version) {
return PyErr_Format(PyExc_RuntimeError, "Map modified during iteration.");
diff --git a/python/map.h b/python/map.h
index 6c2c47d..2e1298e 100644
--- a/python/map.h
+++ b/python/map.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_MAP_H__
#define PYUPB_MAP_H__
@@ -56,10 +33,6 @@
// Reifies this map object if it is not already reified.
upb_Map* PyUpb_MapContainer_EnsureReified(PyObject* self);
-// Assigns `self[key] = val` for the map `self`.
-int PyUpb_MapContainer_AssignSubscript(PyObject* self, PyObject* key,
- PyObject* val);
-
// Invalidates any existing iterators for the map `obj`.
void PyUpb_MapContainer_Invalidate(PyObject* obj);
diff --git a/python/message.c b/python/message.c
index 3ed6514..2cca1c1 100644
--- a/python/message.c
+++ b/python/message.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/message.h"
@@ -1028,6 +1005,12 @@
static int PyUpb_Message_SetAttr(PyObject* _self, PyObject* attr,
PyObject* value) {
PyUpb_Message* self = (void*)_self;
+
+ if (value == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "Cannot delete field attribute");
+ return -1;
+ }
+
const upb_FieldDef* field;
if (!PyUpb_Message_LookupName(self, attr, &field, NULL,
PyExc_AttributeError)) {
diff --git a/python/message.h b/python/message.h
index d497f61..85e70a6 100644
--- a/python/message.h
+++ b/python/message.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYPB_MESSAGE_H__
#define PYPB_MESSAGE_H__
diff --git a/python/pb_unit_tests/BUILD b/python/pb_unit_tests/BUILD
index 56ee250..8bb43dc 100644
--- a/python/pb_unit_tests/BUILD
+++ b/python/pb_unit_tests/BUILD
@@ -6,6 +6,7 @@
# https://developers.google.com/open-source/licenses/bsd
load(":pyproto_test_wrapper.bzl", "pyproto_test_wrapper")
+
# begin:github_only
load("@pip_deps//:requirements.bzl", "requirement")
# end:github_only
@@ -39,15 +40,15 @@
name = "numpy_test",
srcs = ["numpy_test_wrapper.py"],
main = "numpy_test_wrapper.py",
- deps = [
- requirement("numpy"),
- "//python/google/protobuf/internal/numpy:numpy_test",
- "//python:_message",
- ],
target_compatible_with = select({
- "@system_python//:supported": [],
- "//conditions:default": ["@platforms//:incompatible"],
+ "@system_python//:supported": [],
+ "//conditions:default": ["@platforms//:incompatible"],
}),
+ deps = [
+ requirement("numpy"),
+ "//python:_message",
+ "//python/google/protobuf/internal/numpy:numpy_test",
+ ],
)
# end:github_only
diff --git a/python/pb_unit_tests/pyproto_test_wrapper.bzl b/python/pb_unit_tests/pyproto_test_wrapper.bzl
index bd5d0c0..3ddf630 100644
--- a/python/pb_unit_tests/pyproto_test_wrapper.bzl
+++ b/python/pb_unit_tests/pyproto_test_wrapper.bzl
@@ -25,7 +25,7 @@
# begin:google_only
#
-# load("//third_party/bazel_rules/rules_python/python:py_test.bzl", "py_test")
+# load("@rules_python//python:py_test.bzl", "py_test")
#
# def pyproto_test_wrapper(name):
# src = name + "_wrapper.py"
diff --git a/python/protobuf.c b/python/protobuf.c
index 324b1ed..4f53154 100644
--- a/python/protobuf.c
+++ b/python/protobuf.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/protobuf.h"
diff --git a/python/protobuf.h b/python/protobuf.h
index e9839be..9c5894c 100644
--- a/python/protobuf.h
+++ b/python/protobuf.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_PROTOBUF_H__
#define PYUPB_PROTOBUF_H__
diff --git a/python/py_extension.bzl b/python/py_extension.bzl
index 1de830f..9a2828b 100644
--- a/python/py_extension.bzl
+++ b/python/py_extension.bzl
@@ -54,5 +54,8 @@
name = name,
data = [output_file],
imports = ["."],
- visibility = ["//python:__subpackages__"],
+ visibility = [
+ "//python:__subpackages__",
+ "//conformance:__pkg__",
+ ],
)
diff --git a/python/python_api.h b/python/python_api.h
index fae7df2..e94a610 100644
--- a/python/python_api.h
+++ b/python/python_api.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_PYTHON_H__
#define PYUPB_PYTHON_H__
diff --git a/python/repeated.c b/python/repeated.c
index abb34e8..57e3479 100644
--- a/python/repeated.c
+++ b/python/repeated.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/repeated.h"
diff --git a/python/repeated.h b/python/repeated.h
index 54670e7..08426a6 100644
--- a/python/repeated.h
+++ b/python/repeated.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_REPEATED_H__
#define PYUPB_REPEATED_H__
diff --git a/python/unknown_fields.c b/python/unknown_fields.c
index f228f23..8017bd8 100644
--- a/python/unknown_fields.c
+++ b/python/unknown_fields.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "python/unknown_fields.h"
diff --git a/python/unknown_fields.h b/python/unknown_fields.h
index 85ea40c..c9eae3b 100644
--- a/python/unknown_fields.h
+++ b/python/unknown_fields.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef PYUPB_UNKNOWN_FIELDS_H__
#define PYUPB_UNKNOWN_FIELDS_H__
diff --git a/ruby/.gitignore b/ruby/.gitignore
index 143b48e..555af6c 100644
--- a/ruby/.gitignore
+++ b/ruby/.gitignore
@@ -8,8 +8,6 @@
tmp/
tests/google/
ext/google/protobuf_c/third_party/utf8_range/utf8_range.h
-ext/google/protobuf_c/third_party/utf8_range/range2-sse.c
-ext/google/protobuf_c/third_party/utf8_range/range2-neon.c
-ext/google/protobuf_c/third_party/utf8_range/naive.c
+ext/google/protobuf_c/third_party/utf8_range/utf8_range.c
ext/google/protobuf_c/third_party/utf8_range/LICENSE
lib/google/protobuf/*_pb.rb
\ No newline at end of file
diff --git a/ruby/BUILD.bazel b/ruby/BUILD.bazel
index cfc96eb..8892af5 100755
--- a/ruby/BUILD.bazel
+++ b/ruby/BUILD.bazel
@@ -6,7 +6,8 @@
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_ruby//ruby:defs.bzl", "ruby_library")
-load("//:protobuf.bzl", "internal_ruby_proto_library")
+load("//python:internal.bzl", "internal_copy_files")
+load("//ruby:defs.bzl", "internal_ruby_proto_library")
load("//:protobuf_version.bzl", "PROTOBUF_RUBY_VERSION")
load("//conformance:defs.bzl", "conformance_test")
@@ -85,6 +86,49 @@
],
)
+internal_copy_files(
+ name = "copied_wkt_proto_files",
+ srcs = [
+ "//:well_known_type_protos",
+ "//src/google/protobuf:descriptor_proto_srcs",
+ "//src/google/protobuf/compiler:plugin.proto",
+ ],
+ strip_prefix = "src",
+)
+
+internal_ruby_proto_library(
+ name = "well_known_ruby_protos",
+ srcs = [":copied_wkt_proto_files"],
+ default_runtime = "",
+ includes = ["."],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+)
+
+internal_copy_files(
+ name = "copied_conformance_test_files",
+ testonly = 1,
+ srcs = [
+ "//src/google/protobuf:test_messages_proto2.proto",
+ "//src/google/protobuf:test_messages_proto3.proto",
+ ],
+ strip_prefix = "src",
+)
+
+internal_ruby_proto_library(
+ name = "conformance_test_ruby_proto",
+ testonly = 1,
+ srcs = [":copied_conformance_test_files"],
+ includes = ["."],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+ deps = [":well_known_ruby_protos"],
+)
+
ruby_library(
name = "protobuf",
visibility = [
@@ -104,7 +148,7 @@
"//ruby/lib/google:copy_jar",
"//ruby/lib/google:dist_files",
"//ruby/ext/google/protobuf_c:dist_files",
- "//:well_known_ruby_protos",
+ ":well_known_ruby_protos",
"google-protobuf.gemspec",
],
outs = ["google-protobuf-" + PROTOBUF_RUBY_VERSION + "-java.gem"],
@@ -118,7 +162,7 @@
for utf in $(execpaths //third_party/utf8_range:utf8_range_srcs) $(execpath //third_party/utf8_range:LICENSE); do
mv "tmp/$$utf" "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range"
done
- for wkt in $(execpaths //:well_known_ruby_protos); do
+ for wkt in $(execpaths :well_known_ruby_protos); do
mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/"
done
mv "tmp/$(execpath //ruby/lib/google:copy_jar)" "tmp/ruby/lib/google"
@@ -140,9 +184,9 @@
srcs = [
"//third_party/utf8_range:utf8_range_srcs",
"//third_party/utf8_range:LICENSE",
- "//:well_known_ruby_protos",
"//ruby/ext/google/protobuf_c:dist_files",
"//ruby/lib/google:dist_files",
+ ":well_known_ruby_protos",
"google-protobuf.gemspec",
],
outs = ["google-protobuf-" + PROTOBUF_RUBY_VERSION + ".gem"],
@@ -156,7 +200,7 @@
for utf in $(execpaths //third_party/utf8_range:utf8_range_srcs) $(execpath //third_party/utf8_range:LICENSE); do
mv "tmp/$$utf" "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range"
done
- for wkt in $(execpaths //:well_known_ruby_protos); do
+ for wkt in $(execpaths :well_known_ruby_protos); do
mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/"
done
cd tmp/ruby
@@ -185,21 +229,6 @@
# Tests
################################################################################
-# Define this here so the descriptor paths match what we get in Rake tests.
-internal_ruby_proto_library(
- name = "test_ruby_protos",
- srcs = ["//ruby/tests:test_protos"],
- includes = [
- ".",
- "ruby/tests",
- "src",
- ],
- visibility = [
- "//ruby:__subpackages__",
- ],
- deps = ["//:well_known_ruby_protos"],
-)
-
conformance_test(
name = "conformance_test",
failure_list = "//conformance:failure_list_ruby.txt",
diff --git a/ruby/README.md b/ruby/README.md
index cba3d58..c7c71b7 100644
--- a/ruby/README.md
+++ b/ruby/README.md
@@ -115,7 +115,7 @@
To run tests against the FFI implementation:
```
-$ bazel test //ruby/tests/... //ruby:ffi=enabled --test_env=PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION=FFI
+$ bazel test //ruby/tests/... //ruby:ffi_enabled --test_env=PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION=FFI
```
Version Number Scheme
diff --git a/ruby/Rakefile b/ruby/Rakefile
index 860bbc3..8f5d841 100644
--- a/ruby/Rakefile
+++ b/ruby/Rakefile
@@ -26,6 +26,8 @@
tests/generated_code.proto
tests/generated_code_proto2.proto
tests/multi_level_nesting_test.proto
+ tests/repeated_field_test.proto
+ tests/stress.proto
tests/test_import.proto
tests/test_import_proto2.proto
tests/test_ruby_package.proto
@@ -64,7 +66,7 @@
output_file = proto_file.sub(/\.proto$/, "_pb.rb")
genproto_output << output_file
file output_file => proto_file do |file_task|
- sh "#{protoc_command} -I../src -I. -I./tests --ruby_out=. #{proto_file}"
+ sh "#{protoc_command} -I../src -I./tests --ruby_out=tests #{proto_file}"
end
end
end
@@ -75,7 +77,7 @@
# We need utf8_range in-tree.
utf8_root = '../third_party/utf8_range'
%w[
- utf8_range.h naive.c range2-neon.c range2-neon.c range2-sse.c LICENSE
+ utf8_range.h utf8_range.c LICENSE
].each do |file|
FileUtils.cp File.join(utf8_root, file),
"ext/google/protobuf_c/third_party/utf8_range"
diff --git a/ruby/compatibility_tests/v3.0.0/BUILD.bazel b/ruby/compatibility_tests/v3.0.0/BUILD.bazel
deleted file mode 100644
index 60c4985..0000000
--- a/ruby/compatibility_tests/v3.0.0/BUILD.bazel
+++ /dev/null
@@ -1,34 +0,0 @@
-load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
-
-################################################################################
-# Distribution files
-############################################################################
-
-genrule(
- name = "protoc-compat-gen",
- outs = ["protoc"],
- cmd = """
- PROTOC_BINARY_NAME="protoc-3.0.0-linux-x86_64.exe"
- if [ `uname` = "Darwin" ]; then
- PROTOC_BINARY_NAME="protoc-3.0.0-osx-x86_64.exe"
- fi
- wget https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.0/$${PROTOC_BINARY_NAME} -O protoc
- chmod +x protoc
- mv protoc $@
- """,
- executable = True,
- visibility = ["//ruby/compatibility_tests/v3.0.0:__subpackages__"],
-)
-
-pkg_files(
- name = "dist_files",
- srcs = [
- "BUILD.bazel",
- "README.md",
- "Rakefile",
- "test.sh",
- "//ruby/compatibility_tests/v3.0.0/tests:dist_files",
- ],
- strip_prefix = strip_prefix.from_root(""),
- visibility = ["//pkg:__pkg__"],
-)
diff --git a/ruby/compatibility_tests/v3.0.0/README.md b/ruby/compatibility_tests/v3.0.0/README.md
deleted file mode 100644
index 06d981c..0000000
--- a/ruby/compatibility_tests/v3.0.0/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Protobuf Ruby Compatibility Tests
-
-This directory contains a snapshot of protobuf ruby 3.0.0 unittest code and
-test scripts used to verifies whether the latest version of protobuf is
-still compatible with 3.0.0 generated code.
diff --git a/ruby/compatibility_tests/v3.0.0/Rakefile b/ruby/compatibility_tests/v3.0.0/Rakefile
deleted file mode 100644
index fee72b4..0000000
--- a/ruby/compatibility_tests/v3.0.0/Rakefile
+++ /dev/null
@@ -1,26 +0,0 @@
-require "rake/testtask"
-
-# Proto for tests.
-genproto_output = []
-
-genproto_output << "tests/generated_code.rb"
-genproto_output << "tests/test_import.rb"
-file "tests/generated_code.rb" => "tests/generated_code.proto" do |file_task|
- sh "./protoc --ruby_out=. tests/generated_code.proto"
-end
-
-file "tests/test_import.rb" => "tests/test_import.proto" do |file_task|
- sh "./protoc --ruby_out=. tests/test_import.proto"
-end
-
-task :genproto => genproto_output
-
-task :clean do
- sh "rm -f #{genproto_output.join(' ')}"
-end
-
-Rake::TestTask.new(:test => :genproto) do |t|
- t.test_files = FileList["tests/*.rb"]
-end
-
-task :default => [:test]
diff --git a/ruby/compatibility_tests/v3.0.0/test.sh b/ruby/compatibility_tests/v3.0.0/test.sh
deleted file mode 100755
index 1a9b798..0000000
--- a/ruby/compatibility_tests/v3.0.0/test.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-set -ex
-
-# Change to the script's directory
-cd $(dirname $0)
-
-# Download 3.0.0 version of protoc
-PROTOC_BINARY_NAME="protoc-3.0.0-linux-x86_64.exe"
-if [ `uname` = "Darwin" ]; then
- PROTOC_BINARY_NAME="protoc-3.0.0-osx-x86_64.exe"
-fi
-wget https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.0/${PROTOC_BINARY_NAME} -O protoc
-chmod +x protoc
-
-# Run tests
-RUBYLIB=../../lib:. rake test
diff --git a/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel b/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel
deleted file mode 100644
index 34a5391..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_ruby//ruby:defs.bzl", "ruby_test")
-load("//:protobuf.bzl", "internal_ruby_proto_library")
-
-internal_ruby_proto_library(
- name = "test_ruby_protos",
- srcs = glob(["*.proto"]),
- includes = ["."],
- protoc = "//ruby/compatibility_tests/v3.0.0:protoc",
-)
-
-ruby_test(
- name = "basic",
- srcs = ["basic.rb"],
- deps = [
- ":test_ruby_protos",
- "//ruby:protobuf",
- "@protobuf_bundle//:test-unit",
- ],
-)
-
-ruby_test(
- name = "generated_code_test",
- srcs = ["generated_code_test.rb"],
- deps = [
- ":test_ruby_protos",
- "//ruby:protobuf",
- "@protobuf_bundle//:test-unit",
- ],
-)
-
-ruby_test(
- name = "repeated_field_test",
- srcs = ["repeated_field_test.rb"],
- deps = [
- ":test_ruby_protos",
- "//ruby:protobuf",
- "@protobuf_bundle//:test-unit",
- ],
-)
-
-ruby_test(
- name = "stress",
- srcs = ["stress.rb"],
- deps = [
- ":test_ruby_protos",
- "//ruby:protobuf",
- "@protobuf_bundle//:test-unit",
- ],
-)
-
-################################################################################
-# Distribution files
-############################################################################
-
-pkg_files(
- name = "dist_files",
- srcs = glob([
- "**/*.rb",
- "**/*.proto",
- ]),
- strip_prefix = strip_prefix.from_root(""),
- visibility = ["//ruby/compatibility_tests/v3.0.0:__pkg__"],
-)
diff --git a/ruby/compatibility_tests/v3.0.0/tests/basic.rb b/ruby/compatibility_tests/v3.0.0/tests/basic.rb
deleted file mode 100755
index b59193e..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/basic.rb
+++ /dev/null
@@ -1,1133 +0,0 @@
-#!/usr/bin/ruby
-
-require 'google/protobuf'
-require 'test/unit'
-
-# ------------- generated code --------------
-
-module BasicTest
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
- add_message "Foo" do
- optional :bar, :message, 1, "Bar"
- repeated :baz, :message, 2, "Baz"
- end
-
- add_message "Bar" do
- optional :msg, :string, 1
- end
-
- add_message "Baz" do
- optional :msg, :string, 1
- end
-
- add_message "TestMessage" do
- optional :optional_int32, :int32, 1
- optional :optional_int64, :int64, 2
- optional :optional_uint32, :uint32, 3
- optional :optional_uint64, :uint64, 4
- optional :optional_bool, :bool, 5
- optional :optional_float, :float, 6
- optional :optional_double, :double, 7
- optional :optional_string, :string, 8
- optional :optional_bytes, :bytes, 9
- optional :optional_msg, :message, 10, "TestMessage2"
- optional :optional_enum, :enum, 11, "TestEnum"
-
- repeated :repeated_int32, :int32, 12
- repeated :repeated_int64, :int64, 13
- repeated :repeated_uint32, :uint32, 14
- repeated :repeated_uint64, :uint64, 15
- repeated :repeated_bool, :bool, 16
- repeated :repeated_float, :float, 17
- repeated :repeated_double, :double, 18
- repeated :repeated_string, :string, 19
- repeated :repeated_bytes, :bytes, 20
- repeated :repeated_msg, :message, 21, "TestMessage2"
- repeated :repeated_enum, :enum, 22, "TestEnum"
- end
- add_message "TestMessage2" do
- optional :foo, :int32, 1
- end
-
- add_message "Recursive1" do
- optional :foo, :message, 1, "Recursive2"
- end
- add_message "Recursive2" do
- optional :foo, :message, 1, "Recursive1"
- end
-
- add_enum "TestEnum" do
- value :Default, 0
- value :A, 1
- value :B, 2
- value :C, 3
- end
-
- add_message "BadFieldNames" do
- optional :dup, :int32, 1
- optional :class, :int32, 2
- end
-
- add_message "MapMessage" do
- map :map_string_int32, :string, :int32, 1
- map :map_string_msg, :string, :message, 2, "TestMessage2"
- end
- add_message "MapMessageWireEquiv" do
- repeated :map_string_int32, :message, 1, "MapMessageWireEquiv_entry1"
- repeated :map_string_msg, :message, 2, "MapMessageWireEquiv_entry2"
- end
- add_message "MapMessageWireEquiv_entry1" do
- optional :key, :string, 1
- optional :value, :int32, 2
- end
- add_message "MapMessageWireEquiv_entry2" do
- optional :key, :string, 1
- optional :value, :message, 2, "TestMessage2"
- end
-
- add_message "OneofMessage" do
- oneof :my_oneof do
- optional :a, :string, 1
- optional :b, :int32, 2
- optional :c, :message, 3, "TestMessage2"
- optional :d, :enum, 4, "TestEnum"
- end
- end
- end
-
- Foo = pool.lookup("Foo").msgclass
- Bar = pool.lookup("Bar").msgclass
- Baz = pool.lookup("Baz").msgclass
- TestMessage = pool.lookup("TestMessage").msgclass
- TestMessage2 = pool.lookup("TestMessage2").msgclass
- Recursive1 = pool.lookup("Recursive1").msgclass
- Recursive2 = pool.lookup("Recursive2").msgclass
- TestEnum = pool.lookup("TestEnum").enummodule
- BadFieldNames = pool.lookup("BadFieldNames").msgclass
- MapMessage = pool.lookup("MapMessage").msgclass
- MapMessageWireEquiv = pool.lookup("MapMessageWireEquiv").msgclass
- MapMessageWireEquiv_entry1 =
- pool.lookup("MapMessageWireEquiv_entry1").msgclass
- MapMessageWireEquiv_entry2 =
- pool.lookup("MapMessageWireEquiv_entry2").msgclass
- OneofMessage = pool.lookup("OneofMessage").msgclass
-
-# ------------ test cases ---------------
-
- class MessageContainerTest < Test::Unit::TestCase
-
- def test_defaults
- m = TestMessage.new
- assert_equal 0, m.optional_int32
- assert_equal 0, m.optional_int64
- assert_equal 0, m.optional_uint32
- assert_equal 0, m.optional_uint64
- refute m.optional_bool
- assert_equal 0.0, m.optional_float
- assert_equal 0.0, m.optional_double
- assert_empty m.optional_string
- assert_empty m.optional_bytes
- assert_nil m.optional_msg
- assert_equal :Default, m.optional_enum
- end
-
- def test_setters
- m = TestMessage.new
- m.optional_int32 = -42
- assert_equal -42, m.optional_int32
- m.optional_int64 = -0x1_0000_0000
- assert_equal -0x1_0000_0000, m.optional_int64
- m.optional_uint32 = 0x9000_0000
- assert_equal 0x9000_0000, m.optional_uint32
- m.optional_uint64 = 0x9000_0000_0000_0000
- assert_equal 0x9000_0000_0000_0000, m.optional_uint64
- m.optional_bool = true
- assert m.optional_bool
- m.optional_float = 0.5
- assert_equal 0.5, m.optional_float
- m.optional_double = 0.5
- assert_equal 0.5, m.optional_double
- m.optional_string = "hello"
- assert_equal "hello", m.optional_string
- m.optional_bytes = "world".encode!('ASCII-8BIT')
- assert_equal "world", m.optional_bytes
- m.optional_msg = TestMessage2.new(:foo => 42)
- assert_equal m.optional_msg, TestMessage2.new(:foo => 42)
- m.optional_msg = nil
- assert_nil m.optional_msg
- end
-
- def test_ctor_args
- m = TestMessage.new(:optional_int32 => -42,
- :optional_msg => TestMessage2.new,
- :optional_enum => :C,
- :repeated_string => ["hello", "there", "world"])
- assert_equal -42, m.optional_int32
- assert_instance_of TestMessage2, m.optional_msg
- assert_equal 3, m.repeated_string.length
- assert_equal :C, m.optional_enum
- assert_equal "hello", m.repeated_string[0]
- assert_equal "there", m.repeated_string[1]
- assert_equal "world", m.repeated_string[2]
- end
-
- def test_inspect
- m = TestMessage.new(:optional_int32 => -42,
- :optional_enum => :A,
- :optional_msg => TestMessage2.new,
- :repeated_string => ["hello", "there", "world"])
- expected = '<BasicTest::TestMessage: optional_int32: -42, optional_int64: 0, optional_uint32: 0, optional_uint64: 0, optional_bool: false, optional_float: 0.0, optional_double: 0.0, optional_string: "", optional_bytes: "", optional_msg: <BasicTest::TestMessage2: foo: 0>, optional_enum: :A, repeated_int32: [], repeated_int64: [], repeated_uint32: [], repeated_uint64: [], repeated_bool: [], repeated_float: [], repeated_double: [], repeated_string: ["hello", "there", "world"], repeated_bytes: [], repeated_msg: [], repeated_enum: []>'
- assert_equal expected, m.inspect
- end
-
- def test_hash
- m1 = TestMessage.new(:optional_int32 => 42)
- m2 = TestMessage.new(:optional_int32 => 102)
- refute_equal 0, m1.hash
- refute_equal 0, m2.hash
- # relying on the randomness here -- if hash function changes and we are
- # unlucky enough to get a collision, then change the values above.
- refute_equal m1.hash, m2.hash
- end
-
- def test_unknown_field_errors
- e = assert_raises NoMethodError do
- TestMessage.new.hello
- end
- assert_match(/hello/, e.message)
-
- e = assert_raises NoMethodError do
- TestMessage.new.hello = "world"
- end
- assert_match(/hello/, e.message)
- end
-
- def test_initialization_map_errors
- e = assert_raises ArgumentError do
- TestMessage.new(:hello => "world")
- end
- assert_match(/hello/, e.message)
-
- e = assert_raises ArgumentError do
- MapMessage.new(:map_string_int32 => "hello")
- end
- assert_equal "Expected Hash object as initializer value for map field 'map_string_int32' (given String).", e.message
- e = assert_raises ArgumentError do
- TestMessage.new(:repeated_uint32 => "hello")
- end
- assert_equal "Expected array as initializer value for repeated field 'repeated_uint32' (given String).", e.message
- end
-
- def test_type_errors
- m = TestMessage.new
-
- assert_raises Google::Protobuf::TypeError do
- m.optional_int32 = "hello"
- end
-
- assert_raises Google::Protobuf::TypeError do
- m.optional_string = nil
- end
-
- assert_raises Google::Protobuf::TypeError do
- m.optional_bool = 42
- end
-
- assert_raises Google::Protobuf::TypeError do
- m.optional_msg = TestMessage.new # expects TestMessage2
- end
-
- assert_raises Google::Protobuf::TypeError do
- m.repeated_int32 = [] # needs RepeatedField
- end
-
- assert_raises Google::Protobuf::TypeError do
- m.repeated_msg.push TestMessage.new
- end
- end
-
- def test_string_encoding
- m = TestMessage.new
-
- # Assigning a normal (ASCII or UTF8) string to a bytes field, or
- # ASCII-8BIT to a string field will convert to the proper encoding.
- m.optional_bytes = "Test string ASCII".encode!('ASCII')
- assert m.optional_bytes.frozen?
- assert_equal Encoding::ASCII_8BIT, m.optional_bytes.encoding
- assert_equal "Test string ASCII", m.optional_bytes
-
- assert_raises Encoding::UndefinedConversionError do
- m.optional_bytes = "Test string UTF-8 \u0100".encode!('UTF-8')
- end
-
- assert_raises Encoding::UndefinedConversionError do
- m.optional_string = ["FFFF"].pack('H*')
- end
-
- # "Ordinary" use case.
- m.optional_bytes = ["FFFF"].pack('H*')
- m.optional_string = "\u0100"
-
- # strings are immutable so we can't do this, but serialize should catch it.
- m.optional_string = "asdf".encode!('UTF-8')
- assert_raises do
- m.optional_string.encode!('ASCII-8BIT')
- end
- end
-
- def test_rptfield_int32
- l = Google::Protobuf::RepeatedField.new(:int32)
- assert_equal 0, l.count
- l = Google::Protobuf::RepeatedField.new(:int32, [1, 2, 3])
- assert_equal 3, l.count
- assert_equal [1, 2, 3], l
- assert_equal [1, 2, 3], l
- l.push 4
- assert_equal [1, 2, 3, 4], l
- dst_list = []
- l.each { |val| dst_list.push val }
- assert_equal [1, 2, 3, 4], dst_list
- assert_equal [1, 2, 3, 4], l.to_a
- assert_equal 1, l[0]
- assert_equal 4, l[3]
- l[0] = 5
- assert_equal [5, 2, 3, 4], l
- l2 = l.dup
- assert_equal l, l2
- refute_same l, l2
- l2.push 6
- assert_equal 4, l.count
- assert_equal 5, l2.count
- assert_equal '[5, 2, 3, 4]', l.inspect
- l.concat([7, 8, 9])
- assert_equal [5, 2, 3, 4, 7, 8, 9], l
- assert_equal 9, l.pop
- assert_equal [5, 2, 3, 4, 7, 8], l
- m = TestMessage.new
- assert_raises Google::Protobuf::TypeError do
- l.push m
- end
-
- m.repeated_int32 = l
- assert_equal [5, 2, 3, 4, 7, 8], m.repeated_int32
- assert_same m.repeated_int32, l
- l.push 42
- assert_equal 42, m.repeated_int32.pop
- l3 = l + l.dup
- assert_equal l.count * 2, l3.count
- l.count.times do |i|
- assert_equal l[i], l3[i]
- assert_equal l[i], l3[l.count + i]
- end
-
- l.clear
- assert_equal 0, l.count
- l += [1, 2, 3, 4]
- l.replace([5, 6, 7, 8])
- assert_equal [5, 6, 7, 8], l
- l4 = Google::Protobuf::RepeatedField.new(:int32)
- l4[5] = 42
- assert_equal [0, 0, 0, 0, 0, 42], l4
- l4 << 100
- assert_equal [0, 0, 0, 0, 0, 42, 100], l4
- l4 << 101 << 102
- assert_equal [0, 0, 0, 0, 0, 42, 100, 101, 102], l4
- end
-
- def test_parent_rptfield
- #make sure we set the RepeatedField and can add to it
- m = TestMessage.new
- assert_empty m.repeated_string
- m.repeated_string << 'ok'
- m.repeated_string.push('ok2')
- assert_equal ['ok', 'ok2'], m.repeated_string
- m.repeated_string += ['ok3']
- assert_equal ['ok', 'ok2', 'ok3'], m.repeated_string
- end
-
- def test_rptfield_msg
- l = Google::Protobuf::RepeatedField.new(:message, TestMessage)
- l.push TestMessage.new
- assert_equal 1, l.count
- assert_raises Google::Protobuf::TypeError do
- l.push TestMessage2.new
- end
- assert_raises Google::Protobuf::TypeError do
- l.push 42
- end
-
- l2 = l.dup
- assert_equal l[0], l2[0]
- assert_same l2[0], l[0]
- l2 = Google::Protobuf.deep_copy(l)
- assert_equal l[0], l2[0]
- refute_same l2[0], l[0]
- l3 = l + l2
- assert_equal 2, l3.count
- assert_equal l[0], l3[0]
- assert_equal l2[0], l3[1]
- l3[0].optional_int32 = 1000
- assert_equal 1000, l[0].optional_int32
- new_msg = TestMessage.new(:optional_int32 => 200)
- l4 = l + [new_msg]
- assert_equal 2, l4.count
- new_msg.optional_int32 = 1000
- assert_equal 1000, l4[1].optional_int32
- end
-
- def test_rptfield_enum
- l = Google::Protobuf::RepeatedField.new(:enum, TestEnum)
- l.push :A
- l.push :B
- l.push :C
- assert_equal 3, l.count
- assert_raises RangeError do
- l.push :D
- end
- assert_equal :A, l[0]
- l.push 4
- assert_equal 4, l[3]
- end
-
- def test_rptfield_initialize
- assert_raises ArgumentError do
- l = Google::Protobuf::RepeatedField.new
- end
- assert_raises ArgumentError do
- l = Google::Protobuf::RepeatedField.new(:message)
- end
- assert_raises ArgumentError do
- l = Google::Protobuf::RepeatedField.new([1, 2, 3])
- end
- assert_raises ArgumentError do
- l = Google::Protobuf::RepeatedField.new(:message, [TestMessage2.new])
- end
- end
-
- def test_rptfield_array_ducktyping
- l = Google::Protobuf::RepeatedField.new(:int32)
- length_methods = %w(count length size)
- length_methods.each do |lm|
- assert_equal 0, l.send(lm)
- end
- # out of bounds returns a nil
- assert_nil l[0]
- assert_nil l[1]
- assert_nil l[-1]
- l.push 4
- length_methods.each do |lm|
- assert_equal 1, l.send(lm)
- end
- assert_equal 4, l[0]
- assert_nil l[1]
- assert_equal 4, l[-1]
- assert_nil l[-2]
- l.push 2
- length_methods.each do |lm|
- assert_equal 2, l.send(lm)
- end
- assert_equal 4, l[0]
- assert_equal 2, l[1]
- assert_nil l[2]
- assert_equal 2, l[-1]
- assert_equal 4, l[-2]
- assert_nil l[-3]
- #adding out of scope will backfill with empty objects
- end
-
- def test_map_basic
- # allowed key types:
- # :int32, :int64, :uint32, :uint64, :bool, :string, :bytes.
-
- m = Google::Protobuf::Map.new(:string, :int32)
- m["asdf"] = 1
- assert_equal 1, m["asdf"]
- m["jkl;"] = 42
- assert_equal({ "jkl;" => 42, "asdf" => 1 }, m.to_h)
- assert_includes m.to_h, "asdf"
- refute_includes m, "qwerty"
- assert_equal 2, m.length
- m2 = m.dup
- assert_equal m, m2
- refute_equal 0, m.hash
- assert_equal m.hash, m2.hash
- collected = {}
- m.each { |k,v| collected[v] = k }
- assert_equal({ 42 => "jkl;", 1 => "asdf" }, collected)
- assert_equal 1, m.delete("asdf")
- refute_includes m, "asdf"
- assert_nil m["asdf"]
- refute_includes m, "asdf"
-
- # We only assert on inspect value when there is one map entry because the
- # order in which elements appear is unspecified (depends on the internal
- # hash function). We don't want a brittle test.
- assert_equal "{\"jkl;\"=>42}", m.inspect
- assert_equal ["jkl;"], m.keys
- assert_equal [42], m.values
- m.clear
- assert_equal 0, m.length
- assert_empty m.to_h
- assert_raises Google::Protobuf::TypeError do
- m[1] = 1
- end
-
- assert_raises RangeError do
- m["asdf"] = 0x1_0000_0000
- end
- end
-
- def test_map_ctor
- m = Google::Protobuf::Map.new(:string, :int32,
- {"a" => 1, "b" => 2, "c" => 3})
- assert_equal({"a" => 1, "c" => 3, "b" => 2}, m.to_h)
- end
-
- def test_map_keytypes
- m = Google::Protobuf::Map.new(:int32, :int32)
- m[1] = 42
- m[-1] = 42
- assert_raises RangeError do
- m[0x8000_0000] = 1
- end
-
- assert_raises Google::Protobuf::TypeError do
- m["asdf"] = 1
- end
-
- m = Google::Protobuf::Map.new(:int64, :int32)
- m[0x1000_0000_0000_0000] = 1
- assert_raises RangeError do
- m[0x1_0000_0000_0000_0000] = 1
- end
-
- assert_raises Google::Protobuf::TypeError do
- m["asdf"] = 1
- end
-
- m = Google::Protobuf::Map.new(:uint32, :int32)
- m[0x8000_0000] = 1
- assert_raises RangeError do
- m[0x1_0000_0000] = 1
- end
- assert_raises RangeError do
- m[-1] = 1
- end
-
- m = Google::Protobuf::Map.new(:uint64, :int32)
- m[0x8000_0000_0000_0000] = 1
- assert_raises RangeError do
- m[0x1_0000_0000_0000_0000] = 1
- end
- assert_raises RangeError do
- m[-1] = 1
- end
-
- m = Google::Protobuf::Map.new(:bool, :int32)
- m[true] = 1
- m[false] = 2
-
- assert_raises Google::Protobuf::TypeError do
- m[1] = 1
- end
-
- assert_raises Google::Protobuf::TypeError do
- m["asdf"] = 1
- end
-
- m = Google::Protobuf::Map.new(:string, :int32)
- m["asdf"] = 1
- assert_raises Google::Protobuf::TypeError do
- m[1] = 1
- end
- bytestring = ["FFFF"].pack("H*")
- assert_raises Encoding::UndefinedConversionError do
- m[bytestring] = 1
- end
-
- m = Google::Protobuf::Map.new(:bytes, :int32)
- bytestring = ["FFFF"].pack("H*")
- m[bytestring] = 1
- # Allowed -- we will automatically convert to ASCII-8BIT.
- m["asdf"] = 1
- assert_raises Google::Protobuf::TypeError do
- m[1] = 1
- end
- end
-
- def test_map_msg_enum_valuetypes
- m = Google::Protobuf::Map.new(:string, :message, TestMessage)
- m["asdf"] = TestMessage.new
- assert_raises Google::Protobuf::TypeError do
- m["jkl;"] = TestMessage2.new
- end
-
- m = Google::Protobuf::Map.new(
- :string, :message, TestMessage,
- { "a" => TestMessage.new(:optional_int32 => 42),
- "b" => TestMessage.new(:optional_int32 => 84) })
- assert_equal 2, m.length
- assert_equal [42, 84], m.values.map{|msg| msg.optional_int32}.sort
- m = Google::Protobuf::Map.new(:string, :enum, TestEnum,
- { "x" => :A, "y" => :B, "z" => :C })
- assert_equal 3, m.length
- assert_equal :C, m["z"]
- m["z"] = 2
- assert_equal :B, m["z"]
- m["z"] = 5
- assert_equal 5, m["z"]
- assert_raises RangeError do
- m["z"] = :Z
- end
- assert_raises RangeError do
- m["z"] = "z"
- end
- end
-
- def test_map_dup_deep_copy
- m = Google::Protobuf::Map.new(
- :string, :message, TestMessage,
- { "a" => TestMessage.new(:optional_int32 => 42),
- "b" => TestMessage.new(:optional_int32 => 84) })
-
- m2 = m.dup
- assert_equal m, m2
- refute_same m, m2
- assert_same m["a"], m2["a"]
- assert_same m["b"], m2["b"]
- m2 = Google::Protobuf.deep_copy(m)
- assert_equal m, m2
- refute_same m, m2
- refute_same m["a"], m2["a"]
- refute_same m["b"], m2["b"]
- end
-
- def test_map_field
- m = MapMessage.new
- assert_empty m.map_string_int32.to_h
- assert_empty m.map_string_msg.to_h
- m = MapMessage.new(
- :map_string_int32 => {"a" => 1, "b" => 2},
- :map_string_msg => {"a" => TestMessage2.new(:foo => 1),
- "b" => TestMessage2.new(:foo => 2)})
- assert_equal ["a", "b"], m.map_string_int32.keys.sort
- assert_equal 1, m.map_string_int32["a"]
- assert_equal 2, m.map_string_msg["b"].foo
- m.map_string_int32["c"] = 3
- assert_equal 3, m.map_string_int32["c"]
- m.map_string_msg["c"] = TestMessage2.new(:foo => 3)
- assert_equal TestMessage2.new(:foo => 3), m.map_string_msg["c"]
- m.map_string_msg.delete("b")
- m.map_string_msg.delete("c")
- assert_equal({ "a" => TestMessage2.new(:foo => 1).to_h }, m.map_string_msg.to_h)
- assert_raises Google::Protobuf::TypeError do
- m.map_string_msg["e"] = TestMessage.new # wrong value type
- end
- # ensure nothing was added by the above
- assert_equal({ "a" => TestMessage2.new(:foo => 1).to_h }, m.map_string_msg.to_h)
- m.map_string_int32 = Google::Protobuf::Map.new(:string, :int32)
- assert_raises Google::Protobuf::TypeError do
- m.map_string_int32 = Google::Protobuf::Map.new(:string, :int64)
- end
- assert_raises Google::Protobuf::TypeError do
- m.map_string_int32 = {}
- end
- assert_raises Google::Protobuf::TypeError do
- m = MapMessage.new(:map_string_int32 => { 1 => "I am not a number" })
- end
- end
-
- def test_map_encode_decode
- m = MapMessage.new(
- :map_string_int32 => {"a" => 1, "b" => 2},
- :map_string_msg => {"a" => TestMessage2.new(:foo => 1),
- "b" => TestMessage2.new(:foo => 2)})
- m2 = MapMessage.decode(MapMessage.encode(m))
- assert_equal m, m2
- m3 = MapMessageWireEquiv.decode(MapMessage.encode(m))
- assert_equal 2, m3.map_string_int32.length
- kv = {}
- m3.map_string_int32.map { |msg| kv[msg.key] = msg.value }
- assert_equal({"a" => 1, "b" => 2}, kv)
- kv = {}
- m3.map_string_msg.map { |msg| kv[msg.key] = msg.value }
- assert_equal({"a" => TestMessage2.new(:foo => 1),
- "b" => TestMessage2.new(:foo => 2)}, kv)
- end
-
- def test_oneof_descriptors
- d = OneofMessage.descriptor
- o = d.lookup_oneof("my_oneof")
- refute_nil o
- assert_instance_of Google::Protobuf::OneofDescriptor, o
- assert_equal "my_oneof", o.name
- oneof_count = 0
- d.each_oneof{ |oneof|
- oneof_count += 1
- assert_equal o, oneof
- }
- assert_equal 1, oneof_count
- assert_equal 4, o.count
- field_names = o.map{|f| f.name}.sort
- assert_equal ["a", "b", "c", "d"], field_names
- end
-
- def test_oneof
- d = OneofMessage.new
- assert_empty d.a
- assert_equal 0, d.b
- assert_nil d.c
- assert_equal :Default, d.d
- assert_nil d.my_oneof
- d.a = "hi"
- assert_equal "hi", d.a
- assert_equal 0, d.b
- assert_nil d.c
- assert_equal :Default, d.d
- assert_equal :a, d.my_oneof
- d.b = 42
- assert_empty d.a
- assert_equal 42, d.b
- assert_nil d.c
- assert_equal :Default, d.d
- assert_equal :b, d.my_oneof
- d.c = TestMessage2.new(:foo => 100)
- assert_empty d.a
- assert_equal 0, d.b
- assert_equal 100, d.c.foo
- assert_equal :Default, d.d
- assert_equal :c, d.my_oneof
- d.d = :C
- assert_empty d.a
- assert_equal 0, d.b
- assert_nil d.c
- assert_equal :C, d.d
- assert_equal :d, d.my_oneof
- d2 = OneofMessage.decode(OneofMessage.encode(d))
- assert_equal d2, d
- encoded_field_a = OneofMessage.encode(OneofMessage.new(:a => "string"))
- encoded_field_b = OneofMessage.encode(OneofMessage.new(:b => 1000))
- encoded_field_c = OneofMessage.encode(
- OneofMessage.new(:c => TestMessage2.new(:foo => 1)))
- encoded_field_d = OneofMessage.encode(OneofMessage.new(:d => :B))
-
- d3 = OneofMessage.decode(
- encoded_field_c + encoded_field_a + encoded_field_d)
- assert_empty d3.a
- assert_equal 0, d3.b
- assert_nil d3.c
- assert_equal :B, d3.d
- d4 = OneofMessage.decode(
- encoded_field_c + encoded_field_a + encoded_field_d +
- encoded_field_c)
- assert_empty d4.a
- assert_equal 0, d4.b
- assert_equal 1, d4.c.foo
- assert_equal :Default, d4.d
- d5 = OneofMessage.new(:a => "hello")
- assert_equal "hello", d5.a
- d5.a = nil
- assert_empty d5.a
- assert_empty OneofMessage.encode(d5)
- assert_nil d5.my_oneof
- end
-
- def test_enum_field
- m = TestMessage.new
- assert_equal :Default, m.optional_enum
- m.optional_enum = :A
- assert_equal :A, m.optional_enum
- assert_raises RangeError do
- m.optional_enum = :ASDF
- end
- m.optional_enum = 1
- assert_equal :A, m.optional_enum
- m.optional_enum = 100
- assert_equal 100, m.optional_enum
- end
-
- def test_dup
- m = TestMessage.new
- m.optional_string = "hello"
- m.optional_int32 = 42
- tm1 = TestMessage2.new(:foo => 100)
- tm2 = TestMessage2.new(:foo => 200)
- m.repeated_msg.push tm1
- assert_equal m.repeated_msg[-1], tm1
- m.repeated_msg.push tm2
- assert_equal m.repeated_msg[-1], tm2
- m2 = m.dup
- assert_equal m, m2
- m.optional_int32 += 1
- refute_equal m2, m
- assert_equal m.repeated_msg[0], m2.repeated_msg[0]
- assert_same m.repeated_msg[0], m2.repeated_msg[0]
- end
-
- def test_deep_copy
- m = TestMessage.new(:optional_int32 => 42,
- :repeated_msg => [TestMessage2.new(:foo => 100)])
- m2 = Google::Protobuf.deep_copy(m)
- assert_equal m, m2
- assert_equal m.repeated_msg, m2.repeated_msg
- refute_same m.repeated_msg, m2.repeated_msg
- refute_same m.repeated_msg[0], m2.repeated_msg[0]
- end
-
- def test_eq
- m = TestMessage.new(:optional_int32 => 42,
- :repeated_int32 => [1, 2, 3])
- m2 = TestMessage.new(:optional_int32 => 43,
- :repeated_int32 => [1, 2, 3])
- refute_equal m2, m
- end
-
- def test_enum_lookup
- assert_equal 1, TestEnum::A
- assert_equal 2, TestEnum::B
- assert_equal 3, TestEnum::C
- assert_equal :A, TestEnum::lookup(1)
- assert_equal :B, TestEnum::lookup(2)
- assert_equal :C, TestEnum::lookup(3)
- assert_equal 1, TestEnum::resolve(:A)
- assert_equal 2, TestEnum::resolve(:B)
- assert_equal 3, TestEnum::resolve(:C)
- end
-
- def test_parse_serialize
- m = TestMessage.new(:optional_int32 => 42,
- :optional_string => "hello world",
- :optional_enum => :B,
- :repeated_string => ["a", "b", "c"],
- :repeated_int32 => [42, 43, 44],
- :repeated_enum => [:A, :B, :C, 100],
- :repeated_msg => [TestMessage2.new(:foo => 1),
- TestMessage2.new(:foo => 2)])
- data = TestMessage.encode m
- m2 = TestMessage.decode data
- assert_equal m, m2
- data = Google::Protobuf.encode m
- m2 = Google::Protobuf.decode(TestMessage, data)
- assert_equal m, m2
- end
-
- def test_encode_decode_helpers
- m = TestMessage.new(:optional_string => 'foo', :repeated_string => ['bar1', 'bar2'])
- assert_equal 'foo', m.optional_string
- assert_equal ['bar1', 'bar2'], m.repeated_string
-
- json = m.to_json
- m2 = TestMessage.decode_json(json)
- assert_equal 'foo', m2.optional_string
- assert_equal ['bar1', 'bar2'], m2.repeated_string
- if RUBY_PLATFORM != "java"
- assert m2.optional_string.frozen?
- assert m2.repeated_string[0].frozen?
- end
-
- proto = m.to_proto
- m2 = TestMessage.decode(proto)
- assert_equal 'foo', m2.optional_string
- assert_equal ['bar1', 'bar2'], m2.repeated_string
- end
-
- def test_protobuf_encode_decode_helpers
- m = TestMessage.new(:optional_string => 'foo', :repeated_string => ['bar1', 'bar2'])
- encoded_msg = Google::Protobuf.encode(m)
- assert_equal m.to_proto, encoded_msg
-
- decoded_msg = Google::Protobuf.decode(TestMessage, encoded_msg)
- assert_equal TestMessage.decode(m.to_proto), decoded_msg
- end
-
- def test_protobuf_encode_decode_json_helpers
- m = TestMessage.new(:optional_string => 'foo', :repeated_string => ['bar1', 'bar2'])
- encoded_msg = Google::Protobuf.encode_json(m)
- assert_equal m.to_json, encoded_msg
-
- decoded_msg = Google::Protobuf.decode_json(TestMessage, encoded_msg)
- assert_equal TestMessage.decode_json(m.to_json), decoded_msg
- end
-
- def test_to_h
- m = TestMessage.new(:optional_bool => true, :optional_double => -10.100001, :optional_string => 'foo', :repeated_string => ['bar1', 'bar2'])
- expected_result = {
- :optional_bool=>true,
- :optional_bytes=>"",
- :optional_double=>-10.100001,
- :optional_enum=>:Default,
- :optional_float=>0.0,
- :optional_int32=>0,
- :optional_int64=>0,
- :optional_msg=>nil,
- :optional_string=>"foo",
- :optional_uint32=>0,
- :optional_uint64=>0,
- :repeated_bool=>[],
- :repeated_bytes=>[],
- :repeated_double=>[],
- :repeated_enum=>[],
- :repeated_float=>[],
- :repeated_int32=>[],
- :repeated_int64=>[],
- :repeated_msg=>[],
- :repeated_string=>["bar1", "bar2"],
- :repeated_uint32=>[],
- :repeated_uint64=>[]
- }
- assert_equal expected_result, m.to_h
- end
-
-
- def test_def_errors
- s = Google::Protobuf::DescriptorPool.new
- assert_raises Google::Protobuf::TypeError do
- s.build do
- # enum with no default (integer value 0)
- add_enum "MyEnum" do
- value :A, 1
- end
- end
- end
- assert_raises Google::Protobuf::TypeError do
- s.build do
- # message with required field (unsupported in proto3)
- add_message "MyMessage" do
- required :foo, :int32, 1
- end
- end
- end
- end
-
- def test_corecursive
- # just be sure that we can instantiate types with corecursive field-type
- # references.
- m = Recursive1.new(:foo => Recursive2.new(:foo => Recursive1.new))
- assert_equal Recursive2.descriptor, Recursive1.descriptor.lookup("foo").subtype
- assert_equal Recursive1.descriptor, Recursive2.descriptor.lookup("foo").subtype
- serialized = Recursive1.encode(m)
- m2 = Recursive1.decode(serialized)
- assert_equal m, m2
- end
-
- def test_serialize_cycle
- m = Recursive1.new(:foo => Recursive2.new)
- m.foo.foo = m
- assert_raises RuntimeError do
- Recursive1.encode(m)
- end
- end
-
- def test_bad_field_names
- m = BadFieldNames.new(:dup => 1, :class => 2)
- m2 = m.dup
- assert_equal m, m2
- assert_equal 1, m['dup']
- assert_equal 2, m['class']
- m['dup'] = 3
- assert_equal 3, m['dup']
- end
-
- def test_int_ranges
- m = TestMessage.new
-
- m.optional_int32 = 0
- m.optional_int32 = -0x8000_0000
- m.optional_int32 = +0x7fff_ffff
- m.optional_int32 = 1.0
- m.optional_int32 = -1.0
- m.optional_int32 = 2e9
- assert_raises RangeError do
- m.optional_int32 = -0x8000_0001
- end
- assert_raises RangeError do
- m.optional_int32 = +0x8000_0000
- end
- assert_raises RangeError do
- m.optional_int32 = +0x1000_0000_0000_0000_0000_0000 # force Bignum
- end
- assert_raises RangeError do
- m.optional_int32 = 1e12
- end
- assert_raises RangeError do
- m.optional_int32 = 1.5
- end
-
- m.optional_uint32 = 0
- m.optional_uint32 = +0xffff_ffff
- m.optional_uint32 = 1.0
- m.optional_uint32 = 4e9
- assert_raises RangeError do
- m.optional_uint32 = -1
- end
- assert_raises RangeError do
- m.optional_uint32 = -1.5
- end
- assert_raises RangeError do
- m.optional_uint32 = -1.5e12
- end
- assert_raises RangeError do
- m.optional_uint32 = -0x1000_0000_0000_0000
- end
- assert_raises RangeError do
- m.optional_uint32 = +0x1_0000_0000
- end
- assert_raises RangeError do
- m.optional_uint32 = +0x1000_0000_0000_0000_0000_0000 # force Bignum
- end
- assert_raises RangeError do
- m.optional_uint32 = 1e12
- end
- assert_raises RangeError do
- m.optional_uint32 = 1.5
- end
-
- m.optional_int64 = 0
- m.optional_int64 = -0x8000_0000_0000_0000
- m.optional_int64 = +0x7fff_ffff_ffff_ffff
- m.optional_int64 = 1.0
- m.optional_int64 = -1.0
- m.optional_int64 = 8e18
- m.optional_int64 = -8e18
- assert_raises RangeError do
- m.optional_int64 = -0x8000_0000_0000_0001
- end
- assert_raises RangeError do
- m.optional_int64 = +0x8000_0000_0000_0000
- end
- assert_raises RangeError do
- m.optional_int64 = +0x1000_0000_0000_0000_0000_0000 # force Bignum
- end
- assert_raises RangeError do
- m.optional_int64 = 1e50
- end
- assert_raises RangeError do
- m.optional_int64 = 1.5
- end
-
- m.optional_uint64 = 0
- m.optional_uint64 = +0xffff_ffff_ffff_ffff
- m.optional_uint64 = 1.0
- m.optional_uint64 = 16e18
- assert_raises RangeError do
- m.optional_uint64 = -1
- end
- assert_raises RangeError do
- m.optional_uint64 = -1.5
- end
- assert_raises RangeError do
- m.optional_uint64 = -1.5e12
- end
- assert_raises RangeError do
- m.optional_uint64 = -0x1_0000_0000_0000_0000
- end
- assert_raises RangeError do
- m.optional_uint64 = +0x1_0000_0000_0000_0000
- end
- assert_raises RangeError do
- m.optional_uint64 = +0x1000_0000_0000_0000_0000_0000 # force Bignum
- end
- assert_raises RangeError do
- m.optional_uint64 = 1e50
- end
- assert_raises RangeError do
- m.optional_uint64 = 1.5
- end
- end
-
- def test_stress_test
- m = TestMessage.new
- m.optional_int32 = 42
- m.optional_int64 = 0x100000000
- m.optional_string = "hello world"
- 10.times do m.repeated_msg.push TestMessage2.new(:foo => 42) end
- 10.times do m.repeated_string.push "hello world" end
-
- data = TestMessage.encode(m)
-
- l = 0
- 10_000.times do
- m = TestMessage.decode(data)
- data_new = TestMessage.encode(m)
- assert_equal data, data_new
- data = data_new
- end
- end
-
- def test_reflection
- m = TestMessage.new(:optional_int32 => 1234)
- msgdef = m.class.descriptor
- assert_instance_of Google::Protobuf::Descriptor, msgdef
- assert msgdef.any? {|field| field.name == "optional_int32"}
- optional_int32 = msgdef.lookup "optional_int32"
- assert_instance_of Google::Protobuf::FieldDescriptor, optional_int32
- refute_nil optional_int32
- assert_equal "optional_int32", optional_int32.name
- assert_equal :int32, optional_int32.type
- optional_int32.set(m, 5678)
- assert_equal 5678, m.optional_int32
- m.optional_int32 = 1000
- assert_equal 1000, optional_int32.get(m)
- optional_msg = msgdef.lookup "optional_msg"
- assert_equal TestMessage2.descriptor, optional_msg.subtype
- optional_msg.set(m, optional_msg.subtype.msgclass.new)
-
- assert_equal TestMessage, msgdef.msgclass
- optional_enum = msgdef.lookup "optional_enum"
- assert_equal TestEnum.descriptor, optional_enum.subtype
- assert_instance_of Google::Protobuf::EnumDescriptor, optional_enum.subtype
- optional_enum.subtype.each do |k, v|
- # set with integer, check resolution to symbolic name
- optional_enum.set(m, v)
- assert_equal k, optional_enum.get(m)
- end
- end
-
- def test_json
- # TODO: Fix JSON in JRuby version.
- return if RUBY_PLATFORM == "java"
- m = TestMessage.new(:optional_int32 => 1234,
- :optional_int64 => -0x1_0000_0000,
- :optional_uint32 => 0x8000_0000,
- :optional_uint64 => 0xffff_ffff_ffff_ffff,
- :optional_bool => true,
- :optional_float => 1.0,
- :optional_double => -1e100,
- :optional_string => "Test string",
- :optional_bytes => ["FFFFFFFF"].pack('H*'),
- :optional_msg => TestMessage2.new(:foo => 42),
- :repeated_int32 => [1, 2, 3, 4],
- :repeated_string => ["a", "b", "c"],
- :repeated_bool => [true, false, true, false],
- :repeated_msg => [TestMessage2.new(:foo => 1),
- TestMessage2.new(:foo => 2)])
-
- json_text = TestMessage.encode_json(m)
- m2 = TestMessage.decode_json(json_text)
- assert_equal m, m2
- # Crash case from GitHub issue 283.
- bar = Bar.new(msg: "bar")
- baz1 = Baz.new(msg: "baz")
- baz2 = Baz.new(msg: "quux")
- Foo.encode_json(Foo.new)
- Foo.encode_json(Foo.new(bar: bar))
- Foo.encode_json(Foo.new(bar: bar, baz: [baz1, baz2]))
- end
-
- def test_json_maps
- # TODO: Fix JSON in JRuby version.
- return if RUBY_PLATFORM == "java"
- m = MapMessage.new(:map_string_int32 => {"a" => 1})
- expected = '{"mapStringInt32":{"a":1},"mapStringMsg":{}}'
- expected_preserve = '{"map_string_int32":{"a":1},"map_string_msg":{}}'
- assert_equal expected, MapMessage.encode_json(m, :emit_defaults => true)
-
- json = MapMessage.encode_json(m, :preserve_proto_fieldnames => true, :emit_defaults => true)
- assert_equal expected_preserve, json
-
- m2 = MapMessage.decode_json(MapMessage.encode_json(m))
- assert_equal m, m2
- end
- end
-end
diff --git a/ruby/compatibility_tests/v3.0.0/tests/generated_code.proto b/ruby/compatibility_tests/v3.0.0/tests/generated_code.proto
deleted file mode 100644
index 62fd83e..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/generated_code.proto
+++ /dev/null
@@ -1,67 +0,0 @@
-syntax = "proto3";
-
-package a.b.c;
-
-message TestMessage {
- int32 optional_int32 = 1;
- int64 optional_int64 = 2;
- uint32 optional_uint32 = 3;
- uint64 optional_uint64 = 4;
- bool optional_bool = 5;
- double optional_double = 6;
- float optional_float = 7;
- string optional_string = 8;
- bytes optional_bytes = 9;
- TestEnum optional_enum = 10;
- TestMessage optional_msg = 11;
-
- repeated int32 repeated_int32 = 21;
- repeated int64 repeated_int64 = 22;
- repeated uint32 repeated_uint32 = 23;
- repeated uint64 repeated_uint64 = 24;
- repeated bool repeated_bool = 25;
- repeated double repeated_double = 26;
- repeated float repeated_float = 27;
- repeated string repeated_string = 28;
- repeated bytes repeated_bytes = 29;
- repeated TestEnum repeated_enum = 30;
- repeated TestMessage repeated_msg = 31;
-
- oneof my_oneof {
- int32 oneof_int32 = 41;
- int64 oneof_int64 = 42;
- uint32 oneof_uint32 = 43;
- uint64 oneof_uint64 = 44;
- bool oneof_bool = 45;
- double oneof_double = 46;
- float oneof_float = 47;
- string oneof_string = 48;
- bytes oneof_bytes = 49;
- TestEnum oneof_enum = 50;
- TestMessage oneof_msg = 51;
- }
-
- map<int32, string> map_int32_string = 61;
- map<int64, string> map_int64_string = 62;
- map<uint32, string> map_uint32_string = 63;
- map<uint64, string> map_uint64_string = 64;
- map<bool, string> map_bool_string = 65;
- map<string, string> map_string_string = 66;
- map<string, TestMessage> map_string_msg = 67;
- map<string, TestEnum> map_string_enum = 68;
- map<string, int32> map_string_int32 = 69;
- map<string, bool> map_string_bool = 70;
-
- message NestedMessage {
- int32 foo = 1;
- }
-
- NestedMessage nested_message = 80;
-}
-
-enum TestEnum {
- Default = 0;
- A = 1;
- B = 2;
- C = 3;
-}
diff --git a/ruby/compatibility_tests/v3.0.0/tests/generated_code_test.rb b/ruby/compatibility_tests/v3.0.0/tests/generated_code_test.rb
deleted file mode 100755
index b92b046..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/generated_code_test.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/ruby
-
-# generated_code.rb is in the same directory as this test.
-$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
-
-require 'generated_code_pb'
-require 'test_import_pb'
-require 'test/unit'
-
-class GeneratedCodeTest < Test::Unit::TestCase
- def test_generated_msg
- # just test that we can instantiate the message. The purpose of this test
- # is to ensure that the output of the code generator is valid Ruby and
- # successfully creates message definitions and classes, not to test every
- # aspect of the extension (basic.rb is for that).
- m = A::B::C::TestMessage.new()
- m2 = FooBar::TestImportedMessage.new()
- end
-end
diff --git a/ruby/compatibility_tests/v3.0.0/tests/repeated_field_test.rb b/ruby/compatibility_tests/v3.0.0/tests/repeated_field_test.rb
deleted file mode 100755
index 56fa7fe..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/repeated_field_test.rb
+++ /dev/null
@@ -1,633 +0,0 @@
-#!/usr/bin/ruby
-
-require 'google/protobuf'
-require 'test/unit'
-
-class RepeatedFieldTest < Test::Unit::TestCase
-
- def test_acts_like_enumerator
- m = TestMessage.new
- (Enumerable.instance_methods - TestMessage.new.repeated_string.methods).each do |method_name|
- assert_respond_to m.repeated_string, method_name
- end
- end
-
- def test_acts_like_an_array
- m = TestMessage.new
- arr_methods = ([].methods - TestMessage.new.repeated_string.methods)
- # jRuby additions to the Array class that we can ignore
- arr_methods -= [ :indices, :iter_for_each, :iter_for_each_index,
- :iter_for_each_with_index, :dimensions, :copy_data, :copy_data_simple,
- :nitems, :iter_for_reverse_each, :indexes, :append, :prepend]
- arr_methods -= [:union, :difference, :filter!]
- # ruby 2.7 methods we can ignore
- arr_methods -= [:intersection, :deconstruct, :resolve_feature_path]
- # ruby 3.1 methods we can ignore
- arr_methods -= [:intersect?]
- arr_methods.each do |method_name|
- assert_respond_to m.repeated_string, method_name
- end
- end
-
- def test_first
- m = TestMessage.new
- repeated_field_names(TestMessage).each do |field_name|
- assert_nil m.send(field_name).first
- end
- fill_test_msg(m)
- assert_equal -10, m.repeated_int32.first
- assert_equal -1_000_000, m.repeated_int64.first
- assert_equal 10, m.repeated_uint32.first
- assert_equal 1_000_000, m.repeated_uint64.first
- assert m.repeated_bool.first
- assert_equal -1.01, m.repeated_float.first.round(2)
- assert_equal -1.0000000000001, m.repeated_double.first
- assert_equal 'foo', m.repeated_string.first
- assert_equal "bar".encode!('ASCII-8BIT'), m.repeated_bytes.first
- assert_equal TestMessage2.new(:foo => 1), m.repeated_msg.first
- assert_equal :A, m.repeated_enum.first
- end
-
-
- def test_last
- m = TestMessage.new
- repeated_field_names(TestMessage).each do |field_name|
- assert_nil m.send(field_name).first
- end
- fill_test_msg(m)
- assert_equal -11, m.repeated_int32.last
- assert_equal -1_000_001, m.repeated_int64.last
- assert_equal 11, m.repeated_uint32.last
- assert_equal 1_000_001, m.repeated_uint64.last
- refute m.repeated_bool.last
- assert_equal -1.02, m.repeated_float.last.round(2)
- assert_equal -1.0000000000002, m.repeated_double.last
- assert_equal 'bar', m.repeated_string.last
- assert_equal "foo".encode!('ASCII-8BIT'), m.repeated_bytes.last
- assert_equal TestMessage2.new(:foo => 2), m.repeated_msg.last
- assert_equal :B, m.repeated_enum.last
- end
-
-
- def test_pop
- m = TestMessage.new
- repeated_field_names(TestMessage).each do |field_name|
- assert_nil m.send(field_name).pop
- end
- fill_test_msg(m)
-
- assert_equal -11, m.repeated_int32.pop
- assert_equal -10, m.repeated_int32.pop
- assert_equal -1_000_001, m.repeated_int64.pop
- assert_equal -1_000_000, m.repeated_int64.pop
- assert_equal 11, m.repeated_uint32.pop
- assert_equal 10, m.repeated_uint32.pop
- assert_equal 1_000_001, m.repeated_uint64.pop
- assert_equal 1_000_000, m.repeated_uint64.pop
- refute m.repeated_bool.pop
- assert m.repeated_bool.pop
- assert_equal -1.02, m.repeated_float.pop.round(2)
- assert_equal -1.01, m.repeated_float.pop.round(2)
- assert_equal -1.0000000000002, m.repeated_double.pop
- assert_equal -1.0000000000001, m.repeated_double.pop
- assert_equal 'bar', m.repeated_string.pop
- assert_equal 'foo', m.repeated_string.pop
- assert_equal "foo".encode!('ASCII-8BIT'), m.repeated_bytes.pop
- assert_equal "bar".encode!('ASCII-8BIT'), m.repeated_bytes.pop
- assert_equal TestMessage2.new(:foo => 2), m.repeated_msg.pop
- assert_equal TestMessage2.new(:foo => 1), m.repeated_msg.pop
- assert_equal :B, m.repeated_enum.pop
- assert_equal :A, m.repeated_enum.pop
- repeated_field_names(TestMessage).each do |field_name|
- assert_nil m.send(field_name).pop
- end
-
- fill_test_msg(m)
- assert_equal ['bar', 'foo'], m.repeated_string.pop(2)
- assert_nil m.repeated_string.pop
- end
-
-
- def test_each
- m = TestMessage.new
- 5.times{|i| m.repeated_string << 'string' }
- count = 0
- m.repeated_string.each do |val|
- assert_equal 'string', val
- count += 1
- end
- assert_equal 5, count
- result = m.repeated_string.each{|val| val + '_junk'}
- assert_equal ['string'] * 5, result
- end
-
-
- def test_empty?
- m = TestMessage.new
- assert_empty m.repeated_string
- m.repeated_string << 'foo'
- refute_empty m.repeated_string
- m.repeated_string << 'bar'
- refute_empty m.repeated_string
- end
-
- def test_array_accessor
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[1]
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[-2]
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[20]
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[1, 2]
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[0..2]
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[-1, 1]
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[10, 12]
- end
- end
-
- def test_array_settor
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[1] = 'junk'
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[-2] = 'snappy'
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr[3] = ''
- end
- # slight deviation; we are strongly typed, and nil is not allowed
- # for string types;
- m.repeated_string[5] = 'spacious'
- assert_equal ["foo", "snappy", "baz", "", "", "spacious"], m.repeated_string
-
- #make sure it sests the default types for other fields besides strings
- %w(repeated_int32 repeated_int64 repeated_uint32 repeated_uint64).each do |field_name|
- m.send(field_name)[3] = 10
- assert_equal [0,0,0,10], m.send(field_name)
- end
- m.repeated_float[3] = 10.1
- #wonky mri float handling
- assert_equal [0,0,0], m.repeated_float.to_a[0..2]
- assert_equal 10.1, m.repeated_float[3].round(1)
- m.repeated_double[3] = 10.1
- assert_equal [0,0,0,10.1], m.repeated_double
- m.repeated_bool[3] = true
- assert_equal [false, false, false, true], m.repeated_bool
- m.repeated_bytes[3] = "bar".encode!('ASCII-8BIT')
- assert_equal ['', '', '', "bar".encode!('ASCII-8BIT')], m.repeated_bytes
- m.repeated_msg[3] = TestMessage2.new(:foo => 1)
- assert_equal [nil, nil, nil, TestMessage2.new(:foo => 1)], m.repeated_msg
- m.repeated_enum[3] = :A
- assert_equal [:Default, :Default, :Default, :A], m.repeated_enum
-
- # check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- # arr[20] = 'spacious'
- # end
- # TODO: accessor doesn't allow other ruby-like methods
- # check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- # arr[1, 2] = 'fizz'
- # end
- # check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- # arr[0..2] = 'buzz'
- # end
- end
-
- def test_push
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.push('fizz')
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr << 'fizz'
- end
- #TODO: push should support multiple
- # check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- # arr.push('fizz', 'buzz')
- # end
- end
-
- def test_clear
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.clear
- end
- end
-
- def test_concat
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- m.repeated_string.concat(['fizz', 'buzz'])
- assert_equal %w(foo bar baz fizz buzz), m.repeated_string
- #TODO: concat should return the orig array
- # check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- # arr.concat(['fizz', 'buzz'])
- # end
- end
-
- def test_equal
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- assert_equal reference_arr, m.repeated_string
- reference_arr << 'fizz'
- refute_equal reference_arr, m.repeated_string
- m.repeated_string << 'fizz'
- assert_equal reference_arr, m.repeated_string
- end
-
- def test_hash
- # just a sanity check
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- assert m.repeated_string.hash.is_a?(Integer)
- hash = m.repeated_string.hash
- assert_equal hash, m.repeated_string.hash
- m.repeated_string << 'j'
- refute_equal hash, m.repeated_string.hash
- end
-
- def test_plus
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr + ['fizz', 'buzz']
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr += ['fizz', 'buzz']
- end
- end
-
- def test_replace
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.replace(['fizz', 'buzz'])
- end
- end
-
- def test_to_a
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.to_a
- end
- end
-
- def test_to_ary
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.to_ary
- end
- end
-
- # emulate Array behavior
- ##########################
-
- def test_collect!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.collect!{|x| x + "!" }
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.collect!.with_index{|x, i| x[0...i] }
- end
- end
-
- def test_delete
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.delete('bar')
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.delete('nope')
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.delete('nope'){'within'}
- end
- end
-
- def test_delete_at
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.delete_at(2)
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.delete_at(10)
- end
- end
-
- def test_fill
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.fill("x")
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.fill("z", 2, 2)
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.fill("y", 0..1)
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.fill { |i| (i*i).to_s }
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.fill(-2) { |i| (i*i*i).to_s }
- end
- end
-
- def test_flatten!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.flatten!
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.flatten!(1)
- end
- end
-
- def test_insert
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.insert(2, 'fizz')
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.insert(3, 'fizz', 'buzz', 'bazz')
- end
- end
-
- def test_inspect
- m = TestMessage.new
- assert_equal '[]', m.repeated_string.inspect
- m.repeated_string << 'foo'
- assert_equal m.repeated_string.to_a.inspect, m.repeated_string.inspect
- m.repeated_string << 'bar'
- assert_equal m.repeated_string.to_a.inspect, m.repeated_string.inspect
- end
-
- def test_reverse!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.reverse!
- end
- end
-
- def test_rotate!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.rotate!
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.rotate!(2)
- end
- end
-
- def test_select!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.select! { |v| v =~ /[aeiou]/ }
- end
- end
-
- def test_shift
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- # should return an element
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.shift
- end
- # should return an array
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.shift(2)
- end
- # should return nil
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.shift
- end
- end
-
- def test_shuffle!
- m = TestMessage.new
- m.repeated_string += %w(foo bar baz)
- orig_repeated_string = m.repeated_string.clone
- result = m.repeated_string.shuffle!
- assert_equal m.repeated_string, result
- # NOTE: sometimes it doesn't change the order...
- # refute_equal m.repeated_string.to_a, orig_repeated_string.to_a
- end
-
- def test_slice!
- m = TestMessage.new
- reference_arr = %w(foo bar baz bar fizz buzz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.slice!(2)
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.slice!(1,2)
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.slice!(0..1)
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.slice!(10)
- end
- end
-
- def test_sort!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.sort!
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.sort! { |x,y| y <=> x }
- end
- end
-
- def test_sort_by!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.sort_by!
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.sort_by!(&:hash)
- end
- end
-
- def test_uniq!
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.uniq!
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.uniq!{|s| s[0] }
- end
- end
-
- def test_unshift
- m = TestMessage.new
- reference_arr = %w(foo bar baz)
- m.repeated_string += reference_arr.clone
-
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.unshift('1')
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.unshift('a', 'b')
- end
- check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
- arr.unshift('')
- end
- end
-
-
- ##### HELPER METHODS
-
- def check_self_modifying_method(repeated_field, ref_array)
- expected_result = yield(ref_array)
- actual_result = yield(repeated_field)
- if expected_result.is_a?(Enumerator)
- assert_equal expected_result.to_a, actual_result.to_a
- else
- assert_equal expected_result, actual_result
- end
- assert_equal ref_array, repeated_field
- end
-
-
- def repeated_field_names(klass)
- klass.descriptor.find_all{|f| f.label == :repeated}.map(&:name)
- end
-
-
- def fill_test_msg(test_msg)
- test_msg.repeated_int32 += [-10, -11]
- test_msg.repeated_int64 += [-1_000_000, -1_000_001]
- test_msg.repeated_uint32 += [10, 11]
- test_msg.repeated_uint64 += [1_000_000, 1_000_001]
- test_msg.repeated_bool += [true, false]
- test_msg.repeated_float += [-1.01, -1.02]
- test_msg.repeated_double += [-1.0000000000001, -1.0000000000002]
- test_msg.repeated_string += %w(foo bar)
- test_msg.repeated_bytes += ["bar".encode!('ASCII-8BIT'), "foo".encode!('ASCII-8BIT')]
- test_msg.repeated_msg << TestMessage2.new(:foo => 1)
- test_msg.repeated_msg << TestMessage2.new(:foo => 2)
- test_msg.repeated_enum << :A
- test_msg.repeated_enum << :B
- end
-
-
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
-
- add_message "TestMessage" do
- optional :optional_int32, :int32, 1
- optional :optional_int64, :int64, 2
- optional :optional_uint32, :uint32, 3
- optional :optional_uint64, :uint64, 4
- optional :optional_bool, :bool, 5
- optional :optional_float, :float, 6
- optional :optional_double, :double, 7
- optional :optional_string, :string, 8
- optional :optional_bytes, :bytes, 9
- optional :optional_msg, :message, 10, "TestMessage2"
- optional :optional_enum, :enum, 11, "TestEnum"
-
- repeated :repeated_int32, :int32, 12
- repeated :repeated_int64, :int64, 13
- repeated :repeated_uint32, :uint32, 14
- repeated :repeated_uint64, :uint64, 15
- repeated :repeated_bool, :bool, 16
- repeated :repeated_float, :float, 17
- repeated :repeated_double, :double, 18
- repeated :repeated_string, :string, 19
- repeated :repeated_bytes, :bytes, 20
- repeated :repeated_msg, :message, 21, "TestMessage2"
- repeated :repeated_enum, :enum, 22, "TestEnum"
- end
- add_message "TestMessage2" do
- optional :foo, :int32, 1
- end
-
- add_enum "TestEnum" do
- value :Default, 0
- value :A, 1
- value :B, 2
- value :C, 3
- end
- end
-
- TestMessage = pool.lookup("TestMessage").msgclass
- TestMessage2 = pool.lookup("TestMessage2").msgclass
- TestEnum = pool.lookup("TestEnum").enummodule
-
-
-end
diff --git a/ruby/compatibility_tests/v3.0.0/tests/stress.rb b/ruby/compatibility_tests/v3.0.0/tests/stress.rb
deleted file mode 100755
index b688e8b..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/stress.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/ruby
-
-require 'google/protobuf'
-require 'test/unit'
-
-module StressTest
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
- add_message "TestMessage" do
- optional :a, :int32, 1
- repeated :b, :message, 2, "M"
- end
- add_message "M" do
- optional :foo, :string, 1
- end
- end
-
- TestMessage = pool.lookup("TestMessage").msgclass
- M = pool.lookup("M").msgclass
-
- class StressTest < Test::Unit::TestCase
- def get_msg
- TestMessage.new(:a => 1000,
- :b => [M.new(:foo => "hello"),
- M.new(:foo => "world")])
- end
- def test_stress
- m = get_msg
- data = TestMessage.encode(m)
- 100_000.times do
- mnew = TestMessage.decode(data)
- mnew = mnew.dup
- assert_equal m.inspect, mnew.inspect
- assert_equal data, TestMessage.encode(mnew)
- end
- end
- end
-end
diff --git a/ruby/compatibility_tests/v3.0.0/tests/test_import.proto b/ruby/compatibility_tests/v3.0.0/tests/test_import.proto
deleted file mode 100644
index 230484e..0000000
--- a/ruby/compatibility_tests/v3.0.0/tests/test_import.proto
+++ /dev/null
@@ -1,5 +0,0 @@
-syntax = "proto3";
-
-package foo_bar;
-
-message TestImportedMessage {}
diff --git a/ruby/defs.bzl b/ruby/defs.bzl
new file mode 100644
index 0000000..7f60b47
--- /dev/null
+++ b/ruby/defs.bzl
@@ -0,0 +1,24 @@
+"""Wrapper around internal_ruby_proto_library to supply our rules_ruby"""
+
+load("@rules_ruby//ruby:defs.bzl", "ruby_library")
+load("//:protobuf.bzl", _internal_ruby_proto_library = "internal_ruby_proto_library")
+
+def internal_ruby_proto_library(
+ name,
+ **kwargs):
+ """Bazel rule to create a Ruby protobuf library from proto source files
+
+ NOTE: the rule is only an internal workaround to generate protos. The
+ interface may change and the rule may be removed when bazel has introduced
+ the native rule.
+
+ Args:
+ name: the name of the ruby_proto_library.
+ **kwargs: other keyword arguments that are passed to ruby_library.
+
+ """
+ _internal_ruby_proto_library(
+ name,
+ ruby_library,
+ **kwargs
+ )
diff --git a/ruby/ext/google/protobuf_c/convert.c b/ruby/ext/google/protobuf_c/convert.c
index c9448cd..1fae524 100644
--- a/ruby/ext/google/protobuf_c/convert.c
+++ b/ruby/ext/google/protobuf_c/convert.c
@@ -141,7 +141,7 @@
VALUE utf8 = rb_enc_from_encoding(rb_utf8_encoding());
if (rb_obj_class(value) == rb_cSymbol) {
value = rb_funcall(value, rb_intern("to_s"), 0);
- } else if (rb_obj_class(value) != rb_cString) {
+ } else if (!rb_obj_is_kind_of(value, rb_cString)) {
rb_raise(cTypeError,
"Invalid argument for string field '%s' (given %s).", name,
rb_class2name(CLASS_OF(value)));
@@ -208,7 +208,8 @@
}
break;
default:
- break;
+ rb_raise(cTypeError,
+ "Convert_RubyToUpb(): Unexpected type %d", (int)type_info.type);
}
return ret;
@@ -296,7 +297,8 @@
if (upb_Status_IsOk(&status)) {
return return_value;
} else {
- rb_raise(rb_eRuntimeError, upb_Status_ErrorMessage(&status));
+ rb_raise(rb_eRuntimeError, "Msgval_IsEqual(): %s",
+ upb_Status_ErrorMessage(&status));
}
}
@@ -309,6 +311,7 @@
if (upb_Status_IsOk(&status)) {
return return_value;
} else {
- rb_raise(rb_eRuntimeError, upb_Status_ErrorMessage(&status));
+ rb_raise(rb_eRuntimeError, "Msgval_GetHash(): %s",
+ upb_Status_ErrorMessage(&status));
}
}
diff --git a/ruby/ext/google/protobuf_c/defs.c b/ruby/ext/google/protobuf_c/defs.c
index 4e80547..8761b84 100644
--- a/ruby/ext/google/protobuf_c/defs.c
+++ b/ruby/ext/google/protobuf_c/defs.c
@@ -144,20 +144,26 @@
* call-seq:
* DescriptorPool.lookup(name) => descriptor
*
- * Finds a Descriptor or EnumDescriptor by name and returns it, or nil if none
- * exists with the given name.
+ * Finds a Descriptor, EnumDescriptor or FieldDescriptor by name and returns it,
+ * or nil if none exists with the given name.
*/
static VALUE DescriptorPool_lookup(VALUE _self, VALUE name) {
DescriptorPool* self = ruby_to_DescriptorPool(_self);
const char* name_str = get_str(name);
const upb_MessageDef* msgdef;
const upb_EnumDef* enumdef;
+ const upb_FieldDef* fielddef;
msgdef = upb_DefPool_FindMessageByName(self->symtab, name_str);
if (msgdef) {
return get_msgdef_obj(_self, msgdef);
}
+ fielddef = upb_DefPool_FindExtensionByName(self->symtab, name_str);
+ if (fielddef) {
+ return get_fielddef_obj(_self, fielddef);
+ }
+
enumdef = upb_DefPool_FindEnumByName(self->symtab, name_str);
if (enumdef) {
return get_enumdef_obj(_self, enumdef);
@@ -856,7 +862,7 @@
static VALUE FieldDescriptor_has(VALUE _self, VALUE msg_rb) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
const upb_MessageDef* m;
- const upb_MessageDef* msg = Message_Get(msg_rb, &m);
+ const upb_Message* msg = Message_Get(msg_rb, &m);
if (m != upb_FieldDef_ContainingType(self->fielddef)) {
rb_raise(cTypeError, "has method called on wrong message type");
@@ -876,7 +882,7 @@
static VALUE FieldDescriptor_clear(VALUE _self, VALUE msg_rb) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
const upb_MessageDef* m;
- upb_MessageDef* msg = Message_GetMutable(msg_rb, &m);
+ upb_Message* msg = Message_GetMutable(msg_rb, &m);
if (m != upb_FieldDef_ContainingType(self->fielddef)) {
rb_raise(cTypeError, "has method called on wrong message type");
@@ -897,7 +903,7 @@
static VALUE FieldDescriptor_set(VALUE _self, VALUE msg_rb, VALUE value) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
const upb_MessageDef* m;
- upb_MessageDef* msg = Message_GetMutable(msg_rb, &m);
+ upb_Message* msg = Message_GetMutable(msg_rb, &m);
upb_Arena* arena = Arena_get(Message_GetArena(msg_rb));
upb_MessageValue msgval;
diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb
index 4bb49bb..ed812c9 100755
--- a/ruby/ext/google/protobuf_c/extconf.rb
+++ b/ruby/ext/google/protobuf_c/extconf.rb
@@ -22,7 +22,7 @@
$srcs = ["protobuf.c", "convert.c", "defs.c", "message.c",
"repeated_field.c", "map.c", "ruby-upb.c", "wrap_memcpy.c",
- "naive.c", "range2-neon.c", "range2-sse.c", "shared_convert.c",
+ "utf8_range.c", "shared_convert.c",
"shared_message.c"]
create_makefile(ext_name)
diff --git a/ruby/ext/google/protobuf_c/map.c b/ruby/ext/google/protobuf_c/map.c
index e3bd80c..7b78f87 100644
--- a/ruby/ext/google/protobuf_c/map.c
+++ b/ruby/ext/google/protobuf_c/map.c
@@ -212,7 +212,7 @@
Map* self = ruby_to_Map(_self);
Map* other = ruby_to_Map(hashmap);
upb_Arena* arena = Arena_get(self->arena);
- upb_Message* self_msg = Map_GetMutable(_self);
+ upb_Map* self_map = Map_GetMutable(_self);
Arena_fuse(other->arena, arena);
@@ -225,7 +225,7 @@
size_t iter = kUpb_Map_Begin;
upb_MessageValue key, val;
while (upb_Map_Next(other->map, &key, &val, &iter)) {
- upb_Map_Set(self_msg, key, val, arena);
+ upb_Map_Set(self_map, key, val, arena);
}
} else {
rb_raise(rb_eArgError, "Unknown type merging into Map");
@@ -444,7 +444,7 @@
Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
upb_MessageValue val_upb;
- if (upb_Map_Delete(self->map, key_upb, &val_upb)) {
+ if (upb_Map_Delete(Map_GetMutable(_self), key_upb, &val_upb)) {
return Convert_UpbToRuby(val_upb, self->value_type_info, self->arena);
} else {
return Qnil;
diff --git a/ruby/ext/google/protobuf_c/message.c b/ruby/ext/google/protobuf_c/message.c
index 2dec31a..d48c8c0 100644
--- a/ruby/ext/google/protobuf_c/message.c
+++ b/ruby/ext/google/protobuf_c/message.c
@@ -488,7 +488,8 @@
k = Convert_RubyToUpb(key, "", map_init->key_type, NULL);
if (map_init->val_type.type == kUpb_CType_Message && TYPE(val) == T_HASH) {
- upb_MiniTable* t = upb_MessageDef_MiniTable(map_init->val_type.def.msgdef);
+ const upb_MiniTable* t =
+ upb_MessageDef_MiniTable(map_init->val_type.def.msgdef);
upb_Message* msg = upb_Message_New(t, map_init->arena);
Message_InitFromValue(msg, map_init->val_type.def.msgdef, val,
map_init->arena);
@@ -519,7 +520,7 @@
upb_Arena* arena) {
if (info.type == kUpb_CType_Message) {
upb_MessageValue msgval;
- upb_MiniTable* t = upb_MessageDef_MiniTable(info.def.msgdef);
+ const upb_MiniTable* t = upb_MessageDef_MiniTable(info.def.msgdef);
upb_Message* msg = upb_Message_New(t, arena);
Message_InitFromValue(msg, info.def.msgdef, val, arena);
msgval.msg_val = msg;
@@ -635,7 +636,7 @@
Message* self = ruby_to_Message(_self);
VALUE arena_rb = Arena_new();
upb_Arena* arena = Arena_get(arena_rb);
- upb_MiniTable* t = upb_MessageDef_MiniTable(self->msgdef);
+ const upb_MiniTable* t = upb_MessageDef_MiniTable(self->msgdef);
upb_Message* msg = upb_Message_New(t, arena);
Message_InitPtr(_self, msg, arena_rb);
@@ -660,11 +661,8 @@
Message* self = ruby_to_Message(_self);
VALUE new_msg = rb_class_new_instance(0, NULL, CLASS_OF(_self));
Message* new_msg_self = ruby_to_Message(new_msg);
- size_t size = upb_MessageDef_MiniTable(self->msgdef)->size;
-
- // TODO
- // TODO
- memcpy((upb_Message*)new_msg_self->msg, self->msg, size);
+ const upb_MiniTable* m = upb_MessageDef_MiniTable(self->msgdef);
+ upb_Message_ShallowCopy((upb_Message*)new_msg_self->msg, self->msg, m);
Arena_fuse(self->arena, Arena_get(new_msg_self->arena));
return new_msg;
}
@@ -678,7 +676,8 @@
if (upb_Status_IsOk(&status)) {
return return_value;
} else {
- rb_raise(cParseError, upb_Status_ErrorMessage(&status));
+ rb_raise(cParseError, "Message_Equal(): %s",
+ upb_Status_ErrorMessage(&status));
}
}
@@ -709,7 +708,8 @@
if (upb_Status_IsOk(&status)) {
return return_value;
} else {
- rb_raise(cParseError, upb_Status_ErrorMessage(&status));
+ rb_raise(cParseError, "Message_Hash(): %s",
+ upb_Status_ErrorMessage(&status));
}
}
@@ -977,9 +977,12 @@
VALUE msg_rb = initialize_rb_class_with_no_args(klass);
Message* msg = ruby_to_Message(msg_rb);
+ const upb_FileDef* file = upb_MessageDef_File(msg->msgdef);
+ const upb_ExtensionRegistry* extreg =
+ upb_DefPool_ExtensionRegistry(upb_FileDef_Pool(file));
upb_DecodeStatus status = upb_Decode(bytes, size, (upb_Message*)msg->msg,
upb_MessageDef_MiniTable(msg->msgdef),
- NULL, options, Arena_get(msg->arena));
+ extreg, options, Arena_get(msg->arena));
if (status != kUpb_DecodeStatus_Ok) {
rb_raise(cParseError, "Error occurred during parsing");
}
@@ -1303,9 +1306,12 @@
upb_Message* new_msg = upb_Message_New(layout, arena);
char* data;
+ const upb_FileDef* file = upb_MessageDef_File(m);
+ const upb_ExtensionRegistry* extreg =
+ upb_DefPool_ExtensionRegistry(upb_FileDef_Pool(file));
if (upb_Encode(msg, layout, 0, tmp_arena, &data, &size) !=
kUpb_EncodeStatus_Ok ||
- upb_Decode(data, size, new_msg, layout, NULL, 0, arena) !=
+ upb_Decode(data, size, new_msg, layout, extreg, 0, arena) !=
kUpb_DecodeStatus_Ok) {
upb_Arena_Free(tmp_arena);
rb_raise(cParseError, "Error occurred copying proto");
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c
index 888f507..0648cbf 100644
--- a/ruby/ext/google/protobuf_c/ruby-upb.c
+++ b/ruby/ext/google/protobuf_c/ruby-upb.c
@@ -95,6 +95,13 @@
#define UPB_ALIGN_OF(type) offsetof (struct { char c; type member; }, member)
#endif
+#ifdef _MSC_VER
+// Some versions of our Windows compiler don't support the C11 syntax.
+#define UPB_ALIGN_AS(x) __declspec(align(x))
+#else
+#define UPB_ALIGN_AS(x) _Alignas(x)
+#endif
+
// Hints to the compiler about likely/unlikely branches.
#if defined (__GNUC__) || defined(__clang__)
#define UPB_LIKELY(x) __builtin_expect((bool)(x), 1)
@@ -181,6 +188,12 @@
#define UPB_PRIVATE(x) x##_dont_copy_me__upb_internal_use_only
+#ifdef UPB_ALLOW_PRIVATE_ACCESS__FOR_BITS_ONLY
+#define UPB_ONLYBITS(x) x
+#else
+#define UPB_ONLYBITS(x) UPB_PRIVATE(x)
+#endif
+
/* Configure whether fasttable is switched on or not. *************************/
#ifdef __has_attribute
@@ -392,7 +405,7 @@
// Must be last.
static const upb_MiniTableSub google_protobuf_FileDescriptorSet_submsgs[1] = {
- {.submsg = &google__protobuf__FileDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FileDescriptorProto_msg_init},
};
static const upb_MiniTableField google_protobuf_FileDescriptorSet__fields[1] = {
@@ -410,13 +423,13 @@
};
static const upb_MiniTableSub google_protobuf_FileDescriptorProto_submsgs[7] = {
- {.submsg = &google__protobuf__DescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto_msg_init},
- {.submsg = &google__protobuf__ServiceDescriptorProto_msg_init},
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__FileOptions_msg_init},
- {.submsg = &google__protobuf__SourceCodeInfo_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ServiceDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FileOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__SourceCodeInfo_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FileDescriptorProto__fields[13] = {
@@ -460,14 +473,14 @@
};
static const upb_MiniTableSub google_protobuf_DescriptorProto_submsgs[8] = {
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto__ExtensionRange_msg_init},
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__MessageOptions_msg_init},
- {.submsg = &google__protobuf__OneofDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto__ReservedRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto__ExtensionRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MessageOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__OneofDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto__ReservedRange_msg_init},
};
static const upb_MiniTableField google_protobuf_DescriptorProto__fields[10] = {
@@ -508,7 +521,7 @@
};
static const upb_MiniTableSub google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = {
- {.submsg = &google__protobuf__ExtensionRangeOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ExtensionRangeOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_DescriptorProto_ExtensionRange__fields[3] = {
@@ -547,10 +560,10 @@
};
static const upb_MiniTableSub google_protobuf_ExtensionRangeOptions_submsgs[4] = {
- {.submsg = &google__protobuf__ExtensionRangeOptions__Declaration_msg_init},
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_ExtensionRangeOptions_VerificationState_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ExtensionRangeOptions__Declaration_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_ExtensionRangeOptions_VerificationState_enum_init},
};
static const upb_MiniTableField google_protobuf_ExtensionRangeOptions__fields[4] = {
@@ -625,9 +638,9 @@
};
static const upb_MiniTableSub google_protobuf_FieldDescriptorProto_submsgs[3] = {
- {.submsg = &google__protobuf__FieldOptions_msg_init},
- {.subenum = &google_protobuf_FieldDescriptorProto_Label_enum_init},
- {.subenum = &google_protobuf_FieldDescriptorProto_Type_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldOptions_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldDescriptorProto_Label_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldDescriptorProto_Type_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldDescriptorProto__fields[11] = {
@@ -685,7 +698,7 @@
};
static const upb_MiniTableSub google_protobuf_OneofDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__OneofOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__OneofOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_OneofDescriptorProto__fields[2] = {
@@ -706,9 +719,9 @@
};
static const upb_MiniTableSub google_protobuf_EnumDescriptorProto_submsgs[3] = {
- {.submsg = &google__protobuf__EnumValueDescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumOptions_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumValueDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumDescriptorProto__fields[5] = {
@@ -753,7 +766,7 @@
};
static const upb_MiniTableSub google_protobuf_EnumValueDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__EnumValueOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumValueOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumValueDescriptorProto__fields[3] = {
@@ -775,8 +788,8 @@
};
static const upb_MiniTableSub google_protobuf_ServiceDescriptorProto_submsgs[2] = {
- {.submsg = &google__protobuf__MethodDescriptorProto_msg_init},
- {.submsg = &google__protobuf__ServiceOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MethodDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ServiceOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_ServiceDescriptorProto__fields[3] = {
@@ -798,7 +811,7 @@
};
static const upb_MiniTableSub google_protobuf_MethodDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__MethodOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MethodOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_MethodDescriptorProto__fields[6] = {
@@ -827,17 +840,17 @@
};
static const upb_MiniTableSub google_protobuf_FileOptions_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_FileOptions_OptimizeMode_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FileOptions_OptimizeMode_enum_init},
};
-static const upb_MiniTableField google_protobuf_FileOptions__fields[22] = {
- {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+static const upb_MiniTableField google_protobuf_FileOptions__fields[21] = {
+ {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
{9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)},
{10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
{16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
@@ -845,35 +858,34 @@
{23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
- {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
+ {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
+ {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
};
const upb_MiniTable google__protobuf__FileOptions_msg_init = {
&google_protobuf_FileOptions_submsgs[0],
&google_protobuf_FileOptions__fields[0],
- UPB_SIZE(112, 200), 22, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(248), 0,
+ UPB_SIZE(104, 192), 21, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(248), 0,
UPB_FASTTABLE_INIT({
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
- {0x001800000100000a, &upb_pss_1bt},
+ {0x001000000100000a, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
- {0x0028000002000042, &upb_pss_1bt},
+ {0x0020000002000042, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0008000004000050, &upb_psb1_1bt},
- {0x003800000500005a, &upb_pss_1bt},
+ {0x003000000500005a, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
@@ -883,23 +895,23 @@
{0x000b000008000190, &upb_psb1_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000c0000090001a0, &upb_psb1_2bt},
- {0x005800000e0002aa, &upb_pss_2bt},
+ {0x005000000e0002aa, &upb_pss_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000d00000a0001b8, &upb_psb1_2bt},
- {0x00780000100002c2, &upb_pss_2bt},
- {0x00880000110002ca, &upb_pss_2bt},
- {0x00100000120002d0, &upb_psb1_2bt},
+ {0x00700000100002c2, &upb_pss_2bt},
+ {0x00800000110002ca, &upb_pss_2bt},
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000e00000b0001d8, &upb_psb1_2bt},
- {0x00980000130002e2, &upb_pss_2bt},
- {0x00a80000140002ea, &upb_pss_2bt},
+ {0x00900000120002e2, &upb_pss_2bt},
+ {0x00a00000130002ea, &upb_pss_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000f00000c0001f8, &upb_psb1_2bt},
})
};
static const upb_MiniTableSub google_protobuf_MessageOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_MessageOptions__fields[7] = {
@@ -953,13 +965,13 @@
};
static const upb_MiniTableSub google_protobuf_FieldOptions_submsgs[7] = {
- {.submsg = &google__protobuf__FieldOptions__EditionDefault_msg_init},
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_FieldOptions_CType_enum_init},
- {.subenum = &google_protobuf_FieldOptions_JSType_enum_init},
- {.subenum = &google_protobuf_FieldOptions_OptionRetention_enum_init},
- {.subenum = &google_protobuf_FieldOptions_OptionTargetType_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldOptions__EditionDefault_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_CType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_JSType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_OptionRetention_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_OptionTargetType_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldOptions__fields[13] = {
@@ -1019,7 +1031,7 @@
};
static const upb_MiniTableSub google_protobuf_FieldOptions_EditionDefault_submsgs[1] = {
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldOptions_EditionDefault__fields[2] = {
@@ -1040,8 +1052,8 @@
};
static const upb_MiniTableSub google_protobuf_OneofOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_OneofOptions__fields[2] = {
@@ -1090,8 +1102,8 @@
};
static const upb_MiniTableSub google_protobuf_EnumOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumOptions__fields[5] = {
@@ -1143,8 +1155,8 @@
};
static const upb_MiniTableSub google_protobuf_EnumValueOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumValueOptions__fields[4] = {
@@ -1195,8 +1207,8 @@
};
static const upb_MiniTableSub google_protobuf_ServiceOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_ServiceOptions__fields[3] = {
@@ -1246,9 +1258,9 @@
};
static const upb_MiniTableSub google_protobuf_MethodOptions_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_MethodOptions_IdempotencyLevel_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_MethodOptions_IdempotencyLevel_enum_init},
};
static const upb_MiniTableField google_protobuf_MethodOptions__fields[4] = {
@@ -1299,7 +1311,7 @@
};
static const upb_MiniTableSub google_protobuf_UninterpretedOption_submsgs[1] = {
- {.submsg = &google__protobuf__UninterpretedOption__NamePart_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption__NamePart_msg_init},
};
static const upb_MiniTableField google_protobuf_UninterpretedOption__fields[7] = {
@@ -1354,12 +1366,12 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSet_submsgs[6] = {
- {.subenum = &google_protobuf_FeatureSet_FieldPresence_enum_init},
- {.subenum = &google_protobuf_FeatureSet_EnumType_enum_init},
- {.subenum = &google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init},
- {.subenum = &google_protobuf_FeatureSet_Utf8Validation_enum_init},
- {.subenum = &google_protobuf_FeatureSet_MessageEncoding_enum_init},
- {.subenum = &google_protobuf_FeatureSet_JsonFormat_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_FieldPresence_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_EnumType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_Utf8Validation_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_MessageEncoding_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_JsonFormat_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSet__fields[6] = {
@@ -1378,9 +1390,9 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSetDefaults_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSetDefaults__fields[3] = {
@@ -1400,8 +1412,8 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault__fields[2] = {
@@ -1422,7 +1434,7 @@
};
static const upb_MiniTableSub google_protobuf_SourceCodeInfo_submsgs[1] = {
- {.submsg = &google__protobuf__SourceCodeInfo__Location_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__SourceCodeInfo__Location_msg_init},
};
static const upb_MiniTableField google_protobuf_SourceCodeInfo__fields[1] = {
@@ -1464,7 +1476,7 @@
};
static const upb_MiniTableSub google_protobuf_GeneratedCodeInfo_submsgs[1] = {
- {.submsg = &google__protobuf__GeneratedCodeInfo__Annotation_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__GeneratedCodeInfo__Annotation_msg_init},
};
static const upb_MiniTableField google_protobuf_GeneratedCodeInfo__fields[1] = {
@@ -1482,7 +1494,7 @@
};
static const upb_MiniTableSub google_protobuf_GeneratedCodeInfo_Annotation_submsgs[1] = {
- {.subenum = &google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init},
};
static const upb_MiniTableField google_protobuf_GeneratedCodeInfo_Annotation__fields[5] = {
@@ -1546,7 +1558,7 @@
const upb_MiniTableEnum google_protobuf_Edition_enum_init = {
64,
- 6,
+ 7,
{
0x7,
0x0,
@@ -1556,6 +1568,7 @@
0x1869d,
0x1869e,
0x1869f,
+ 0x7fffffff,
},
};
@@ -1617,7 +1630,7 @@
64,
0,
{
- 0x7,
+ 0xd,
0x0,
},
};
@@ -1747,832 +1760,6 @@
e, ptr, overrun, _upb_EpsCopyInputStream_NoOpCallback);
}
-/*
- * upb_table Implementation
- *
- * Implementation is heavily inspired by Lua's ltable.c.
- */
-
-#include <string.h>
-
-
-// Must be last.
-
-#define UPB_MAXARRSIZE 16 // 2**16 = 64k.
-
-// From Chromium.
-#define ARRAY_SIZE(x) \
- ((sizeof(x) / sizeof(0 [x])) / ((size_t)(!(sizeof(x) % sizeof(0 [x])))))
-
-static const double MAX_LOAD = 0.85;
-
-/* The minimum utilization of the array part of a mixed hash/array table. This
- * is a speed/memory-usage tradeoff (though it's not straightforward because of
- * cache effects). The lower this is, the more memory we'll use. */
-static const double MIN_DENSITY = 0.1;
-
-static bool is_pow2(uint64_t v) { return v == 0 || (v & (v - 1)) == 0; }
-
-static upb_value _upb_value_val(uint64_t val) {
- upb_value ret;
- _upb_value_setval(&ret, val);
- return ret;
-}
-
-static int log2ceil(uint64_t v) {
- int ret = 0;
- bool pow2 = is_pow2(v);
- while (v >>= 1) ret++;
- ret = pow2 ? ret : ret + 1; // Ceiling.
- return UPB_MIN(UPB_MAXARRSIZE, ret);
-}
-
-/* A type to represent the lookup key of either a strtable or an inttable. */
-typedef union {
- uintptr_t num;
- struct {
- const char* str;
- size_t len;
- } str;
-} lookupkey_t;
-
-static lookupkey_t strkey2(const char* str, size_t len) {
- lookupkey_t k;
- k.str.str = str;
- k.str.len = len;
- return k;
-}
-
-static lookupkey_t intkey(uintptr_t key) {
- lookupkey_t k;
- k.num = key;
- return k;
-}
-
-typedef uint32_t hashfunc_t(upb_tabkey key);
-typedef bool eqlfunc_t(upb_tabkey k1, lookupkey_t k2);
-
-/* Base table (shared code) ***************************************************/
-
-static uint32_t upb_inthash(uintptr_t key) { return (uint32_t)key; }
-
-static const upb_tabent* upb_getentry(const upb_table* t, uint32_t hash) {
- return t->entries + (hash & t->mask);
-}
-
-static bool upb_arrhas(upb_tabval key) { return key.val != (uint64_t)-1; }
-
-static bool isfull(upb_table* t) { return t->count == t->max_count; }
-
-static bool init(upb_table* t, uint8_t size_lg2, upb_Arena* a) {
- size_t bytes;
-
- t->count = 0;
- t->size_lg2 = size_lg2;
- t->mask = upb_table_size(t) ? upb_table_size(t) - 1 : 0;
- t->max_count = upb_table_size(t) * MAX_LOAD;
- bytes = upb_table_size(t) * sizeof(upb_tabent);
- if (bytes > 0) {
- t->entries = upb_Arena_Malloc(a, bytes);
- if (!t->entries) return false;
- memset(t->entries, 0, bytes);
- } else {
- t->entries = NULL;
- }
- return true;
-}
-
-static upb_tabent* emptyent(upb_table* t, upb_tabent* e) {
- upb_tabent* begin = t->entries;
- upb_tabent* end = begin + upb_table_size(t);
- for (e = e + 1; e < end; e++) {
- if (upb_tabent_isempty(e)) return e;
- }
- for (e = begin; e < end; e++) {
- if (upb_tabent_isempty(e)) return e;
- }
- UPB_ASSERT(false);
- return NULL;
-}
-
-static upb_tabent* getentry_mutable(upb_table* t, uint32_t hash) {
- return (upb_tabent*)upb_getentry(t, hash);
-}
-
-static const upb_tabent* findentry(const upb_table* t, lookupkey_t key,
- uint32_t hash, eqlfunc_t* eql) {
- const upb_tabent* e;
-
- if (t->size_lg2 == 0) return NULL;
- e = upb_getentry(t, hash);
- if (upb_tabent_isempty(e)) return NULL;
- while (1) {
- if (eql(e->key, key)) return e;
- if ((e = e->next) == NULL) return NULL;
- }
-}
-
-static upb_tabent* findentry_mutable(upb_table* t, lookupkey_t key,
- uint32_t hash, eqlfunc_t* eql) {
- return (upb_tabent*)findentry(t, key, hash, eql);
-}
-
-static bool lookup(const upb_table* t, lookupkey_t key, upb_value* v,
- uint32_t hash, eqlfunc_t* eql) {
- const upb_tabent* e = findentry(t, key, hash, eql);
- if (e) {
- if (v) {
- _upb_value_setval(v, e->val.val);
- }
- return true;
- } else {
- return false;
- }
-}
-
-/* The given key must not already exist in the table. */
-static void insert(upb_table* t, lookupkey_t key, upb_tabkey tabkey,
- upb_value val, uint32_t hash, hashfunc_t* hashfunc,
- eqlfunc_t* eql) {
- upb_tabent* mainpos_e;
- upb_tabent* our_e;
-
- UPB_ASSERT(findentry(t, key, hash, eql) == NULL);
-
- t->count++;
- mainpos_e = getentry_mutable(t, hash);
- our_e = mainpos_e;
-
- if (upb_tabent_isempty(mainpos_e)) {
- /* Our main position is empty; use it. */
- our_e->next = NULL;
- } else {
- /* Collision. */
- upb_tabent* new_e = emptyent(t, mainpos_e);
- /* Head of collider's chain. */
- upb_tabent* chain = getentry_mutable(t, hashfunc(mainpos_e->key));
- if (chain == mainpos_e) {
- /* Existing ent is in its main position (it has the same hash as us, and
- * is the head of our chain). Insert to new ent and append to this chain.
- */
- new_e->next = mainpos_e->next;
- mainpos_e->next = new_e;
- our_e = new_e;
- } else {
- /* Existing ent is not in its main position (it is a node in some other
- * chain). This implies that no existing ent in the table has our hash.
- * Evict it (updating its chain) and use its ent for head of our chain. */
- *new_e = *mainpos_e; /* copies next. */
- while (chain->next != mainpos_e) {
- chain = (upb_tabent*)chain->next;
- UPB_ASSERT(chain);
- }
- chain->next = new_e;
- our_e = mainpos_e;
- our_e->next = NULL;
- }
- }
- our_e->key = tabkey;
- our_e->val.val = val.val;
- UPB_ASSERT(findentry(t, key, hash, eql) == our_e);
-}
-
-static bool rm(upb_table* t, lookupkey_t key, upb_value* val,
- upb_tabkey* removed, uint32_t hash, eqlfunc_t* eql) {
- upb_tabent* chain = getentry_mutable(t, hash);
- if (upb_tabent_isempty(chain)) return false;
- if (eql(chain->key, key)) {
- /* Element to remove is at the head of its chain. */
- t->count--;
- if (val) _upb_value_setval(val, chain->val.val);
- if (removed) *removed = chain->key;
- if (chain->next) {
- upb_tabent* move = (upb_tabent*)chain->next;
- *chain = *move;
- move->key = 0; /* Make the slot empty. */
- } else {
- chain->key = 0; /* Make the slot empty. */
- }
- return true;
- } else {
- /* Element to remove is either in a non-head position or not in the
- * table. */
- while (chain->next && !eql(chain->next->key, key)) {
- chain = (upb_tabent*)chain->next;
- }
- if (chain->next) {
- /* Found element to remove. */
- upb_tabent* rm = (upb_tabent*)chain->next;
- t->count--;
- if (val) _upb_value_setval(val, chain->next->val.val);
- if (removed) *removed = rm->key;
- rm->key = 0; /* Make the slot empty. */
- chain->next = rm->next;
- return true;
- } else {
- /* Element to remove is not in the table. */
- return false;
- }
- }
-}
-
-static size_t next(const upb_table* t, size_t i) {
- do {
- if (++i >= upb_table_size(t)) return SIZE_MAX - 1; /* Distinct from -1. */
- } while (upb_tabent_isempty(&t->entries[i]));
-
- return i;
-}
-
-static size_t begin(const upb_table* t) { return next(t, -1); }
-
-/* upb_strtable ***************************************************************/
-
-/* A simple "subclass" of upb_table that only adds a hash function for strings.
- */
-
-static upb_tabkey strcopy(lookupkey_t k2, upb_Arena* a) {
- uint32_t len = (uint32_t)k2.str.len;
- char* str = upb_Arena_Malloc(a, k2.str.len + sizeof(uint32_t) + 1);
- if (str == NULL) return 0;
- memcpy(str, &len, sizeof(uint32_t));
- if (k2.str.len) memcpy(str + sizeof(uint32_t), k2.str.str, k2.str.len);
- str[sizeof(uint32_t) + k2.str.len] = '\0';
- return (uintptr_t)str;
-}
-
-/* Adapted from ABSL's wyhash. */
-
-static uint64_t UnalignedLoad64(const void* p) {
- uint64_t val;
- memcpy(&val, p, 8);
- return val;
-}
-
-static uint32_t UnalignedLoad32(const void* p) {
- uint32_t val;
- memcpy(&val, p, 4);
- return val;
-}
-
-#if defined(_MSC_VER) && defined(_M_X64)
-#include <intrin.h>
-#endif
-
-/* Computes a * b, returning the low 64 bits of the result and storing the high
- * 64 bits in |*high|. */
-static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) {
-#ifdef __SIZEOF_INT128__
- __uint128_t p = v0;
- p *= v1;
- *out_high = (uint64_t)(p >> 64);
- return (uint64_t)p;
-#elif defined(_MSC_VER) && defined(_M_X64)
- return _umul128(v0, v1, out_high);
-#else
- uint64_t a32 = v0 >> 32;
- uint64_t a00 = v0 & 0xffffffff;
- uint64_t b32 = v1 >> 32;
- uint64_t b00 = v1 & 0xffffffff;
- uint64_t high = a32 * b32;
- uint64_t low = a00 * b00;
- uint64_t mid1 = a32 * b00;
- uint64_t mid2 = a00 * b32;
- low += (mid1 << 32) + (mid2 << 32);
- // Omit carry bit, for mixing we do not care about exact numerical precision.
- high += (mid1 >> 32) + (mid2 >> 32);
- *out_high = high;
- return low;
-#endif
-}
-
-static uint64_t WyhashMix(uint64_t v0, uint64_t v1) {
- uint64_t high;
- uint64_t low = upb_umul128(v0, v1, &high);
- return low ^ high;
-}
-
-static uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
- const uint64_t salt[]) {
- const uint8_t* ptr = (const uint8_t*)data;
- uint64_t starting_length = (uint64_t)len;
- uint64_t current_state = seed ^ salt[0];
-
- if (len > 64) {
- // If we have more than 64 bytes, we're going to handle chunks of 64
- // bytes at a time. We're going to build up two separate hash states
- // which we will then hash together.
- uint64_t duplicated_state = current_state;
-
- do {
- uint64_t a = UnalignedLoad64(ptr);
- uint64_t b = UnalignedLoad64(ptr + 8);
- uint64_t c = UnalignedLoad64(ptr + 16);
- uint64_t d = UnalignedLoad64(ptr + 24);
- uint64_t e = UnalignedLoad64(ptr + 32);
- uint64_t f = UnalignedLoad64(ptr + 40);
- uint64_t g = UnalignedLoad64(ptr + 48);
- uint64_t h = UnalignedLoad64(ptr + 56);
-
- uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state);
- uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state);
- current_state = (cs0 ^ cs1);
-
- uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state);
- uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state);
- duplicated_state = (ds0 ^ ds1);
-
- ptr += 64;
- len -= 64;
- } while (len > 64);
-
- current_state = current_state ^ duplicated_state;
- }
-
- // We now have a data `ptr` with at most 64 bytes and the current state
- // of the hashing state machine stored in current_state.
- while (len > 16) {
- uint64_t a = UnalignedLoad64(ptr);
- uint64_t b = UnalignedLoad64(ptr + 8);
-
- current_state = WyhashMix(a ^ salt[1], b ^ current_state);
-
- ptr += 16;
- len -= 16;
- }
-
- // We now have a data `ptr` with at most 16 bytes.
- uint64_t a = 0;
- uint64_t b = 0;
- if (len > 8) {
- // When we have at least 9 and at most 16 bytes, set A to the first 64
- // bits of the input and B to the last 64 bits of the input. Yes, they will
- // overlap in the middle if we are working with less than the full 16
- // bytes.
- a = UnalignedLoad64(ptr);
- b = UnalignedLoad64(ptr + len - 8);
- } else if (len > 3) {
- // If we have at least 4 and at most 8 bytes, set A to the first 32
- // bits and B to the last 32 bits.
- a = UnalignedLoad32(ptr);
- b = UnalignedLoad32(ptr + len - 4);
- } else if (len > 0) {
- // If we have at least 1 and at most 3 bytes, read all of the provided
- // bits into A, with some adjustments.
- a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
- b = 0;
- } else {
- a = 0;
- b = 0;
- }
-
- uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state);
- uint64_t z = salt[1] ^ starting_length;
- return WyhashMix(w, z);
-}
-
-const uint64_t kWyhashSalt[5] = {
- 0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL,
- 0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL,
-};
-
-uint32_t _upb_Hash(const void* p, size_t n, uint64_t seed) {
- return Wyhash(p, n, seed, kWyhashSalt);
-}
-
-static uint32_t _upb_Hash_NoSeed(const char* p, size_t n) {
- return _upb_Hash(p, n, 0);
-}
-
-static uint32_t strhash(upb_tabkey key) {
- uint32_t len;
- char* str = upb_tabstr(key, &len);
- return _upb_Hash_NoSeed(str, len);
-}
-
-static bool streql(upb_tabkey k1, lookupkey_t k2) {
- uint32_t len;
- char* str = upb_tabstr(k1, &len);
- return len == k2.str.len && (len == 0 || memcmp(str, k2.str.str, len) == 0);
-}
-
-bool upb_strtable_init(upb_strtable* t, size_t expected_size, upb_Arena* a) {
- // Multiply by approximate reciprocal of MAX_LOAD (0.85), with pow2
- // denominator.
- size_t need_entries = (expected_size + 1) * 1204 / 1024;
- UPB_ASSERT(need_entries >= expected_size * 0.85);
- int size_lg2 = upb_Log2Ceiling(need_entries);
- return init(&t->t, size_lg2, a);
-}
-
-void upb_strtable_clear(upb_strtable* t) {
- size_t bytes = upb_table_size(&t->t) * sizeof(upb_tabent);
- t->t.count = 0;
- memset((char*)t->t.entries, 0, bytes);
-}
-
-bool upb_strtable_resize(upb_strtable* t, size_t size_lg2, upb_Arena* a) {
- upb_strtable new_table;
- if (!init(&new_table.t, size_lg2, a)) return false;
-
- intptr_t iter = UPB_STRTABLE_BEGIN;
- upb_StringView key;
- upb_value val;
- while (upb_strtable_next2(t, &key, &val, &iter)) {
- upb_strtable_insert(&new_table, key.data, key.size, val, a);
- }
- *t = new_table;
- return true;
-}
-
-bool upb_strtable_insert(upb_strtable* t, const char* k, size_t len,
- upb_value v, upb_Arena* a) {
- lookupkey_t key;
- upb_tabkey tabkey;
- uint32_t hash;
-
- if (isfull(&t->t)) {
- /* Need to resize. New table of double the size, add old elements to it. */
- if (!upb_strtable_resize(t, t->t.size_lg2 + 1, a)) {
- return false;
- }
- }
-
- key = strkey2(k, len);
- tabkey = strcopy(key, a);
- if (tabkey == 0) return false;
-
- hash = _upb_Hash_NoSeed(key.str.str, key.str.len);
- insert(&t->t, key, tabkey, v, hash, &strhash, &streql);
- return true;
-}
-
-bool upb_strtable_lookup2(const upb_strtable* t, const char* key, size_t len,
- upb_value* v) {
- uint32_t hash = _upb_Hash_NoSeed(key, len);
- return lookup(&t->t, strkey2(key, len), v, hash, &streql);
-}
-
-bool upb_strtable_remove2(upb_strtable* t, const char* key, size_t len,
- upb_value* val) {
- uint32_t hash = _upb_Hash_NoSeed(key, len);
- upb_tabkey tabkey;
- return rm(&t->t, strkey2(key, len), val, &tabkey, hash, &streql);
-}
-
-/* Iteration */
-
-void upb_strtable_begin(upb_strtable_iter* i, const upb_strtable* t) {
- i->t = t;
- i->index = begin(&t->t);
-}
-
-void upb_strtable_next(upb_strtable_iter* i) {
- i->index = next(&i->t->t, i->index);
-}
-
-bool upb_strtable_done(const upb_strtable_iter* i) {
- if (!i->t) return true;
- return i->index >= upb_table_size(&i->t->t) ||
- upb_tabent_isempty(str_tabent(i));
-}
-
-upb_StringView upb_strtable_iter_key(const upb_strtable_iter* i) {
- upb_StringView key;
- uint32_t len;
- UPB_ASSERT(!upb_strtable_done(i));
- key.data = upb_tabstr(str_tabent(i)->key, &len);
- key.size = len;
- return key;
-}
-
-upb_value upb_strtable_iter_value(const upb_strtable_iter* i) {
- UPB_ASSERT(!upb_strtable_done(i));
- return _upb_value_val(str_tabent(i)->val.val);
-}
-
-void upb_strtable_iter_setdone(upb_strtable_iter* i) {
- i->t = NULL;
- i->index = SIZE_MAX;
-}
-
-bool upb_strtable_iter_isequal(const upb_strtable_iter* i1,
- const upb_strtable_iter* i2) {
- if (upb_strtable_done(i1) && upb_strtable_done(i2)) return true;
- return i1->t == i2->t && i1->index == i2->index;
-}
-
-/* upb_inttable ***************************************************************/
-
-/* For inttables we use a hybrid structure where small keys are kept in an
- * array and large keys are put in the hash table. */
-
-static uint32_t inthash(upb_tabkey key) { return upb_inthash(key); }
-
-static bool inteql(upb_tabkey k1, lookupkey_t k2) { return k1 == k2.num; }
-
-static upb_tabval* mutable_array(upb_inttable* t) {
- return (upb_tabval*)t->array;
-}
-
-static upb_tabval* inttable_val(upb_inttable* t, uintptr_t key) {
- if (key < t->array_size) {
- return upb_arrhas(t->array[key]) ? &(mutable_array(t)[key]) : NULL;
- } else {
- upb_tabent* e =
- findentry_mutable(&t->t, intkey(key), upb_inthash(key), &inteql);
- return e ? &e->val : NULL;
- }
-}
-
-static const upb_tabval* inttable_val_const(const upb_inttable* t,
- uintptr_t key) {
- return inttable_val((upb_inttable*)t, key);
-}
-
-size_t upb_inttable_count(const upb_inttable* t) {
- return t->t.count + t->array_count;
-}
-
-static void check(upb_inttable* t) {
- UPB_UNUSED(t);
-#if defined(UPB_DEBUG_TABLE) && !defined(NDEBUG)
- {
- // This check is very expensive (makes inserts/deletes O(N)).
- size_t count = 0;
- intptr_t iter = UPB_INTTABLE_BEGIN;
- uintptr_t key;
- upb_value val;
- while (upb_inttable_next(t, &key, &val, &iter)) {
- UPB_ASSERT(upb_inttable_lookup(t, key, NULL));
- }
- UPB_ASSERT(count == upb_inttable_count(t));
- }
-#endif
-}
-
-bool upb_inttable_sizedinit(upb_inttable* t, size_t asize, int hsize_lg2,
- upb_Arena* a) {
- size_t array_bytes;
-
- if (!init(&t->t, hsize_lg2, a)) return false;
- /* Always make the array part at least 1 long, so that we know key 0
- * won't be in the hash part, which simplifies things. */
- t->array_size = UPB_MAX(1, asize);
- t->array_count = 0;
- array_bytes = t->array_size * sizeof(upb_value);
- t->array = upb_Arena_Malloc(a, array_bytes);
- if (!t->array) {
- return false;
- }
- memset(mutable_array(t), 0xff, array_bytes);
- check(t);
- return true;
-}
-
-bool upb_inttable_init(upb_inttable* t, upb_Arena* a) {
- return upb_inttable_sizedinit(t, 0, 4, a);
-}
-
-bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
- upb_Arena* a) {
- upb_tabval tabval;
- tabval.val = val.val;
- UPB_ASSERT(
- upb_arrhas(tabval)); /* This will reject (uint64_t)-1. Fix this. */
-
- if (key < t->array_size) {
- UPB_ASSERT(!upb_arrhas(t->array[key]));
- t->array_count++;
- mutable_array(t)[key].val = val.val;
- } else {
- if (isfull(&t->t)) {
- /* Need to resize the hash part, but we re-use the array part. */
- size_t i;
- upb_table new_table;
-
- if (!init(&new_table, t->t.size_lg2 + 1, a)) {
- return false;
- }
-
- for (i = begin(&t->t); i < upb_table_size(&t->t); i = next(&t->t, i)) {
- const upb_tabent* e = &t->t.entries[i];
- uint32_t hash;
- upb_value v;
-
- _upb_value_setval(&v, e->val.val);
- hash = upb_inthash(e->key);
- insert(&new_table, intkey(e->key), e->key, v, hash, &inthash, &inteql);
- }
-
- UPB_ASSERT(t->t.count == new_table.count);
-
- t->t = new_table;
- }
- insert(&t->t, intkey(key), key, val, upb_inthash(key), &inthash, &inteql);
- }
- check(t);
- return true;
-}
-
-bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v) {
- const upb_tabval* table_v = inttable_val_const(t, key);
- if (!table_v) return false;
- if (v) _upb_value_setval(v, table_v->val);
- return true;
-}
-
-bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val) {
- upb_tabval* table_v = inttable_val(t, key);
- if (!table_v) return false;
- table_v->val = val.val;
- return true;
-}
-
-bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val) {
- bool success;
- if (key < t->array_size) {
- if (upb_arrhas(t->array[key])) {
- upb_tabval empty = UPB_TABVALUE_EMPTY_INIT;
- t->array_count--;
- if (val) {
- _upb_value_setval(val, t->array[key].val);
- }
- mutable_array(t)[key] = empty;
- success = true;
- } else {
- success = false;
- }
- } else {
- success = rm(&t->t, intkey(key), val, NULL, upb_inthash(key), &inteql);
- }
- check(t);
- return success;
-}
-
-void upb_inttable_compact(upb_inttable* t, upb_Arena* a) {
- /* A power-of-two histogram of the table keys. */
- size_t counts[UPB_MAXARRSIZE + 1] = {0};
-
- /* The max key in each bucket. */
- uintptr_t max[UPB_MAXARRSIZE + 1] = {0};
-
- {
- intptr_t iter = UPB_INTTABLE_BEGIN;
- uintptr_t key;
- upb_value val;
- while (upb_inttable_next(t, &key, &val, &iter)) {
- int bucket = log2ceil(key);
- max[bucket] = UPB_MAX(max[bucket], key);
- counts[bucket]++;
- }
- }
-
- /* Find the largest power of two that satisfies the MIN_DENSITY
- * definition (while actually having some keys). */
- size_t arr_count = upb_inttable_count(t);
- int size_lg2;
- upb_inttable new_t;
-
- for (size_lg2 = ARRAY_SIZE(counts) - 1; size_lg2 > 0; size_lg2--) {
- if (counts[size_lg2] == 0) {
- /* We can halve again without losing any entries. */
- continue;
- } else if (arr_count >= (1 << size_lg2) * MIN_DENSITY) {
- break;
- }
-
- arr_count -= counts[size_lg2];
- }
-
- UPB_ASSERT(arr_count <= upb_inttable_count(t));
-
- {
- /* Insert all elements into new, perfectly-sized table. */
- size_t arr_size = max[size_lg2] + 1; /* +1 so arr[max] will fit. */
- size_t hash_count = upb_inttable_count(t) - arr_count;
- size_t hash_size = hash_count ? (hash_count / MAX_LOAD) + 1 : 0;
- int hashsize_lg2 = log2ceil(hash_size);
-
- upb_inttable_sizedinit(&new_t, arr_size, hashsize_lg2, a);
-
- {
- intptr_t iter = UPB_INTTABLE_BEGIN;
- uintptr_t key;
- upb_value val;
- while (upb_inttable_next(t, &key, &val, &iter)) {
- upb_inttable_insert(&new_t, key, val, a);
- }
- }
-
- UPB_ASSERT(new_t.array_size == arr_size);
- UPB_ASSERT(new_t.t.size_lg2 == hashsize_lg2);
- }
- *t = new_t;
-}
-
-// Iteration.
-
-bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
- intptr_t* iter) {
- intptr_t i = *iter;
- if ((size_t)(i + 1) <= t->array_size) {
- while ((size_t)++i < t->array_size) {
- upb_tabval ent = t->array[i];
- if (upb_arrhas(ent)) {
- *key = i;
- *val = _upb_value_val(ent.val);
- *iter = i;
- return true;
- }
- }
- i--; // Back up to exactly one position before the start of the table.
- }
-
- size_t tab_idx = next(&t->t, i - t->array_size);
- if (tab_idx < upb_table_size(&t->t)) {
- upb_tabent* ent = &t->t.entries[tab_idx];
- *key = ent->key;
- *val = _upb_value_val(ent->val.val);
- *iter = tab_idx + t->array_size;
- return true;
- }
-
- return false;
-}
-
-void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter) {
- intptr_t i = *iter;
- if ((size_t)i < t->array_size) {
- t->array_count--;
- mutable_array(t)[i].val = -1;
- } else {
- upb_tabent* ent = &t->t.entries[i - t->array_size];
- upb_tabent* prev = NULL;
-
- // Linear search, not great.
- upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
- for (upb_tabent* e = t->t.entries; e != end; e++) {
- if (e->next == ent) {
- prev = e;
- break;
- }
- }
-
- if (prev) {
- prev->next = ent->next;
- }
-
- t->t.count--;
- ent->key = 0;
- ent->next = NULL;
- }
-}
-
-bool upb_strtable_next2(const upb_strtable* t, upb_StringView* key,
- upb_value* val, intptr_t* iter) {
- size_t tab_idx = next(&t->t, *iter);
- if (tab_idx < upb_table_size(&t->t)) {
- upb_tabent* ent = &t->t.entries[tab_idx];
- uint32_t len;
- key->data = upb_tabstr(ent->key, &len);
- key->size = len;
- *val = _upb_value_val(ent->val.val);
- *iter = tab_idx;
- return true;
- }
-
- return false;
-}
-
-void upb_strtable_removeiter(upb_strtable* t, intptr_t* iter) {
- intptr_t i = *iter;
- upb_tabent* ent = &t->t.entries[i];
- upb_tabent* prev = NULL;
-
- // Linear search, not great.
- upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
- for (upb_tabent* e = t->t.entries; e != end; e++) {
- if (e->next == ent) {
- prev = e;
- break;
- }
- }
-
- if (prev) {
- prev->next = ent->next;
- }
-
- t->t.count--;
- ent->key = 0;
- ent->next = NULL;
-}
-
-void upb_strtable_setentryvalue(upb_strtable* t, intptr_t iter, upb_value v) {
- upb_tabent* ent = &t->t.entries[iter];
- ent->val.val = v.val;
-}
-
#include <errno.h>
#include <float.h>
@@ -2603,12 +1790,17 @@
const upb_FieldDef* debug_field;
} jsondec;
+typedef struct {
+ upb_MessageValue value;
+ bool ignore;
+} upb_JsonMessageValue;
+
enum { JD_OBJECT, JD_ARRAY, JD_STRING, JD_NUMBER, JD_TRUE, JD_FALSE, JD_NULL };
/* Forward declarations of mutually-recursive functions. */
static void jsondec_wellknown(jsondec* d, upb_Message* msg,
const upb_MessageDef* m);
-static upb_MessageValue jsondec_value(jsondec* d, const upb_FieldDef* f);
+static upb_JsonMessageValue jsondec_value(jsondec* d, const upb_FieldDef* f);
static void jsondec_wellknownvalue(jsondec* d, upb_Message* msg,
const upb_MessageDef* m);
static void jsondec_object(jsondec* d, upb_Message* msg,
@@ -3339,19 +2531,19 @@
return val;
}
-static upb_MessageValue jsondec_enum(jsondec* d, const upb_FieldDef* f) {
+static upb_JsonMessageValue jsondec_enum(jsondec* d, const upb_FieldDef* f) {
switch (jsondec_peek(d)) {
case JD_STRING: {
upb_StringView str = jsondec_string(d);
const upb_EnumDef* e = upb_FieldDef_EnumSubDef(f);
const upb_EnumValueDef* ev =
upb_EnumDef_FindValueByNameWithSize(e, str.data, str.size);
- upb_MessageValue val;
+ upb_JsonMessageValue val = {.ignore = false};
if (ev) {
- val.int32_val = upb_EnumValueDef_Number(ev);
+ val.value.int32_val = upb_EnumValueDef_Number(ev);
} else {
if (d->options & upb_JsonDecode_IgnoreUnknown) {
- val.int32_val = 0;
+ val.ignore = true;
} else {
jsondec_errf(d, "Unknown enumerator: '" UPB_STRINGVIEW_FORMAT "'",
UPB_STRINGVIEW_ARGS(str));
@@ -3361,15 +2553,16 @@
}
case JD_NULL: {
if (jsondec_isnullvalue(f)) {
- upb_MessageValue val;
+ upb_JsonMessageValue val = {.ignore = false};
jsondec_null(d);
- val.int32_val = 0;
+ val.value.int32_val = 0;
return val;
}
}
/* Fallthrough. */
default:
- return jsondec_int(d, f);
+ return (upb_JsonMessageValue){.value = jsondec_int(d, f),
+ .ignore = false};
}
}
@@ -3412,8 +2605,10 @@
jsondec_arrstart(d);
while (jsondec_arrnext(d)) {
- upb_MessageValue elem = jsondec_value(d, f);
- upb_Array_Append(arr, elem, d->arena);
+ upb_JsonMessageValue elem = jsondec_value(d, f);
+ if (!elem.ignore) {
+ upb_Array_Append(arr, elem.value, d->arena);
+ }
}
jsondec_arrend(d);
}
@@ -3426,11 +2621,14 @@
jsondec_objstart(d);
while (jsondec_objnext(d)) {
- upb_MessageValue key, val;
+ upb_JsonMessageValue key, val;
key = jsondec_value(d, key_f);
+ UPB_ASSUME(!key.ignore); // Map key cannot be enum.
jsondec_entrysep(d);
val = jsondec_value(d, val_f);
- upb_Map_Set(map, key, val, d->arena);
+ if (!val.ignore) {
+ upb_Map_Set(map, key.value, val.value, d->arena);
+ }
}
jsondec_objend(d);
}
@@ -3511,8 +2709,10 @@
const upb_MessageDef* subm = upb_FieldDef_MessageSubDef(f);
jsondec_tomsg(d, submsg, subm);
} else {
- upb_MessageValue val = jsondec_value(d, f);
- upb_Message_SetFieldByDef(msg, f, val, d->arena);
+ upb_JsonMessageValue val = jsondec_value(d, f);
+ if (!val.ignore) {
+ upb_Message_SetFieldByDef(msg, f, val.value, d->arena);
+ }
}
d->debug_field = preserved;
@@ -3527,7 +2727,7 @@
jsondec_objend(d);
}
-static upb_MessageValue jsondec_value(jsondec* d, const upb_FieldDef* f) {
+static upb_MessageValue jsondec_nonenum(jsondec* d, const upb_FieldDef* f) {
switch (upb_FieldDef_CType(f)) {
case kUpb_CType_Bool:
return jsondec_bool(d, f);
@@ -3543,15 +2743,23 @@
case kUpb_CType_String:
case kUpb_CType_Bytes:
return jsondec_strfield(d, f);
- case kUpb_CType_Enum:
- return jsondec_enum(d, f);
case kUpb_CType_Message:
return jsondec_msg(d, f);
+ case kUpb_CType_Enum:
default:
UPB_UNREACHABLE();
}
}
+static upb_JsonMessageValue jsondec_value(jsondec* d, const upb_FieldDef* f) {
+ if (upb_FieldDef_CType(f) == kUpb_CType_Enum) {
+ return jsondec_enum(d, f);
+ } else {
+ return (upb_JsonMessageValue){.value = jsondec_nonenum(d, f),
+ .ignore = false};
+ }
+}
+
/* Well-known types ***********************************************************/
static int jsondec_tsdigits(jsondec* d, const char** ptr, size_t digits,
@@ -3976,8 +3184,9 @@
static void jsondec_wrapper(jsondec* d, upb_Message* msg,
const upb_MessageDef* m) {
const upb_FieldDef* value_f = upb_MessageDef_FindFieldByNumber(m, 1);
- upb_MessageValue val = jsondec_value(d, value_f);
- upb_Message_SetFieldByDef(msg, value_f, val, d->arena);
+ upb_JsonMessageValue val = jsondec_value(d, value_f);
+ UPB_ASSUME(val.ignore == false); // Wrapper cannot be an enum.
+ upb_Message_SetFieldByDef(msg, value_f, val.value, d->arena);
}
static void jsondec_wellknown(jsondec* d, upb_Message* msg,
@@ -4832,6 +4041,6496 @@
}
+#include <stdlib.h>
+
+// Must be last.
+
+static void* upb_global_allocfunc(upb_alloc* alloc, void* ptr, size_t oldsize,
+ size_t size) {
+ UPB_UNUSED(alloc);
+ UPB_UNUSED(oldsize);
+ if (size == 0) {
+ free(ptr);
+ return NULL;
+ } else {
+ return realloc(ptr, size);
+ }
+}
+
+upb_alloc upb_alloc_global = {&upb_global_allocfunc};
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+typedef struct upb_MemBlock {
+ // Atomic only for the benefit of SpaceAllocated().
+ UPB_ATOMIC(struct upb_MemBlock*) next;
+ uint32_t size;
+ // Data follows.
+} upb_MemBlock;
+
+typedef struct upb_ArenaInternal {
+ // upb_alloc* together with a low bit which signals if there is an initial
+ // block.
+ uintptr_t block_alloc;
+
+ // When multiple arenas are fused together, each arena points to a parent
+ // arena (root points to itself). The root tracks how many live arenas
+ // reference it.
+
+ // The low bit is tagged:
+ // 0: pointer to parent
+ // 1: count, left shifted by one
+ UPB_ATOMIC(uintptr_t) parent_or_count;
+
+ // All nodes that are fused together are in a singly-linked list.
+ // == NULL at end of list.
+ UPB_ATOMIC(struct upb_ArenaInternal*) next;
+
+ // The last element of the linked list. This is present only as an
+ // optimization, so that we do not have to iterate over all members for every
+ // fuse. Only significant for an arena root. In other cases it is ignored.
+ // == self when no other list members.
+ UPB_ATOMIC(struct upb_ArenaInternal*) tail;
+
+ // Linked list of blocks to free/cleanup. Atomic only for the benefit of
+ // upb_Arena_SpaceAllocated().
+ UPB_ATOMIC(upb_MemBlock*) blocks;
+} upb_ArenaInternal;
+
+// All public + private state for an arena.
+typedef struct {
+ upb_Arena head;
+ upb_ArenaInternal body;
+} upb_ArenaState;
+
+typedef struct {
+ upb_ArenaInternal* root;
+ uintptr_t tagged_count;
+} upb_ArenaRoot;
+
+static const size_t kUpb_MemblockReserve =
+ UPB_ALIGN_UP(sizeof(upb_MemBlock), UPB_MALLOC_ALIGN);
+
+// Extracts the (upb_ArenaInternal*) from a (upb_Arena*)
+static upb_ArenaInternal* upb_Arena_Internal(const upb_Arena* a) {
+ return &((upb_ArenaState*)a)->body;
+}
+
+static bool _upb_Arena_IsTaggedRefcount(uintptr_t parent_or_count) {
+ return (parent_or_count & 1) == 1;
+}
+
+static bool _upb_Arena_IsTaggedPointer(uintptr_t parent_or_count) {
+ return (parent_or_count & 1) == 0;
+}
+
+static uintptr_t _upb_Arena_RefCountFromTagged(uintptr_t parent_or_count) {
+ UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
+ return parent_or_count >> 1;
+}
+
+static uintptr_t _upb_Arena_TaggedFromRefcount(uintptr_t refcount) {
+ uintptr_t parent_or_count = (refcount << 1) | 1;
+ UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
+ return parent_or_count;
+}
+
+static upb_ArenaInternal* _upb_Arena_PointerFromTagged(
+ uintptr_t parent_or_count) {
+ UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
+ return (upb_ArenaInternal*)parent_or_count;
+}
+
+static uintptr_t _upb_Arena_TaggedFromPointer(upb_ArenaInternal* ai) {
+ uintptr_t parent_or_count = (uintptr_t)ai;
+ UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
+ return parent_or_count;
+}
+
+static upb_alloc* _upb_ArenaInternal_BlockAlloc(upb_ArenaInternal* ai) {
+ return (upb_alloc*)(ai->block_alloc & ~0x1);
+}
+
+static uintptr_t _upb_Arena_MakeBlockAlloc(upb_alloc* alloc, bool has_initial) {
+ uintptr_t alloc_uint = (uintptr_t)alloc;
+ UPB_ASSERT((alloc_uint & 1) == 0);
+ return alloc_uint | (has_initial ? 1 : 0);
+}
+
+static bool _upb_ArenaInternal_HasInitialBlock(upb_ArenaInternal* ai) {
+ return ai->block_alloc & 0x1;
+}
+
+static upb_ArenaRoot _upb_Arena_FindRoot(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ while (_upb_Arena_IsTaggedPointer(poc)) {
+ upb_ArenaInternal* next = _upb_Arena_PointerFromTagged(poc);
+ UPB_ASSERT(ai != next);
+ uintptr_t next_poc =
+ upb_Atomic_Load(&next->parent_or_count, memory_order_acquire);
+
+ if (_upb_Arena_IsTaggedPointer(next_poc)) {
+ // To keep complexity down, we lazily collapse levels of the tree. This
+ // keeps it flat in the final case, but doesn't cost much incrementally.
+ //
+ // Path splitting keeps time complexity down, see:
+ // https://en.wikipedia.org/wiki/Disjoint-set_data_structure
+ //
+ // We can safely use a relaxed atomic here because all threads doing this
+ // will converge on the same value and we don't need memory orderings to
+ // be visible.
+ //
+ // This is true because:
+ // - If no fuses occur, this will eventually become the root.
+ // - If fuses are actively occurring, the root may change, but the
+ // invariant is that `parent_or_count` merely points to *a* parent.
+ //
+ // In other words, it is moving towards "the" root, and that root may move
+ // further away over time, but the path towards that root will continue to
+ // be valid and the creation of the path carries all the memory orderings
+ // required.
+ UPB_ASSERT(ai != _upb_Arena_PointerFromTagged(next_poc));
+ upb_Atomic_Store(&ai->parent_or_count, next_poc, memory_order_relaxed);
+ }
+ ai = next;
+ poc = next_poc;
+ }
+ return (upb_ArenaRoot){.root = ai, .tagged_count = poc};
+}
+
+size_t upb_Arena_SpaceAllocated(upb_Arena* arena) {
+ upb_ArenaInternal* ai = _upb_Arena_FindRoot(arena).root;
+ size_t memsize = 0;
+
+ while (ai != NULL) {
+ upb_MemBlock* block = upb_Atomic_Load(&ai->blocks, memory_order_relaxed);
+ while (block != NULL) {
+ memsize += sizeof(upb_MemBlock) + block->size;
+ block = upb_Atomic_Load(&block->next, memory_order_relaxed);
+ }
+ ai = upb_Atomic_Load(&ai->next, memory_order_relaxed);
+ }
+
+ return memsize;
+}
+
+uint32_t upb_Arena_DebugRefCount(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ // These loads could probably be relaxed, but given that this is debug-only,
+ // it's not worth introducing a new variant for it.
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ while (_upb_Arena_IsTaggedPointer(poc)) {
+ ai = _upb_Arena_PointerFromTagged(poc);
+ poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ }
+ return _upb_Arena_RefCountFromTagged(poc);
+}
+
+static void _upb_Arena_AddBlock(upb_Arena* a, void* ptr, size_t size) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ upb_MemBlock* block = ptr;
+
+ // Insert into linked list.
+ block->size = (uint32_t)size;
+ upb_Atomic_Init(&block->next, ai->blocks);
+ upb_Atomic_Store(&ai->blocks, block, memory_order_release);
+
+ a->UPB_PRIVATE(ptr) = UPB_PTR_AT(block, kUpb_MemblockReserve, char);
+ a->UPB_PRIVATE(end) = UPB_PTR_AT(block, size, char);
+
+ UPB_POISON_MEMORY_REGION(a->UPB_PRIVATE(ptr),
+ a->UPB_PRIVATE(end) - a->UPB_PRIVATE(ptr));
+}
+
+static bool _upb_Arena_AllocBlock(upb_Arena* a, size_t size) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ if (!ai->block_alloc) return false;
+ upb_MemBlock* last_block = upb_Atomic_Load(&ai->blocks, memory_order_acquire);
+ size_t last_size = last_block != NULL ? last_block->size : 128;
+ size_t block_size = UPB_MAX(size, last_size * 2) + kUpb_MemblockReserve;
+ upb_MemBlock* block =
+ upb_malloc(_upb_ArenaInternal_BlockAlloc(ai), block_size);
+
+ if (!block) return false;
+ _upb_Arena_AddBlock(a, block, block_size);
+ UPB_ASSERT(UPB_PRIVATE(_upb_ArenaHas)(a) >= size);
+ return true;
+}
+
+void* UPB_PRIVATE(_upb_Arena_SlowMalloc)(upb_Arena* a, size_t size) {
+ if (!_upb_Arena_AllocBlock(a, size)) return NULL; // OOM
+ return upb_Arena_Malloc(a, size - UPB_ASAN_GUARD_SIZE);
+}
+
+static upb_Arena* _upb_Arena_InitSlow(upb_alloc* alloc) {
+ const size_t first_block_overhead =
+ sizeof(upb_ArenaState) + kUpb_MemblockReserve;
+ upb_ArenaState* a;
+
+ // We need to malloc the initial block.
+ char* mem;
+ size_t n = first_block_overhead + 256;
+ if (!alloc || !(mem = upb_malloc(alloc, n))) {
+ return NULL;
+ }
+
+ a = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), upb_ArenaState);
+ n -= sizeof(upb_ArenaState);
+
+ a->body.block_alloc = _upb_Arena_MakeBlockAlloc(alloc, 0);
+ upb_Atomic_Init(&a->body.parent_or_count, _upb_Arena_TaggedFromRefcount(1));
+ upb_Atomic_Init(&a->body.next, NULL);
+ upb_Atomic_Init(&a->body.tail, &a->body);
+ upb_Atomic_Init(&a->body.blocks, NULL);
+
+ _upb_Arena_AddBlock(&a->head, mem, n);
+
+ return &a->head;
+}
+
+upb_Arena* upb_Arena_Init(void* mem, size_t n, upb_alloc* alloc) {
+ UPB_ASSERT(sizeof(void*) * UPB_ARENA_SIZE_HACK >= sizeof(upb_ArenaState));
+ upb_ArenaState* a;
+
+ if (n) {
+ /* Align initial pointer up so that we return properly-aligned pointers. */
+ void* aligned = (void*)UPB_ALIGN_UP((uintptr_t)mem, UPB_MALLOC_ALIGN);
+ size_t delta = (uintptr_t)aligned - (uintptr_t)mem;
+ n = delta <= n ? n - delta : 0;
+ mem = aligned;
+ }
+
+ /* Round block size down to alignof(*a) since we will allocate the arena
+ * itself at the end. */
+ n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_ArenaState));
+
+ if (UPB_UNLIKELY(n < sizeof(upb_ArenaState))) {
+ return _upb_Arena_InitSlow(alloc);
+ }
+
+ a = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), upb_ArenaState);
+
+ upb_Atomic_Init(&a->body.parent_or_count, _upb_Arena_TaggedFromRefcount(1));
+ upb_Atomic_Init(&a->body.next, NULL);
+ upb_Atomic_Init(&a->body.tail, &a->body);
+ upb_Atomic_Init(&a->body.blocks, NULL);
+
+ a->body.block_alloc = _upb_Arena_MakeBlockAlloc(alloc, 1);
+ a->head.UPB_PRIVATE(ptr) = mem;
+ a->head.UPB_PRIVATE(end) = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), char);
+
+ return &a->head;
+}
+
+static void _upb_Arena_DoFree(upb_ArenaInternal* ai) {
+ UPB_ASSERT(_upb_Arena_RefCountFromTagged(ai->parent_or_count) == 1);
+
+ while (ai != NULL) {
+ // Load first since arena itself is likely from one of its blocks.
+ upb_ArenaInternal* next_arena =
+ (upb_ArenaInternal*)upb_Atomic_Load(&ai->next, memory_order_acquire);
+ upb_alloc* block_alloc = _upb_ArenaInternal_BlockAlloc(ai);
+ upb_MemBlock* block = upb_Atomic_Load(&ai->blocks, memory_order_acquire);
+ while (block != NULL) {
+ // Load first since we are deleting block.
+ upb_MemBlock* next_block =
+ upb_Atomic_Load(&block->next, memory_order_acquire);
+ upb_free(block_alloc, block);
+ block = next_block;
+ }
+ ai = next_arena;
+ }
+}
+
+void upb_Arena_Free(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+retry:
+ while (_upb_Arena_IsTaggedPointer(poc)) {
+ ai = _upb_Arena_PointerFromTagged(poc);
+ poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
+ }
+
+ // compare_exchange or fetch_sub are RMW operations, which are more
+ // expensive then direct loads. As an optimization, we only do RMW ops
+ // when we need to update things for other threads to see.
+ if (poc == _upb_Arena_TaggedFromRefcount(1)) {
+ _upb_Arena_DoFree(ai);
+ return;
+ }
+
+ if (upb_Atomic_CompareExchangeWeak(
+ &ai->parent_or_count, &poc,
+ _upb_Arena_TaggedFromRefcount(_upb_Arena_RefCountFromTagged(poc) - 1),
+ memory_order_release, memory_order_acquire)) {
+ // We were >1 and we decremented it successfully, so we are done.
+ return;
+ }
+
+ // We failed our update, so someone has done something, retry the whole
+ // process, but the failed exchange reloaded `poc` for us.
+ goto retry;
+}
+
+static void _upb_Arena_DoFuseArenaLists(upb_ArenaInternal* const parent,
+ upb_ArenaInternal* child) {
+ upb_ArenaInternal* parent_tail =
+ upb_Atomic_Load(&parent->tail, memory_order_relaxed);
+
+ do {
+ // Our tail might be stale, but it will always converge to the true tail.
+ upb_ArenaInternal* parent_tail_next =
+ upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
+ while (parent_tail_next != NULL) {
+ parent_tail = parent_tail_next;
+ parent_tail_next =
+ upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
+ }
+
+ upb_ArenaInternal* displaced =
+ upb_Atomic_Exchange(&parent_tail->next, child, memory_order_relaxed);
+ parent_tail = upb_Atomic_Load(&child->tail, memory_order_relaxed);
+
+ // If we displaced something that got installed racily, we can simply
+ // reinstall it on our new tail.
+ child = displaced;
+ } while (child != NULL);
+
+ upb_Atomic_Store(&parent->tail, parent_tail, memory_order_relaxed);
+}
+
+static upb_ArenaInternal* _upb_Arena_DoFuse(upb_Arena* a1, upb_Arena* a2,
+ uintptr_t* ref_delta) {
+ // `parent_or_count` has two disctint modes
+ // - parent pointer mode
+ // - refcount mode
+ //
+ // In parent pointer mode, it may change what pointer it refers to in the
+ // tree, but it will always approach a root. Any operation that walks the
+ // tree to the root may collapse levels of the tree concurrently.
+ upb_ArenaRoot r1 = _upb_Arena_FindRoot(a1);
+ upb_ArenaRoot r2 = _upb_Arena_FindRoot(a2);
+
+ if (r1.root == r2.root) return r1.root; // Already fused.
+
+ // Avoid cycles by always fusing into the root with the lower address.
+ if ((uintptr_t)r1.root > (uintptr_t)r2.root) {
+ upb_ArenaRoot tmp = r1;
+ r1 = r2;
+ r2 = tmp;
+ }
+
+ // The moment we install `r1` as the parent for `r2` all racing frees may
+ // immediately begin decrementing `r1`'s refcount (including pending
+ // increments to that refcount and their frees!). We need to add `r2`'s refs
+ // now, so that `r1` can withstand any unrefs that come from r2.
+ //
+ // Note that while it is possible for `r2`'s refcount to increase
+ // asynchronously, we will not actually do the reparenting operation below
+ // unless `r2`'s refcount is unchanged from when we read it.
+ //
+ // Note that we may have done this previously, either to this node or a
+ // different node, during a previous and failed DoFuse() attempt. But we will
+ // not lose track of these refs because we always add them to our overall
+ // delta.
+ uintptr_t r2_untagged_count = r2.tagged_count & ~1;
+ uintptr_t with_r2_refs = r1.tagged_count + r2_untagged_count;
+ if (!upb_Atomic_CompareExchangeStrong(
+ &r1.root->parent_or_count, &r1.tagged_count, with_r2_refs,
+ memory_order_release, memory_order_acquire)) {
+ return NULL;
+ }
+
+ // Perform the actual fuse by removing the refs from `r2` and swapping in the
+ // parent pointer.
+ if (!upb_Atomic_CompareExchangeStrong(
+ &r2.root->parent_or_count, &r2.tagged_count,
+ _upb_Arena_TaggedFromPointer(r1.root), memory_order_release,
+ memory_order_acquire)) {
+ // We'll need to remove the excess refs we added to r1 previously.
+ *ref_delta += r2_untagged_count;
+ return NULL;
+ }
+
+ // Now that the fuse has been performed (and can no longer fail) we need to
+ // append `r2` to `r1`'s linked list.
+ _upb_Arena_DoFuseArenaLists(r1.root, r2.root);
+ return r1.root;
+}
+
+static bool _upb_Arena_FixupRefs(upb_ArenaInternal* new_root,
+ uintptr_t ref_delta) {
+ if (ref_delta == 0) return true; // No fixup required.
+ uintptr_t poc =
+ upb_Atomic_Load(&new_root->parent_or_count, memory_order_relaxed);
+ if (_upb_Arena_IsTaggedPointer(poc)) return false;
+ uintptr_t with_refs = poc - ref_delta;
+ UPB_ASSERT(!_upb_Arena_IsTaggedPointer(with_refs));
+ return upb_Atomic_CompareExchangeStrong(&new_root->parent_or_count, &poc,
+ with_refs, memory_order_relaxed,
+ memory_order_relaxed);
+}
+
+bool upb_Arena_Fuse(upb_Arena* a1, upb_Arena* a2) {
+ if (a1 == a2) return true; // trivial fuse
+
+ upb_ArenaInternal* ai1 = upb_Arena_Internal(a1);
+ upb_ArenaInternal* ai2 = upb_Arena_Internal(a2);
+
+ // Do not fuse initial blocks since we cannot lifetime extend them.
+ // Any other fuse scenario is allowed.
+ if (_upb_ArenaInternal_HasInitialBlock(ai1) ||
+ _upb_ArenaInternal_HasInitialBlock(ai2)) {
+ return false;
+ }
+
+ // The number of refs we ultimately need to transfer to the new root.
+ uintptr_t ref_delta = 0;
+ while (true) {
+ upb_ArenaInternal* new_root = _upb_Arena_DoFuse(a1, a2, &ref_delta);
+ if (new_root != NULL && _upb_Arena_FixupRefs(new_root, ref_delta)) {
+ return true;
+ }
+ }
+}
+
+bool upb_Arena_IncRefFor(upb_Arena* a, const void* owner) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ if (_upb_ArenaInternal_HasInitialBlock(ai)) return false;
+ upb_ArenaRoot r;
+
+retry:
+ r = _upb_Arena_FindRoot(a);
+ if (upb_Atomic_CompareExchangeWeak(
+ &r.root->parent_or_count, &r.tagged_count,
+ _upb_Arena_TaggedFromRefcount(
+ _upb_Arena_RefCountFromTagged(r.tagged_count) + 1),
+ memory_order_release, memory_order_acquire)) {
+ // We incremented it successfully, so we are done.
+ return true;
+ }
+ // We failed update due to parent switching on the arena.
+ goto retry;
+}
+
+void upb_Arena_DecRefFor(upb_Arena* a, const void* owner) { upb_Arena_Free(a); }
+
+void UPB_PRIVATE(_upb_Arena_SwapIn)(upb_Arena* des, const upb_Arena* src) {
+ upb_ArenaInternal* desi = upb_Arena_Internal(des);
+ upb_ArenaInternal* srci = upb_Arena_Internal(src);
+
+ *des = *src;
+ desi->block_alloc = srci->block_alloc;
+ upb_MemBlock* blocks = upb_Atomic_Load(&srci->blocks, memory_order_relaxed);
+ upb_Atomic_Init(&desi->blocks, blocks);
+}
+
+void UPB_PRIVATE(_upb_Arena_SwapOut)(upb_Arena* des, const upb_Arena* src) {
+ upb_ArenaInternal* desi = upb_Arena_Internal(des);
+ upb_ArenaInternal* srci = upb_Arena_Internal(src);
+
+ *des = *src;
+ upb_MemBlock* blocks = upb_Atomic_Load(&srci->blocks, memory_order_relaxed);
+ upb_Atomic_Store(&desi->blocks, blocks, memory_order_relaxed);
+}
+
+
+#include <string.h>
+
+
+// Must be last.
+
+bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
+ const upb_MiniTableField* f,
+ upb_Message* map_entry_message, upb_Arena* arena) {
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(map_entry_mini_table);
+ UPB_ASSERT(map_entry_mini_table->UPB_PRIVATE(field_count) == 2);
+ const upb_MiniTableField* map_entry_key_field =
+ &map_entry_mini_table->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* map_entry_value_field =
+ &map_entry_mini_table->UPB_PRIVATE(fields)[1];
+ // Map key/value cannot have explicit defaults,
+ // hence assuming a zero default is valid.
+ upb_MessageValue default_val;
+ memset(&default_val, 0, sizeof(upb_MessageValue));
+ upb_MessageValue map_entry_key =
+ upb_Message_GetField(map_entry_message, map_entry_key_field, default_val);
+ upb_MessageValue map_entry_value = upb_Message_GetField(
+ map_entry_message, map_entry_value_field, default_val);
+ return upb_Map_Set(map, map_entry_key, map_entry_value, arena);
+}
+
+
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+upb_Array* upb_Array_New(upb_Arena* a, upb_CType type) {
+ const int lg2 = UPB_PRIVATE(_upb_CType_SizeLg2)(type);
+ return UPB_PRIVATE(_upb_Array_New)(a, 4, lg2);
+}
+
+const void* upb_Array_DataPtr(const upb_Array* arr) {
+ return _upb_array_ptr((upb_Array*)arr);
+}
+
+void* upb_Array_MutableDataPtr(upb_Array* arr) { return _upb_array_ptr(arr); }
+
+size_t upb_Array_Size(const upb_Array* arr) { return arr->UPB_PRIVATE(size); }
+
+upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i) {
+ upb_MessageValue ret;
+ const char* data = _upb_array_constptr(arr);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ UPB_ASSERT(i < arr->UPB_PRIVATE(size));
+ memcpy(&ret, data + (i << lg2), 1 << lg2);
+ return ret;
+}
+
+void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val) {
+ char* data = _upb_array_ptr(arr);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ UPB_ASSERT(i < arr->UPB_PRIVATE(size));
+ memcpy(data + (i << lg2), &val, 1 << lg2);
+}
+
+bool upb_Array_Append(upb_Array* arr, upb_MessageValue val, upb_Arena* arena) {
+ UPB_ASSERT(arena);
+ if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + 1, arena)) {
+ return false;
+ }
+ upb_Array_Set(arr, arr->UPB_PRIVATE(size) - 1, val);
+ return true;
+}
+
+void upb_Array_Move(upb_Array* arr, size_t dst_idx, size_t src_idx,
+ size_t count) {
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ char* data = _upb_array_ptr(arr);
+ memmove(&data[dst_idx << lg2], &data[src_idx << lg2], count << lg2);
+}
+
+bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
+ upb_Arena* arena) {
+ UPB_ASSERT(arena);
+ UPB_ASSERT(i <= arr->UPB_PRIVATE(size));
+ UPB_ASSERT(count + arr->UPB_PRIVATE(size) >= count);
+ const size_t oldsize = arr->UPB_PRIVATE(size);
+ if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + count,
+ arena)) {
+ return false;
+ }
+ upb_Array_Move(arr, i + count, i, oldsize - i);
+ return true;
+}
+
+/*
+ * i end arr->size
+ * |------------|XXXXXXXX|--------|
+ */
+void upb_Array_Delete(upb_Array* arr, size_t i, size_t count) {
+ const size_t end = i + count;
+ UPB_ASSERT(i <= end);
+ UPB_ASSERT(end <= arr->UPB_PRIVATE(size));
+ upb_Array_Move(arr, i, end, arr->UPB_PRIVATE(size) - end);
+ arr->UPB_PRIVATE(size) -= count;
+}
+
+bool upb_Array_Resize(upb_Array* arr, size_t size, upb_Arena* arena) {
+ const size_t oldsize = arr->UPB_PRIVATE(size);
+ if (UPB_UNLIKELY(!_upb_Array_ResizeUninitialized(arr, size, arena))) {
+ return false;
+ }
+ const size_t newsize = arr->UPB_PRIVATE(size);
+ if (newsize > oldsize) {
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ char* data = _upb_array_ptr(arr);
+ memset(data + (oldsize << lg2), 0, (newsize - oldsize) << lg2);
+ }
+ return true;
+}
+
+bool UPB_PRIVATE(_upb_Array_Realloc)(upb_Array* array, size_t min_capacity,
+ upb_Arena* arena) {
+ size_t new_capacity = UPB_MAX(array->UPB_PRIVATE(capacity), 4);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array);
+ size_t old_bytes = array->UPB_PRIVATE(capacity) << lg2;
+ void* ptr = _upb_array_ptr(array);
+
+ // Log2 ceiling of size.
+ while (new_capacity < min_capacity) new_capacity *= 2;
+
+ const size_t new_bytes = new_capacity << lg2;
+ ptr = upb_Arena_Realloc(arena, ptr, old_bytes, new_bytes);
+ if (!ptr) return false;
+
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)(array, ptr, lg2);
+ array->UPB_PRIVATE(capacity) = new_capacity;
+ return true;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+const upb_Extension* upb_Message_ExtensionByIndex(const upb_Message* msg,
+ size_t index) {
+ size_t count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+
+ UPB_ASSERT(index < count);
+ return &ext[index];
+}
+
+const upb_Extension* upb_Message_FindExtensionByNumber(const upb_Message* msg,
+ uint32_t field_number) {
+ size_t count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+
+ while (count--) {
+ if (upb_MiniTableExtension_Number(ext->ext) == field_number) return ext;
+ ext++;
+ }
+ return NULL;
+}
+
+
+#include <string.h>
+
+
+// Must be last.
+
+// Strings/bytes are special-cased in maps.
+char _upb_Map_CTypeSizeTable[12] = {
+ [kUpb_CType_Bool] = 1,
+ [kUpb_CType_Float] = 4,
+ [kUpb_CType_Int32] = 4,
+ [kUpb_CType_UInt32] = 4,
+ [kUpb_CType_Enum] = 4,
+ [kUpb_CType_Message] = sizeof(void*),
+ [kUpb_CType_Double] = 8,
+ [kUpb_CType_Int64] = 8,
+ [kUpb_CType_UInt64] = 8,
+ [kUpb_CType_String] = UPB_MAPTYPE_STRING,
+ [kUpb_CType_Bytes] = UPB_MAPTYPE_STRING,
+};
+
+upb_Map* upb_Map_New(upb_Arena* a, upb_CType key_type, upb_CType value_type) {
+ return _upb_Map_New(a, _upb_Map_CTypeSize(key_type),
+ _upb_Map_CTypeSize(value_type));
+}
+
+size_t upb_Map_Size(const upb_Map* map) { return _upb_Map_Size(map); }
+
+bool upb_Map_Get(const upb_Map* map, upb_MessageValue key,
+ upb_MessageValue* val) {
+ return _upb_Map_Get(map, &key, map->key_size, val, map->val_size);
+}
+
+void upb_Map_Clear(upb_Map* map) { _upb_Map_Clear(map); }
+
+upb_MapInsertStatus upb_Map_Insert(upb_Map* map, upb_MessageValue key,
+ upb_MessageValue val, upb_Arena* arena) {
+ UPB_ASSERT(arena);
+ return (upb_MapInsertStatus)_upb_Map_Insert(map, &key, map->key_size, &val,
+ map->val_size, arena);
+}
+
+bool upb_Map_Delete(upb_Map* map, upb_MessageValue key, upb_MessageValue* val) {
+ upb_value v;
+ const bool removed = _upb_Map_Delete(map, &key, map->key_size, &v);
+ if (val) _upb_map_fromvalue(v, val, map->val_size);
+ return removed;
+}
+
+bool upb_Map_Next(const upb_Map* map, upb_MessageValue* key,
+ upb_MessageValue* val, size_t* iter) {
+ upb_StringView k;
+ upb_value v;
+ const bool ok = upb_strtable_next2(&map->table, &k, &v, (intptr_t*)iter);
+ if (ok) {
+ _upb_map_fromkey(k, key, map->key_size);
+ _upb_map_fromvalue(v, val, map->val_size);
+ }
+ return ok;
+}
+
+UPB_API void upb_Map_SetEntryValue(upb_Map* map, size_t iter,
+ upb_MessageValue val) {
+ upb_value v;
+ _upb_map_tovalue(&val, map->val_size, &v, NULL);
+ upb_strtable_setentryvalue(&map->table, iter, v);
+}
+
+bool upb_MapIterator_Next(const upb_Map* map, size_t* iter) {
+ return _upb_map_next(map, iter);
+}
+
+bool upb_MapIterator_Done(const upb_Map* map, size_t iter) {
+ upb_strtable_iter i;
+ UPB_ASSERT(iter != kUpb_Map_Begin);
+ i.t = &map->table;
+ i.index = iter;
+ return upb_strtable_done(&i);
+}
+
+// Returns the key and value for this entry of the map.
+upb_MessageValue upb_MapIterator_Key(const upb_Map* map, size_t iter) {
+ upb_strtable_iter i;
+ upb_MessageValue ret;
+ i.t = &map->table;
+ i.index = iter;
+ _upb_map_fromkey(upb_strtable_iter_key(&i), &ret, map->key_size);
+ return ret;
+}
+
+upb_MessageValue upb_MapIterator_Value(const upb_Map* map, size_t iter) {
+ upb_strtable_iter i;
+ upb_MessageValue ret;
+ i.t = &map->table;
+ i.index = iter;
+ _upb_map_fromvalue(upb_strtable_iter_value(&i), &ret, map->val_size);
+ return ret;
+}
+
+// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
+
+upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size) {
+ upb_Map* map = upb_Arena_Malloc(a, sizeof(upb_Map));
+ if (!map) return NULL;
+
+ upb_strtable_init(&map->table, 4, a);
+ map->key_size = key_size;
+ map->val_size = value_size;
+
+ return map;
+}
+
+
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+static void _upb_mapsorter_getkeys(const void* _a, const void* _b, void* a_key,
+ void* b_key, size_t size) {
+ const upb_tabent* const* a = _a;
+ const upb_tabent* const* b = _b;
+ upb_StringView a_tabkey = upb_tabstrview((*a)->key);
+ upb_StringView b_tabkey = upb_tabstrview((*b)->key);
+ _upb_map_fromkey(a_tabkey, a_key, size);
+ _upb_map_fromkey(b_tabkey, b_key, size);
+}
+
+static int _upb_mapsorter_cmpi64(const void* _a, const void* _b) {
+ int64_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpu64(const void* _a, const void* _b) {
+ uint64_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpi32(const void* _a, const void* _b) {
+ int32_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpu32(const void* _a, const void* _b) {
+ uint32_t a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpbool(const void* _a, const void* _b) {
+ bool a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, 1);
+ return a < b ? -1 : a > b;
+}
+
+static int _upb_mapsorter_cmpstr(const void* _a, const void* _b) {
+ upb_StringView a, b;
+ _upb_mapsorter_getkeys(_a, _b, &a, &b, UPB_MAPTYPE_STRING);
+ size_t common_size = UPB_MIN(a.size, b.size);
+ int cmp = memcmp(a.data, b.data, common_size);
+ if (cmp) return -cmp;
+ return a.size < b.size ? -1 : a.size > b.size;
+}
+
+static int (*const compar[kUpb_FieldType_SizeOf])(const void*, const void*) = {
+ [kUpb_FieldType_Int64] = _upb_mapsorter_cmpi64,
+ [kUpb_FieldType_SFixed64] = _upb_mapsorter_cmpi64,
+ [kUpb_FieldType_SInt64] = _upb_mapsorter_cmpi64,
+
+ [kUpb_FieldType_UInt64] = _upb_mapsorter_cmpu64,
+ [kUpb_FieldType_Fixed64] = _upb_mapsorter_cmpu64,
+
+ [kUpb_FieldType_Int32] = _upb_mapsorter_cmpi32,
+ [kUpb_FieldType_SInt32] = _upb_mapsorter_cmpi32,
+ [kUpb_FieldType_SFixed32] = _upb_mapsorter_cmpi32,
+ [kUpb_FieldType_Enum] = _upb_mapsorter_cmpi32,
+
+ [kUpb_FieldType_UInt32] = _upb_mapsorter_cmpu32,
+ [kUpb_FieldType_Fixed32] = _upb_mapsorter_cmpu32,
+
+ [kUpb_FieldType_Bool] = _upb_mapsorter_cmpbool,
+
+ [kUpb_FieldType_String] = _upb_mapsorter_cmpstr,
+ [kUpb_FieldType_Bytes] = _upb_mapsorter_cmpstr,
+};
+
+static bool _upb_mapsorter_resize(_upb_mapsorter* s, _upb_sortedmap* sorted,
+ int size) {
+ sorted->start = s->size;
+ sorted->pos = sorted->start;
+ sorted->end = sorted->start + size;
+
+ if (sorted->end > s->cap) {
+ const int oldsize = s->cap * sizeof(*s->entries);
+ s->cap = upb_Log2CeilingSize(sorted->end);
+ const int newsize = s->cap * sizeof(*s->entries);
+ s->entries = upb_grealloc(s->entries, oldsize, newsize);
+ if (!s->entries) return false;
+ }
+
+ s->size = sorted->end;
+ return true;
+}
+
+bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
+ const upb_Map* map, _upb_sortedmap* sorted) {
+ int map_size = _upb_Map_Size(map);
+
+ if (!_upb_mapsorter_resize(s, sorted, map_size)) return false;
+
+ // Copy non-empty entries from the table to s->entries.
+ const void** dst = &s->entries[sorted->start];
+ const upb_tabent* src = map->table.t.entries;
+ const upb_tabent* end = src + upb_table_size(&map->table.t);
+ for (; src < end; src++) {
+ if (!upb_tabent_isempty(src)) {
+ *dst = src;
+ dst++;
+ }
+ }
+ UPB_ASSERT(dst == &s->entries[sorted->end]);
+
+ // Sort entries according to the key type.
+ qsort(&s->entries[sorted->start], map_size, sizeof(*s->entries),
+ compar[key_type]);
+ return true;
+}
+
+static int _upb_mapsorter_cmpext(const void* _a, const void* _b) {
+ const upb_Extension* const* a = _a;
+ const upb_Extension* const* b = _b;
+ uint32_t a_num = upb_MiniTableExtension_Number((*a)->ext);
+ uint32_t b_num = upb_MiniTableExtension_Number((*b)->ext);
+ assert(a_num != b_num);
+ return a_num < b_num ? -1 : 1;
+}
+
+bool _upb_mapsorter_pushexts(_upb_mapsorter* s, const upb_Extension* exts,
+ size_t count, _upb_sortedmap* sorted) {
+ if (!_upb_mapsorter_resize(s, sorted, count)) return false;
+
+ for (size_t i = 0; i < count; i++) {
+ s->entries[sorted->start + i] = &exts[i];
+ }
+
+ qsort(&s->entries[sorted->start], count, sizeof(*s->entries),
+ _upb_mapsorter_cmpext);
+ return true;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+static const size_t message_overhead = sizeof(upb_Message_InternalData);
+
+upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* a) {
+ return _upb_Message_New(m, a);
+}
+
+bool UPB_PRIVATE(_upb_Message_AddUnknown)(upb_Message* msg, const char* data,
+ size_t len, upb_Arena* arena) {
+ if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, len, arena)) return false;
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ memcpy(UPB_PTR_AT(in, in->unknown_end, char), data, len);
+ in->unknown_end += len;
+ return true;
+}
+
+void _upb_Message_DiscardUnknown_shallow(upb_Message* msg) {
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (in) {
+ in->unknown_end = message_overhead;
+ }
+}
+
+const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len) {
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (in) {
+ *len = in->unknown_end - message_overhead;
+ return (char*)(in + 1);
+ } else {
+ *len = 0;
+ return NULL;
+ }
+}
+
+void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len) {
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ const char* internal_unknown_end = UPB_PTR_AT(in, in->unknown_end, char);
+
+#ifndef NDEBUG
+ size_t full_unknown_size;
+ const char* full_unknown = upb_Message_GetUnknown(msg, &full_unknown_size);
+ UPB_ASSERT((uintptr_t)data >= (uintptr_t)full_unknown);
+ UPB_ASSERT((uintptr_t)data < (uintptr_t)(full_unknown + full_unknown_size));
+ UPB_ASSERT((uintptr_t)(data + len) > (uintptr_t)data);
+ UPB_ASSERT((uintptr_t)(data + len) <= (uintptr_t)internal_unknown_end);
+#endif
+
+ if ((data + len) != internal_unknown_end) {
+ memmove((char*)data, data + len, internal_unknown_end - data - len);
+ }
+ in->unknown_end -= len;
+}
+
+size_t upb_Message_ExtensionCount(const upb_Message* msg) {
+ size_t count;
+ UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+ return count;
+}
+
+
+#include <string.h>
+
+
+// Must be last.
+
+bool upb_Message_IsExactlyEqual(const upb_Message* msg1,
+ const upb_Message* msg2,
+ const upb_MiniTable* m) {
+ if (msg1 == msg2) return true;
+
+ int opts = kUpb_EncodeOption_SkipUnknown | kUpb_EncodeOption_Deterministic;
+ upb_Arena* a = upb_Arena_New();
+
+ // Compare deterministically serialized payloads with no unknown fields.
+ size_t size1, size2;
+ char *data1, *data2;
+ upb_EncodeStatus status1 = upb_Encode(msg1, m, opts, a, &data1, &size1);
+ upb_EncodeStatus status2 = upb_Encode(msg2, m, opts, a, &data2, &size2);
+
+ if (status1 != kUpb_EncodeStatus_Ok || status2 != kUpb_EncodeStatus_Ok) {
+ // TODO: How should we fail here? (In Ruby we throw an exception.)
+ upb_Arena_Free(a);
+ return false;
+ }
+
+ const bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
+ upb_Arena_Free(a);
+ return ret;
+}
+
+
+#include <stdbool.h>
+#include <string.h>
+
+
+// Must be last.
+
+static upb_StringView upb_Clone_StringView(upb_StringView str,
+ upb_Arena* arena) {
+ if (str.size == 0) {
+ return upb_StringView_FromDataAndSize(NULL, 0);
+ }
+ void* cloned_data = upb_Arena_Malloc(arena, str.size);
+ upb_StringView cloned_str =
+ upb_StringView_FromDataAndSize(cloned_data, str.size);
+ memcpy(cloned_data, str.data, str.size);
+ return cloned_str;
+}
+
+static bool upb_Clone_MessageValue(void* value, upb_CType value_type,
+ const upb_MiniTable* sub, upb_Arena* arena) {
+ switch (value_type) {
+ case kUpb_CType_Bool:
+ case kUpb_CType_Float:
+ case kUpb_CType_Int32:
+ case kUpb_CType_UInt32:
+ case kUpb_CType_Enum:
+ case kUpb_CType_Double:
+ case kUpb_CType_Int64:
+ case kUpb_CType_UInt64:
+ return true;
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes: {
+ upb_StringView source = *(upb_StringView*)value;
+ int size = source.size;
+ void* cloned_data = upb_Arena_Malloc(arena, size);
+ if (cloned_data == NULL) {
+ return false;
+ }
+ *(upb_StringView*)value =
+ upb_StringView_FromDataAndSize(cloned_data, size);
+ memcpy(cloned_data, source.data, size);
+ return true;
+ } break;
+ case kUpb_CType_Message: {
+ const upb_TaggedMessagePtr source = *(upb_TaggedMessagePtr*)value;
+ bool is_empty = upb_TaggedMessagePtr_IsEmpty(source);
+ if (is_empty) sub = UPB_PRIVATE(_upb_MiniTable_Empty)();
+ UPB_ASSERT(source);
+ upb_Message* clone = upb_Message_DeepClone(
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(source), sub, arena);
+ *(upb_TaggedMessagePtr*)value =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(clone, is_empty);
+ return clone != NULL;
+ } break;
+ }
+ UPB_UNREACHABLE();
+}
+
+upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
+ upb_CType value_type,
+ const upb_MiniTable* map_entry_table,
+ upb_Arena* arena) {
+ upb_Map* cloned_map = _upb_Map_New(arena, map->key_size, map->val_size);
+ if (cloned_map == NULL) {
+ return NULL;
+ }
+ upb_MessageValue key, val;
+ size_t iter = kUpb_Map_Begin;
+ while (upb_Map_Next(map, &key, &val, &iter)) {
+ const upb_MiniTableField* value_field =
+ &map_entry_table->UPB_PRIVATE(fields)[1];
+ const upb_MiniTable* value_sub =
+ (value_field->UPB_PRIVATE(submsg_index) != kUpb_NoSub)
+ ? upb_MiniTable_GetSubMessageTable(map_entry_table, value_field)
+ : NULL;
+ upb_CType value_field_type = upb_MiniTableField_CType(value_field);
+ if (!upb_Clone_MessageValue(&val, value_field_type, value_sub, arena)) {
+ return NULL;
+ }
+ if (!upb_Map_Set(cloned_map, key, val, arena)) {
+ return NULL;
+ }
+ }
+ return cloned_map;
+}
+
+static upb_Map* upb_Message_Map_DeepClone(const upb_Map* map,
+ const upb_MiniTable* mini_table,
+ const upb_MiniTableField* f,
+ upb_Message* clone,
+ upb_Arena* arena) {
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(map_entry_table);
+
+ const upb_MiniTableField* key_field =
+ &map_entry_table->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* value_field =
+ &map_entry_table->UPB_PRIVATE(fields)[1];
+
+ upb_Map* cloned_map = upb_Map_DeepClone(
+ map, upb_MiniTableField_CType(key_field),
+ upb_MiniTableField_CType(value_field), map_entry_table, arena);
+ if (!cloned_map) {
+ return NULL;
+ }
+ _upb_Message_SetNonExtensionField(clone, f, &cloned_map);
+ return cloned_map;
+}
+
+upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
+ const upb_MiniTable* sub, upb_Arena* arena) {
+ const size_t size = array->UPB_PRIVATE(size);
+ const int lg2 = UPB_PRIVATE(_upb_CType_SizeLg2)(value_type);
+ upb_Array* cloned_array = UPB_PRIVATE(_upb_Array_New)(arena, size, lg2);
+ if (!cloned_array) {
+ return NULL;
+ }
+ if (!_upb_Array_ResizeUninitialized(cloned_array, size, arena)) {
+ return NULL;
+ }
+ for (size_t i = 0; i < size; ++i) {
+ upb_MessageValue val = upb_Array_Get(array, i);
+ if (!upb_Clone_MessageValue(&val, value_type, sub, arena)) {
+ return false;
+ }
+ upb_Array_Set(cloned_array, i, val);
+ }
+ return cloned_array;
+}
+
+static bool upb_Message_Array_DeepClone(const upb_Array* array,
+ const upb_MiniTable* mini_table,
+ const upb_MiniTableField* field,
+ upb_Message* clone, upb_Arena* arena) {
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
+ upb_Array* cloned_array = upb_Array_DeepClone(
+ array, upb_MiniTableField_CType(field),
+ upb_MiniTableField_CType(field) == kUpb_CType_Message &&
+ field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
+ ? upb_MiniTable_GetSubMessageTable(mini_table, field)
+ : NULL,
+ arena);
+
+ // Clear out upb_Array* due to parent memcpy.
+ _upb_Message_SetNonExtensionField(clone, field, &cloned_array);
+ return true;
+}
+
+static bool upb_Clone_ExtensionValue(
+ const upb_MiniTableExtension* mini_table_ext, const upb_Extension* source,
+ upb_Extension* dest, upb_Arena* arena) {
+ dest->data = source->data;
+ return upb_Clone_MessageValue(
+ &dest->data,
+ upb_MiniTableField_CType(&mini_table_ext->UPB_PRIVATE(field)),
+ upb_MiniTableExtension_GetSubMessage(mini_table_ext), arena);
+}
+
+upb_Message* _upb_Message_Copy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* mini_table,
+ upb_Arena* arena) {
+ upb_StringView empty_string = upb_StringView_FromDataAndSize(NULL, 0);
+ // Only copy message area skipping upb_Message_Internal.
+ memcpy(dst, src, mini_table->UPB_PRIVATE(size));
+ for (size_t i = 0; i < mini_table->UPB_PRIVATE(field_count); ++i) {
+ const upb_MiniTableField* field = &mini_table->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_IsScalar(field)) {
+ switch (upb_MiniTableField_CType(field)) {
+ case kUpb_CType_Message: {
+ upb_TaggedMessagePtr tagged =
+ upb_Message_GetTaggedMessagePtr(src, field, NULL);
+ const upb_Message* sub_message =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
+ if (sub_message != NULL) {
+ // If the message is currently in an unlinked, "empty" state we keep
+ // it that way, because we don't want to deal with decode options,
+ // decode status, or possible parse failure here.
+ bool is_empty = upb_TaggedMessagePtr_IsEmpty(tagged);
+ const upb_MiniTable* sub_message_table =
+ is_empty ? UPB_PRIVATE(_upb_MiniTable_Empty)()
+ : upb_MiniTable_GetSubMessageTable(mini_table, field);
+ upb_Message* dst_sub_message =
+ upb_Message_DeepClone(sub_message, sub_message_table, arena);
+ if (dst_sub_message == NULL) {
+ return NULL;
+ }
+ _upb_Message_SetTaggedMessagePtr(
+ dst, mini_table, field,
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(dst_sub_message,
+ is_empty));
+ }
+ } break;
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes: {
+ upb_StringView str = upb_Message_GetString(src, field, empty_string);
+ if (str.size != 0) {
+ if (!upb_Message_SetString(
+ dst, field, upb_Clone_StringView(str, arena), arena)) {
+ return NULL;
+ }
+ }
+ } break;
+ default:
+ // Scalar, already copied.
+ break;
+ }
+ } else {
+ if (upb_MiniTableField_IsMap(field)) {
+ const upb_Map* map = upb_Message_GetMap(src, field);
+ if (map != NULL) {
+ if (!upb_Message_Map_DeepClone(map, mini_table, field, dst, arena)) {
+ return NULL;
+ }
+ }
+ } else {
+ const upb_Array* array = upb_Message_GetArray(src, field);
+ if (array != NULL) {
+ if (!upb_Message_Array_DeepClone(array, mini_table, field, dst,
+ arena)) {
+ return NULL;
+ }
+ }
+ }
+ }
+ }
+ // Clone extensions.
+ size_t ext_count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(src, &ext_count);
+ for (size_t i = 0; i < ext_count; ++i) {
+ const upb_Extension* msg_ext = &ext[i];
+ const upb_MiniTableField* field = &msg_ext->ext->UPB_PRIVATE(field);
+ upb_Extension* dst_ext =
+ _upb_Message_GetOrCreateExtension(dst, msg_ext->ext, arena);
+ if (!dst_ext) return NULL;
+ if (upb_MiniTableField_IsScalar(field)) {
+ if (!upb_Clone_ExtensionValue(msg_ext->ext, msg_ext, dst_ext, arena)) {
+ return NULL;
+ }
+ } else {
+ upb_Array* msg_array = (upb_Array*)msg_ext->data.ptr;
+ UPB_ASSERT(msg_array);
+ upb_Array* cloned_array = upb_Array_DeepClone(
+ msg_array, upb_MiniTableField_CType(field),
+ upb_MiniTableExtension_GetSubMessage(msg_ext->ext), arena);
+ if (!cloned_array) {
+ return NULL;
+ }
+ dst_ext->data.ptr = (void*)cloned_array;
+ }
+ }
+
+ // Clone unknowns.
+ size_t unknown_size = 0;
+ const char* ptr = upb_Message_GetUnknown(src, &unknown_size);
+ if (unknown_size != 0) {
+ UPB_ASSERT(ptr);
+ // Make a copy into destination arena.
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(dst, ptr, unknown_size, arena)) {
+ return NULL;
+ }
+ }
+ return dst;
+}
+
+bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* mini_table, upb_Arena* arena) {
+ upb_Message_Clear(dst, mini_table);
+ return _upb_Message_Copy(dst, src, mini_table, arena) != NULL;
+}
+
+// Deep clones a message using the provided target arena.
+//
+// Returns NULL on failure.
+upb_Message* upb_Message_DeepClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena) {
+ upb_Message* clone = upb_Message_New(m, arena);
+ return _upb_Message_Copy(clone, msg, m, arena);
+}
+
+// Performs a shallow copy. TODO: Extend to handle unknown fields.
+void upb_Message_ShallowCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m) {
+ memcpy(dst, src, m->UPB_PRIVATE(size));
+}
+
+// Performs a shallow clone. Ignores unknown fields.
+upb_Message* upb_Message_ShallowClone(const upb_Message* msg,
+ const upb_MiniTable* m,
+ upb_Arena* arena) {
+ upb_Message* clone = upb_Message_New(m, arena);
+ upb_Message_ShallowCopy(clone, msg, m);
+ return clone;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+typedef struct {
+ upb_MdDecoder base;
+ upb_Arena* arena;
+ upb_MiniTableEnum* enum_table;
+ uint32_t enum_value_count;
+ uint32_t enum_data_count;
+ uint32_t enum_data_capacity;
+} upb_MdEnumDecoder;
+
+static size_t upb_MiniTableEnum_Size(size_t count) {
+ return sizeof(upb_MiniTableEnum) + count * sizeof(uint32_t);
+}
+
+static upb_MiniTableEnum* _upb_MiniTable_AddEnumDataMember(upb_MdEnumDecoder* d,
+ uint32_t val) {
+ if (d->enum_data_count == d->enum_data_capacity) {
+ size_t old_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
+ d->enum_data_capacity = UPB_MAX(2, d->enum_data_capacity * 2);
+ size_t new_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
+ d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz);
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
+ }
+ d->enum_table->UPB_PRIVATE(data)[d->enum_data_count++] = val;
+ return d->enum_table;
+}
+
+static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) {
+ upb_MiniTableEnum* table = d->enum_table;
+ d->enum_value_count++;
+ if (table->UPB_PRIVATE(value_count) ||
+ (val > 512 && d->enum_value_count < val / 32)) {
+ if (table->UPB_PRIVATE(value_count) == 0) {
+ UPB_ASSERT(d->enum_data_count == table->UPB_PRIVATE(mask_limit) / 32);
+ }
+ table = _upb_MiniTable_AddEnumDataMember(d, val);
+ table->UPB_PRIVATE(value_count)++;
+ } else {
+ uint32_t new_mask_limit = ((val / 32) + 1) * 32;
+ while (table->UPB_PRIVATE(mask_limit) < new_mask_limit) {
+ table = _upb_MiniTable_AddEnumDataMember(d, 0);
+ table->UPB_PRIVATE(mask_limit) += 32;
+ }
+ table->UPB_PRIVATE(data)[val / 32] |= 1ULL << (val % 32);
+ }
+}
+
+static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum(
+ upb_MdEnumDecoder* d, const char* data, size_t len) {
+ // If the string is non-empty then it must begin with a version tag.
+ if (len) {
+ if (*data != kUpb_EncodedVersion_EnumV1) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid enum version: %c", *data);
+ }
+ data++;
+ len--;
+ }
+
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
+
+ // Guarantee at least 64 bits of mask without checking mask size.
+ d->enum_table->UPB_PRIVATE(mask_limit) = 64;
+ d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
+ d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
+
+ d->enum_table->UPB_PRIVATE(value_count) = 0;
+
+ const char* ptr = data;
+ uint32_t base = 0;
+
+ while (ptr < d->base.end) {
+ char ch = *ptr++;
+ if (ch <= kUpb_EncodedValue_MaxEnumMask) {
+ uint32_t mask = _upb_FromBase92(ch);
+ for (int i = 0; i < 5; i++, base++, mask >>= 1) {
+ if (mask & 1) upb_MiniTableEnum_BuildValue(d, base);
+ }
+ } else if (kUpb_EncodedValue_MinSkip <= ch &&
+ ch <= kUpb_EncodedValue_MaxSkip) {
+ uint32_t skip;
+ ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
+ kUpb_EncodedValue_MinSkip,
+ kUpb_EncodedValue_MaxSkip, &skip);
+ base += skip;
+ } else {
+ upb_MdDecoder_ErrorJmp(&d->base, "Unexpected character: %c", ch);
+ }
+ }
+
+ return d->enum_table;
+}
+
+static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum(
+ upb_MdEnumDecoder* const decoder, const char* const data,
+ size_t const len) {
+ if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
+ return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len);
+}
+
+upb_MiniTableEnum* upb_MiniDescriptor_BuildEnum(const char* data, size_t len,
+ upb_Arena* arena,
+ upb_Status* status) {
+ upb_MdEnumDecoder decoder = {
+ .base =
+ {
+ .end = UPB_PTRADD(data, len),
+ .status = status,
+ },
+ .arena = arena,
+ .enum_table = upb_Arena_Malloc(arena, upb_MiniTableEnum_Size(2)),
+ .enum_value_count = 0,
+ .enum_data_count = 0,
+ .enum_data_capacity = 1,
+ };
+
+ return upb_MtDecoder_BuildMiniTableEnum(&decoder, data, len);
+}
+
+
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+
+// Must be last.
+
+// Note: we sort by this number when calculating layout order.
+typedef enum {
+ kUpb_LayoutItemType_OneofCase, // Oneof case.
+ kUpb_LayoutItemType_OneofField, // Oneof field data.
+ kUpb_LayoutItemType_Field, // Non-oneof field data.
+
+ kUpb_LayoutItemType_Max = kUpb_LayoutItemType_Field,
+} upb_LayoutItemType;
+
+#define kUpb_LayoutItem_IndexSentinel ((uint16_t)-1)
+
+typedef struct {
+ // Index of the corresponding field. When this is a oneof field, the field's
+ // offset will be the index of the next field in a linked list.
+ uint16_t field_index;
+ uint16_t offset;
+ upb_FieldRep rep;
+ upb_LayoutItemType type;
+} upb_LayoutItem;
+
+typedef struct {
+ upb_LayoutItem* data;
+ size_t size;
+ size_t capacity;
+} upb_LayoutItemVector;
+
+typedef struct {
+ upb_MdDecoder base;
+ upb_MiniTable* table;
+ upb_MiniTableField* fields;
+ upb_MiniTablePlatform platform;
+ upb_LayoutItemVector vec;
+ upb_Arena* arena;
+} upb_MtDecoder;
+
+// In each field's offset, we temporarily store a presence classifier:
+enum PresenceClass {
+ kNoPresence = 0,
+ kHasbitPresence = 1,
+ kRequiredPresence = 2,
+ kOneofBase = 3,
+ // Negative values refer to a specific oneof with that number. Positive
+ // values >= kOneofBase indicate that this field is in a oneof, and specify
+ // the next field in this oneof's linked list.
+};
+
+static bool upb_MtDecoder_FieldIsPackable(upb_MiniTableField* field) {
+ return (field->UPB_PRIVATE(mode) & kUpb_FieldMode_Array) &&
+ upb_FieldType_IsPackable(field->UPB_PRIVATE(descriptortype));
+}
+
+typedef struct {
+ uint16_t submsg_count;
+ uint16_t subenum_count;
+} upb_SubCounts;
+
+static void upb_MiniTable_SetTypeAndSub(upb_MiniTableField* field,
+ upb_FieldType type,
+ upb_SubCounts* sub_counts,
+ uint64_t msg_modifiers,
+ bool is_proto3_enum) {
+ if (is_proto3_enum) {
+ UPB_ASSERT(type == kUpb_FieldType_Enum);
+ type = kUpb_FieldType_Int32;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsAlternate;
+ } else if (type == kUpb_FieldType_String &&
+ !(msg_modifiers & kUpb_MessageModifier_ValidateUtf8)) {
+ type = kUpb_FieldType_Bytes;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsAlternate;
+ }
+
+ field->UPB_PRIVATE(descriptortype) = type;
+
+ if (upb_MtDecoder_FieldIsPackable(field) &&
+ (msg_modifiers & kUpb_MessageModifier_DefaultIsPacked)) {
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsPacked;
+ }
+
+ if (type == kUpb_FieldType_Message || type == kUpb_FieldType_Group) {
+ field->UPB_PRIVATE(submsg_index) = sub_counts->submsg_count++;
+ } else if (type == kUpb_FieldType_Enum) {
+ // We will need to update this later once we know the total number of
+ // submsg fields.
+ field->UPB_PRIVATE(submsg_index) = sub_counts->subenum_count++;
+ } else {
+ field->UPB_PRIVATE(submsg_index) = kUpb_NoSub;
+ }
+}
+
+static const char kUpb_EncodedToType[] = {
+ [kUpb_EncodedType_Double] = kUpb_FieldType_Double,
+ [kUpb_EncodedType_Float] = kUpb_FieldType_Float,
+ [kUpb_EncodedType_Int64] = kUpb_FieldType_Int64,
+ [kUpb_EncodedType_UInt64] = kUpb_FieldType_UInt64,
+ [kUpb_EncodedType_Int32] = kUpb_FieldType_Int32,
+ [kUpb_EncodedType_Fixed64] = kUpb_FieldType_Fixed64,
+ [kUpb_EncodedType_Fixed32] = kUpb_FieldType_Fixed32,
+ [kUpb_EncodedType_Bool] = kUpb_FieldType_Bool,
+ [kUpb_EncodedType_String] = kUpb_FieldType_String,
+ [kUpb_EncodedType_Group] = kUpb_FieldType_Group,
+ [kUpb_EncodedType_Message] = kUpb_FieldType_Message,
+ [kUpb_EncodedType_Bytes] = kUpb_FieldType_Bytes,
+ [kUpb_EncodedType_UInt32] = kUpb_FieldType_UInt32,
+ [kUpb_EncodedType_OpenEnum] = kUpb_FieldType_Enum,
+ [kUpb_EncodedType_SFixed32] = kUpb_FieldType_SFixed32,
+ [kUpb_EncodedType_SFixed64] = kUpb_FieldType_SFixed64,
+ [kUpb_EncodedType_SInt32] = kUpb_FieldType_SInt32,
+ [kUpb_EncodedType_SInt64] = kUpb_FieldType_SInt64,
+ [kUpb_EncodedType_ClosedEnum] = kUpb_FieldType_Enum,
+};
+
+static void upb_MiniTable_SetField(upb_MtDecoder* d, uint8_t ch,
+ upb_MiniTableField* field,
+ uint64_t msg_modifiers,
+ upb_SubCounts* sub_counts) {
+ static const char kUpb_EncodedToFieldRep[] = {
+ [kUpb_EncodedType_Double] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_Float] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_Int64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_UInt64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_Int32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_Fixed64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_Fixed32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_Bool] = kUpb_FieldRep_1Byte,
+ [kUpb_EncodedType_String] = kUpb_FieldRep_StringView,
+ [kUpb_EncodedType_Bytes] = kUpb_FieldRep_StringView,
+ [kUpb_EncodedType_UInt32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_OpenEnum] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_SFixed32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_SFixed64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_SInt32] = kUpb_FieldRep_4Byte,
+ [kUpb_EncodedType_SInt64] = kUpb_FieldRep_8Byte,
+ [kUpb_EncodedType_ClosedEnum] = kUpb_FieldRep_4Byte,
+ };
+
+ char pointer_rep = d->platform == kUpb_MiniTablePlatform_32Bit
+ ? kUpb_FieldRep_4Byte
+ : kUpb_FieldRep_8Byte;
+
+ int8_t type = _upb_FromBase92(ch);
+ if (ch >= _upb_ToBase92(kUpb_EncodedType_RepeatedBase)) {
+ type -= kUpb_EncodedType_RepeatedBase;
+ field->UPB_PRIVATE(mode) = kUpb_FieldMode_Array;
+ field->UPB_PRIVATE(mode) |= pointer_rep << kUpb_FieldRep_Shift;
+ field->UPB_PRIVATE(offset) = kNoPresence;
+ } else {
+ field->UPB_PRIVATE(mode) = kUpb_FieldMode_Scalar;
+ field->UPB_PRIVATE(offset) = kHasbitPresence;
+ if (type == kUpb_EncodedType_Group || type == kUpb_EncodedType_Message) {
+ field->UPB_PRIVATE(mode) |= pointer_rep << kUpb_FieldRep_Shift;
+ } else if ((unsigned long)type >= sizeof(kUpb_EncodedToFieldRep)) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
+ } else {
+ field->UPB_PRIVATE(mode) |= kUpb_EncodedToFieldRep[type]
+ << kUpb_FieldRep_Shift;
+ }
+ }
+ if ((unsigned long)type >= sizeof(kUpb_EncodedToType)) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
+ }
+ upb_MiniTable_SetTypeAndSub(field, kUpb_EncodedToType[type], sub_counts,
+ msg_modifiers, type == kUpb_EncodedType_OpenEnum);
+}
+
+static void upb_MtDecoder_ModifyField(upb_MtDecoder* d,
+ uint32_t message_modifiers,
+ uint32_t field_modifiers,
+ upb_MiniTableField* field) {
+ if (field_modifiers & kUpb_EncodedFieldModifier_FlipPacked) {
+ if (!upb_MtDecoder_FieldIsPackable(field)) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Cannot flip packed on unpackable field %" PRIu32,
+ upb_MiniTableField_Number(field));
+ }
+ field->UPB_PRIVATE(mode) ^= kUpb_LabelFlags_IsPacked;
+ }
+
+ if (field_modifiers & kUpb_EncodedFieldModifier_FlipValidateUtf8) {
+ if (field->UPB_PRIVATE(descriptortype) != kUpb_FieldType_Bytes ||
+ !(field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsAlternate)) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Cannot flip ValidateUtf8 on field %" PRIu32
+ ", type=%d, mode=%d",
+ upb_MiniTableField_Number(field),
+ (int)field->UPB_PRIVATE(descriptortype),
+ (int)field->UPB_PRIVATE(mode));
+ }
+ field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_String;
+ field->UPB_PRIVATE(mode) &= ~kUpb_LabelFlags_IsAlternate;
+ }
+
+ bool singular = field_modifiers & kUpb_EncodedFieldModifier_IsProto3Singular;
+ bool required = field_modifiers & kUpb_EncodedFieldModifier_IsRequired;
+
+ // Validate.
+ if ((singular || required) && field->UPB_PRIVATE(offset) != kHasbitPresence) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Invalid modifier(s) for repeated field %" PRIu32,
+ upb_MiniTableField_Number(field));
+ }
+ if (singular && required) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base, "Field %" PRIu32 " cannot be both singular and required",
+ upb_MiniTableField_Number(field));
+ }
+
+ if (singular) field->UPB_PRIVATE(offset) = kNoPresence;
+ if (required) {
+ field->UPB_PRIVATE(offset) = kRequiredPresence;
+ }
+}
+
+static void upb_MtDecoder_PushItem(upb_MtDecoder* d, upb_LayoutItem item) {
+ if (d->vec.size == d->vec.capacity) {
+ size_t new_cap = UPB_MAX(8, d->vec.size * 2);
+ d->vec.data = realloc(d->vec.data, new_cap * sizeof(*d->vec.data));
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->vec.data);
+ d->vec.capacity = new_cap;
+ }
+ d->vec.data[d->vec.size++] = item;
+}
+
+static void upb_MtDecoder_PushOneof(upb_MtDecoder* d, upb_LayoutItem item) {
+ if (item.field_index == kUpb_LayoutItem_IndexSentinel) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Empty oneof");
+ }
+ item.field_index -= kOneofBase;
+
+ // Push oneof data.
+ item.type = kUpb_LayoutItemType_OneofField;
+ upb_MtDecoder_PushItem(d, item);
+
+ // Push oneof case.
+ item.rep = kUpb_FieldRep_4Byte; // Field Number.
+ item.type = kUpb_LayoutItemType_OneofCase;
+ upb_MtDecoder_PushItem(d, item);
+}
+
+size_t upb_MtDecoder_SizeOfRep(upb_FieldRep rep,
+ upb_MiniTablePlatform platform) {
+ static const uint8_t kRepToSize32[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 8,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ static const uint8_t kRepToSize64[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 16,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ UPB_ASSERT(sizeof(upb_StringView) ==
+ UPB_SIZE(kRepToSize32, kRepToSize64)[kUpb_FieldRep_StringView]);
+ return platform == kUpb_MiniTablePlatform_32Bit ? kRepToSize32[rep]
+ : kRepToSize64[rep];
+}
+
+size_t upb_MtDecoder_AlignOfRep(upb_FieldRep rep,
+ upb_MiniTablePlatform platform) {
+ static const uint8_t kRepToAlign32[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 4,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ static const uint8_t kRepToAlign64[] = {
+ [kUpb_FieldRep_1Byte] = 1,
+ [kUpb_FieldRep_4Byte] = 4,
+ [kUpb_FieldRep_StringView] = 8,
+ [kUpb_FieldRep_8Byte] = 8,
+ };
+ UPB_ASSERT(UPB_ALIGN_OF(upb_StringView) ==
+ UPB_SIZE(kRepToAlign32, kRepToAlign64)[kUpb_FieldRep_StringView]);
+ return platform == kUpb_MiniTablePlatform_32Bit ? kRepToAlign32[rep]
+ : kRepToAlign64[rep];
+}
+
+static const char* upb_MtDecoder_DecodeOneofField(upb_MtDecoder* d,
+ const char* ptr,
+ char first_ch,
+ upb_LayoutItem* item) {
+ uint32_t field_num;
+ ptr = upb_MdDecoder_DecodeBase92Varint(
+ &d->base, ptr, first_ch, kUpb_EncodedValue_MinOneofField,
+ kUpb_EncodedValue_MaxOneofField, &field_num);
+ upb_MiniTableField* f =
+ (void*)upb_MiniTable_FindFieldByNumber(d->table, field_num);
+
+ if (!f) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Couldn't add field number %" PRIu32
+ " to oneof, no such field number.",
+ field_num);
+ }
+ if (f->UPB_PRIVATE(offset) != kHasbitPresence) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base,
+ "Cannot add repeated, required, or singular field %" PRIu32
+ " to oneof.",
+ field_num);
+ }
+
+ // Oneof storage must be large enough to accommodate the largest member.
+ int rep = f->UPB_PRIVATE(mode) >> kUpb_FieldRep_Shift;
+ if (upb_MtDecoder_SizeOfRep(rep, d->platform) >
+ upb_MtDecoder_SizeOfRep(item->rep, d->platform)) {
+ item->rep = rep;
+ }
+ // Prepend this field to the linked list.
+ f->UPB_PRIVATE(offset) = item->field_index;
+ item->field_index = (f - d->fields) + kOneofBase;
+ return ptr;
+}
+
+static const char* upb_MtDecoder_DecodeOneofs(upb_MtDecoder* d,
+ const char* ptr) {
+ upb_LayoutItem item = {.rep = 0,
+ .field_index = kUpb_LayoutItem_IndexSentinel};
+ while (ptr < d->base.end) {
+ char ch = *ptr++;
+ if (ch == kUpb_EncodedValue_FieldSeparator) {
+ // Field separator, no action needed.
+ } else if (ch == kUpb_EncodedValue_OneofSeparator) {
+ // End of oneof.
+ upb_MtDecoder_PushOneof(d, item);
+ item.field_index = kUpb_LayoutItem_IndexSentinel; // Move to next oneof.
+ } else {
+ ptr = upb_MtDecoder_DecodeOneofField(d, ptr, ch, &item);
+ }
+ }
+
+ // Push final oneof.
+ upb_MtDecoder_PushOneof(d, item);
+ return ptr;
+}
+
+static const char* upb_MtDecoder_ParseModifier(upb_MtDecoder* d,
+ const char* ptr, char first_ch,
+ upb_MiniTableField* last_field,
+ uint64_t* msg_modifiers) {
+ uint32_t mod;
+ ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, first_ch,
+ kUpb_EncodedValue_MinModifier,
+ kUpb_EncodedValue_MaxModifier, &mod);
+ if (last_field) {
+ upb_MtDecoder_ModifyField(d, *msg_modifiers, mod, last_field);
+ } else {
+ if (!d->table) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Extensions cannot have message modifiers");
+ }
+ *msg_modifiers = mod;
+ }
+
+ return ptr;
+}
+
+static void upb_MtDecoder_AllocateSubs(upb_MtDecoder* d,
+ upb_SubCounts sub_counts) {
+ uint32_t total_count = sub_counts.submsg_count + sub_counts.subenum_count;
+ size_t subs_bytes = sizeof(*d->table->UPB_PRIVATE(subs)) * total_count;
+ upb_MiniTableSub* subs = upb_Arena_Malloc(d->arena, subs_bytes);
+ upb_MdDecoder_CheckOutOfMemory(&d->base, subs);
+ uint32_t i = 0;
+ for (; i < sub_counts.submsg_count; i++) {
+ subs[i].UPB_PRIVATE(submsg) = UPB_PRIVATE(_upb_MiniTable_Empty)();
+ }
+ if (sub_counts.subenum_count) {
+ upb_MiniTableField* f = d->fields;
+ upb_MiniTableField* end_f = f + d->table->UPB_PRIVATE(field_count);
+ for (; f < end_f; f++) {
+ if (f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum) {
+ f->UPB_PRIVATE(submsg_index) += sub_counts.submsg_count;
+ }
+ }
+ for (; i < sub_counts.submsg_count + sub_counts.subenum_count; i++) {
+ subs[i].UPB_PRIVATE(subenum) = NULL;
+ }
+ }
+ d->table->UPB_PRIVATE(subs) = subs;
+}
+
+static const char* upb_MtDecoder_Parse(upb_MtDecoder* d, const char* ptr,
+ size_t len, void* fields,
+ size_t field_size, uint16_t* field_count,
+ upb_SubCounts* sub_counts) {
+ uint64_t msg_modifiers = 0;
+ uint32_t last_field_number = 0;
+ upb_MiniTableField* last_field = NULL;
+ bool need_dense_below = d->table != NULL;
+
+ d->base.end = UPB_PTRADD(ptr, len);
+
+ while (ptr < d->base.end) {
+ char ch = *ptr++;
+ if (ch <= kUpb_EncodedValue_MaxField) {
+ if (!d->table && last_field) {
+ // For extensions, consume only a single field and then return.
+ return --ptr;
+ }
+ upb_MiniTableField* field = fields;
+ *field_count += 1;
+ fields = (char*)fields + field_size;
+ field->UPB_PRIVATE(number) = ++last_field_number;
+ last_field = field;
+ upb_MiniTable_SetField(d, ch, field, msg_modifiers, sub_counts);
+ } else if (kUpb_EncodedValue_MinModifier <= ch &&
+ ch <= kUpb_EncodedValue_MaxModifier) {
+ ptr = upb_MtDecoder_ParseModifier(d, ptr, ch, last_field, &msg_modifiers);
+ if (msg_modifiers & kUpb_MessageModifier_IsExtendable) {
+ d->table->UPB_PRIVATE(ext) |= kUpb_ExtMode_Extendable;
+ }
+ } else if (ch == kUpb_EncodedValue_End) {
+ if (!d->table) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Extensions cannot have oneofs.");
+ }
+ ptr = upb_MtDecoder_DecodeOneofs(d, ptr);
+ } else if (kUpb_EncodedValue_MinSkip <= ch &&
+ ch <= kUpb_EncodedValue_MaxSkip) {
+ if (need_dense_below) {
+ d->table->UPB_PRIVATE(dense_below) = d->table->UPB_PRIVATE(field_count);
+ need_dense_below = false;
+ }
+ uint32_t skip;
+ ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
+ kUpb_EncodedValue_MinSkip,
+ kUpb_EncodedValue_MaxSkip, &skip);
+ last_field_number += skip;
+ last_field_number--; // Next field seen will increment.
+ } else {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid char: %c", ch);
+ }
+ }
+
+ if (need_dense_below) {
+ d->table->UPB_PRIVATE(dense_below) = d->table->UPB_PRIVATE(field_count);
+ }
+
+ return ptr;
+}
+
+static void upb_MtDecoder_ParseMessage(upb_MtDecoder* d, const char* data,
+ size_t len) {
+ // Buffer length is an upper bound on the number of fields. We will return
+ // what we don't use.
+ d->fields = upb_Arena_Malloc(d->arena, sizeof(*d->fields) * len);
+ upb_MdDecoder_CheckOutOfMemory(&d->base, d->fields);
+
+ upb_SubCounts sub_counts = {0, 0};
+ d->table->UPB_PRIVATE(field_count) = 0;
+ d->table->UPB_PRIVATE(fields) = d->fields;
+ upb_MtDecoder_Parse(d, data, len, d->fields, sizeof(*d->fields),
+ &d->table->UPB_PRIVATE(field_count), &sub_counts);
+
+ upb_Arena_ShrinkLast(d->arena, d->fields, sizeof(*d->fields) * len,
+ sizeof(*d->fields) * d->table->UPB_PRIVATE(field_count));
+ d->table->UPB_PRIVATE(fields) = d->fields;
+ upb_MtDecoder_AllocateSubs(d, sub_counts);
+}
+
+int upb_MtDecoder_CompareFields(const void* _a, const void* _b) {
+ const upb_LayoutItem* a = _a;
+ const upb_LayoutItem* b = _b;
+ // Currently we just sort by:
+ // 1. rep (smallest fields first)
+ // 2. type (oneof cases first)
+ // 2. field_index (smallest numbers first)
+ // The main goal of this is to reduce space lost to padding.
+ // Later we may have more subtle reasons to prefer a different ordering.
+ const int rep_bits = upb_Log2Ceiling(kUpb_FieldRep_Max);
+ const int type_bits = upb_Log2Ceiling(kUpb_LayoutItemType_Max);
+ const int idx_bits = (sizeof(a->field_index) * 8);
+ UPB_ASSERT(idx_bits + rep_bits + type_bits < 32);
+#define UPB_COMBINE(rep, ty, idx) (((rep << type_bits) | ty) << idx_bits) | idx
+ uint32_t a_packed = UPB_COMBINE(a->rep, a->type, a->field_index);
+ uint32_t b_packed = UPB_COMBINE(b->rep, b->type, b->field_index);
+ UPB_ASSERT(a_packed != b_packed);
+#undef UPB_COMBINE
+ return a_packed < b_packed ? -1 : 1;
+}
+
+static bool upb_MtDecoder_SortLayoutItems(upb_MtDecoder* d) {
+ // Add items for all non-oneof fields (oneofs were already added).
+ int n = d->table->UPB_PRIVATE(field_count);
+ for (int i = 0; i < n; i++) {
+ upb_MiniTableField* f = &d->fields[i];
+ if (f->UPB_PRIVATE(offset) >= kOneofBase) continue;
+ upb_LayoutItem item = {.field_index = i,
+ .rep = f->UPB_PRIVATE(mode) >> kUpb_FieldRep_Shift,
+ .type = kUpb_LayoutItemType_Field};
+ upb_MtDecoder_PushItem(d, item);
+ }
+
+ if (d->vec.size) {
+ qsort(d->vec.data, d->vec.size, sizeof(*d->vec.data),
+ upb_MtDecoder_CompareFields);
+ }
+
+ return true;
+}
+
+static size_t upb_MiniTable_DivideRoundUp(size_t n, size_t d) {
+ return (n + d - 1) / d;
+}
+
+static void upb_MtDecoder_AssignHasbits(upb_MtDecoder* d) {
+ upb_MiniTable* ret = d->table;
+ int n = ret->UPB_PRIVATE(field_count);
+ int last_hasbit = 0; // 0 cannot be used.
+
+ // First assign required fields, which must have the lowest hasbits.
+ for (int i = 0; i < n; i++) {
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)&ret->UPB_PRIVATE(fields)[i];
+ if (field->UPB_PRIVATE(offset) == kRequiredPresence) {
+ field->presence = ++last_hasbit;
+ } else if (field->UPB_PRIVATE(offset) == kNoPresence) {
+ field->presence = 0;
+ }
+ }
+ if (last_hasbit > 63) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Too many required fields");
+ }
+
+ ret->UPB_PRIVATE(required_count) = last_hasbit;
+
+ // Next assign non-required hasbit fields.
+ for (int i = 0; i < n; i++) {
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)&ret->UPB_PRIVATE(fields)[i];
+ if (field->UPB_PRIVATE(offset) == kHasbitPresence) {
+ field->presence = ++last_hasbit;
+ }
+ }
+
+ ret->UPB_PRIVATE(size) =
+ last_hasbit ? upb_MiniTable_DivideRoundUp(last_hasbit + 1, 8) : 0;
+}
+
+size_t upb_MtDecoder_Place(upb_MtDecoder* d, upb_FieldRep rep) {
+ size_t size = upb_MtDecoder_SizeOfRep(rep, d->platform);
+ size_t align = upb_MtDecoder_AlignOfRep(rep, d->platform);
+ size_t ret = UPB_ALIGN_UP(d->table->UPB_PRIVATE(size), align);
+ static const size_t max = UINT16_MAX;
+ size_t new_size = ret + size;
+ if (new_size > max) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base, "Message size exceeded maximum size of %zu bytes", max);
+ }
+ d->table->UPB_PRIVATE(size) = new_size;
+ return ret;
+}
+
+static void upb_MtDecoder_AssignOffsets(upb_MtDecoder* d) {
+ upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
+
+ // Compute offsets.
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ item->offset = upb_MtDecoder_Place(d, item->rep);
+ }
+
+ // Assign oneof case offsets. We must do these first, since assigning
+ // actual offsets will overwrite the links of the linked list.
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ if (item->type != kUpb_LayoutItemType_OneofCase) continue;
+ upb_MiniTableField* f = &d->fields[item->field_index];
+ while (true) {
+ f->presence = ~item->offset;
+ if (f->UPB_PRIVATE(offset) == kUpb_LayoutItem_IndexSentinel) break;
+ UPB_ASSERT(f->UPB_PRIVATE(offset) - kOneofBase <
+ d->table->UPB_PRIVATE(field_count));
+ f = &d->fields[f->UPB_PRIVATE(offset) - kOneofBase];
+ }
+ }
+
+ // Assign offsets.
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ upb_MiniTableField* f = &d->fields[item->field_index];
+ switch (item->type) {
+ case kUpb_LayoutItemType_OneofField:
+ while (true) {
+ uint16_t next_offset = f->UPB_PRIVATE(offset);
+ f->UPB_PRIVATE(offset) = item->offset;
+ if (next_offset == kUpb_LayoutItem_IndexSentinel) break;
+ f = &d->fields[next_offset - kOneofBase];
+ }
+ break;
+ case kUpb_LayoutItemType_Field:
+ f->UPB_PRIVATE(offset) = item->offset;
+ break;
+ default:
+ break;
+ }
+ }
+
+ // The fasttable parser (supported on 64-bit only) depends on this being a
+ // multiple of 8 in order to satisfy UPB_MALLOC_ALIGN, which is also 8.
+ //
+ // On 32-bit we could potentially make this smaller, but there is no
+ // compelling reason to optimize this right now.
+ d->table->UPB_PRIVATE(size) = UPB_ALIGN_UP(d->table->UPB_PRIVATE(size), 8);
+}
+
+static void upb_MtDecoder_ValidateEntryField(upb_MtDecoder* d,
+ const upb_MiniTableField* f,
+ uint32_t expected_num) {
+ const char* name = expected_num == 1 ? "key" : "val";
+ const uint32_t f_number = upb_MiniTableField_Number(f);
+ if (f_number != expected_num) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "map %s did not have expected number (%d vs %d)",
+ name, expected_num, f_number);
+ }
+
+ if (!upb_MiniTableField_IsScalar(f)) {
+ upb_MdDecoder_ErrorJmp(
+ &d->base, "map %s cannot be repeated or map, or be in oneof", name);
+ }
+
+ uint32_t not_ok_types;
+ if (expected_num == 1) {
+ not_ok_types = (1 << kUpb_FieldType_Float) | (1 << kUpb_FieldType_Double) |
+ (1 << kUpb_FieldType_Message) | (1 << kUpb_FieldType_Group) |
+ (1 << kUpb_FieldType_Bytes) | (1 << kUpb_FieldType_Enum);
+ } else {
+ not_ok_types = 1 << kUpb_FieldType_Group;
+ }
+
+ if ((1 << upb_MiniTableField_Type(f)) & not_ok_types) {
+ upb_MdDecoder_ErrorJmp(&d->base, "map %s cannot have type %d", name,
+ (int)f->UPB_PRIVATE(descriptortype));
+ }
+}
+
+static void upb_MtDecoder_ParseMap(upb_MtDecoder* d, const char* data,
+ size_t len) {
+ upb_MtDecoder_ParseMessage(d, data, len);
+ upb_MtDecoder_AssignHasbits(d);
+
+ if (UPB_UNLIKELY(d->table->UPB_PRIVATE(field_count) != 2)) {
+ upb_MdDecoder_ErrorJmp(&d->base, "%hu fields in map",
+ d->table->UPB_PRIVATE(field_count));
+ UPB_UNREACHABLE();
+ }
+
+ upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
+ for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
+ if (item->type == kUpb_LayoutItemType_OneofCase) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Map entry cannot have oneof");
+ }
+ }
+
+ upb_MtDecoder_ValidateEntryField(d, &d->table->UPB_PRIVATE(fields)[0], 1);
+ upb_MtDecoder_ValidateEntryField(d, &d->table->UPB_PRIVATE(fields)[1], 2);
+
+ // Map entries have a pre-determined layout, regardless of types.
+ // NOTE: sync with mini_table/message_internal.h.
+ const size_t kv_size = d->platform == kUpb_MiniTablePlatform_32Bit ? 8 : 16;
+ const size_t hasbit_size = 8;
+ d->fields[0].UPB_PRIVATE(offset) = hasbit_size;
+ d->fields[1].UPB_PRIVATE(offset) = hasbit_size + kv_size;
+ d->table->UPB_PRIVATE(size) =
+ UPB_ALIGN_UP(hasbit_size + kv_size + kv_size, 8);
+
+ // Map entries have a special bit set to signal it's a map entry, used in
+ // upb_MiniTable_SetSubMessage() below.
+ d->table->UPB_PRIVATE(ext) |= kUpb_ExtMode_IsMapEntry;
+}
+
+static void upb_MtDecoder_ParseMessageSet(upb_MtDecoder* d, const char* data,
+ size_t len) {
+ if (len > 0) {
+ upb_MdDecoder_ErrorJmp(&d->base, "Invalid message set encode length: %zu",
+ len);
+ }
+
+ upb_MiniTable* ret = d->table;
+ ret->UPB_PRIVATE(size) = 0;
+ ret->UPB_PRIVATE(field_count) = 0;
+ ret->UPB_PRIVATE(ext) = kUpb_ExtMode_IsMessageSet;
+ ret->UPB_PRIVATE(dense_below) = 0;
+ ret->UPB_PRIVATE(table_mask) = -1;
+ ret->UPB_PRIVATE(required_count) = 0;
+}
+
+static upb_MiniTable* upb_MtDecoder_DoBuildMiniTableWithBuf(
+ upb_MtDecoder* decoder, const char* data, size_t len, void** buf,
+ size_t* buf_size) {
+ upb_MdDecoder_CheckOutOfMemory(&decoder->base, decoder->table);
+
+ decoder->table->UPB_PRIVATE(size) = 0;
+ decoder->table->UPB_PRIVATE(field_count) = 0;
+ decoder->table->UPB_PRIVATE(ext) = kUpb_ExtMode_NonExtendable;
+ decoder->table->UPB_PRIVATE(dense_below) = 0;
+ decoder->table->UPB_PRIVATE(table_mask) = -1;
+ decoder->table->UPB_PRIVATE(required_count) = 0;
+
+ // Strip off and verify the version tag.
+ if (!len--) goto done;
+ const char vers = *data++;
+
+ switch (vers) {
+ case kUpb_EncodedVersion_MapV1:
+ upb_MtDecoder_ParseMap(decoder, data, len);
+ break;
+
+ case kUpb_EncodedVersion_MessageV1:
+ upb_MtDecoder_ParseMessage(decoder, data, len);
+ upb_MtDecoder_AssignHasbits(decoder);
+ upb_MtDecoder_SortLayoutItems(decoder);
+ upb_MtDecoder_AssignOffsets(decoder);
+ break;
+
+ case kUpb_EncodedVersion_MessageSetV1:
+ upb_MtDecoder_ParseMessageSet(decoder, data, len);
+ break;
+
+ default:
+ upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid message version: %c",
+ vers);
+ }
+
+done:
+ *buf = decoder->vec.data;
+ *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
+ return decoder->table;
+}
+
+static upb_MiniTable* upb_MtDecoder_BuildMiniTableWithBuf(
+ upb_MtDecoder* const decoder, const char* const data, const size_t len,
+ void** const buf, size_t* const buf_size) {
+ if (UPB_SETJMP(decoder->base.err) != 0) {
+ *buf = decoder->vec.data;
+ *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
+ return NULL;
+ }
+
+ return upb_MtDecoder_DoBuildMiniTableWithBuf(decoder, data, len, buf,
+ buf_size);
+}
+
+upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
+ upb_MiniTablePlatform platform,
+ upb_Arena* arena, void** buf,
+ size_t* buf_size,
+ upb_Status* status) {
+ upb_MtDecoder decoder = {
+ .base = {.status = status},
+ .platform = platform,
+ .vec =
+ {
+ .data = *buf,
+ .capacity = *buf_size / sizeof(*decoder.vec.data),
+ .size = 0,
+ },
+ .arena = arena,
+ .table = upb_Arena_Malloc(arena, sizeof(*decoder.table)),
+ };
+
+ return upb_MtDecoder_BuildMiniTableWithBuf(&decoder, data, len, buf,
+ buf_size);
+}
+
+static const char* upb_MtDecoder_DoBuildMiniTableExtension(
+ upb_MtDecoder* decoder, const char* data, size_t len,
+ upb_MiniTableExtension* ext, const upb_MiniTable* extendee,
+ upb_MiniTableSub sub) {
+ // If the string is non-empty then it must begin with a version tag.
+ if (len) {
+ if (*data != kUpb_EncodedVersion_ExtensionV1) {
+ upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid ext version: %c", *data);
+ }
+ data++;
+ len--;
+ }
+
+ uint16_t count = 0;
+ upb_SubCounts sub_counts = {0, 0};
+ const char* ret = upb_MtDecoder_Parse(decoder, data, len, ext, sizeof(*ext),
+ &count, &sub_counts);
+ if (!ret || count != 1) return NULL;
+
+ upb_MiniTableField* f = &ext->UPB_PRIVATE(field);
+
+ f->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsExtension;
+ f->UPB_PRIVATE(offset) = 0;
+ f->presence = 0;
+
+ if (extendee->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMessageSet) {
+ // Extensions of MessageSet must be messages.
+ if (!upb_MiniTableField_IsSubMessage(f)) return NULL;
+
+ // Extensions of MessageSet must be non-repeating.
+ if (upb_MiniTableField_IsArray(f)) return NULL;
+ }
+
+ ext->UPB_PRIVATE(extendee) = extendee;
+ ext->UPB_PRIVATE(sub) = sub;
+
+ return ret;
+}
+
+static const char* upb_MtDecoder_BuildMiniTableExtension(
+ upb_MtDecoder* const decoder, const char* const data, const size_t len,
+ upb_MiniTableExtension* const ext, const upb_MiniTable* const extendee,
+ const upb_MiniTableSub sub) {
+ if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
+ return upb_MtDecoder_DoBuildMiniTableExtension(decoder, data, len, ext,
+ extendee, sub);
+}
+
+const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
+ upb_MiniTableExtension* ext,
+ const upb_MiniTable* extendee,
+ upb_MiniTableSub sub,
+ upb_MiniTablePlatform platform,
+ upb_Status* status) {
+ upb_MtDecoder decoder = {
+ .base = {.status = status},
+ .arena = NULL,
+ .table = NULL,
+ .platform = platform,
+ };
+
+ return upb_MtDecoder_BuildMiniTableExtension(&decoder, data, len, ext,
+ extendee, sub);
+}
+
+upb_MiniTableExtension* _upb_MiniTableExtension_Build(
+ const char* data, size_t len, const upb_MiniTable* extendee,
+ upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
+ upb_Status* status) {
+ upb_MiniTableExtension* ext =
+ upb_Arena_Malloc(arena, sizeof(upb_MiniTableExtension));
+ if (UPB_UNLIKELY(!ext)) return NULL;
+
+ const char* ptr = _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
+ platform, status);
+ if (UPB_UNLIKELY(!ptr)) return NULL;
+
+ return ext;
+}
+
+upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
+ upb_MiniTablePlatform platform,
+ upb_Arena* arena, upb_Status* status) {
+ void* buf = NULL;
+ size_t size = 0;
+ upb_MiniTable* ret = upb_MiniTable_BuildWithBuf(data, len, platform, arena,
+ &buf, &size, status);
+ free(buf);
+ return ret;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+bool upb_MiniTable_SetSubMessage(upb_MiniTable* table,
+ upb_MiniTableField* field,
+ const upb_MiniTable* sub) {
+ UPB_ASSERT((uintptr_t)table->UPB_PRIVATE(fields) <= (uintptr_t)field &&
+ (uintptr_t)field < (uintptr_t)(table->UPB_PRIVATE(fields) +
+ table->UPB_PRIVATE(field_count)));
+ UPB_ASSERT(sub);
+
+ const bool sub_is_map = sub->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMapEntry;
+
+ switch (field->UPB_PRIVATE(descriptortype)) {
+ case kUpb_FieldType_Message:
+ if (sub_is_map) {
+ const bool table_is_map =
+ table->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMapEntry;
+ if (UPB_UNLIKELY(table_is_map)) return false;
+
+ field->UPB_PRIVATE(mode) =
+ (field->UPB_PRIVATE(mode) & ~kUpb_FieldMode_Mask) |
+ kUpb_FieldMode_Map;
+ }
+ break;
+
+ case kUpb_FieldType_Group:
+ if (UPB_UNLIKELY(sub_is_map)) return false;
+ break;
+
+ default:
+ return false;
+ }
+
+ upb_MiniTableSub* table_sub =
+ (void*)&table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)];
+ // TODO: Add this assert back once YouTube is updated to not call
+ // this function repeatedly.
+ // UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_IsEmpty)(table_sub->submsg));
+ *table_sub = upb_MiniTableSub_FromMessage(sub);
+ return true;
+}
+
+bool upb_MiniTable_SetSubEnum(upb_MiniTable* table, upb_MiniTableField* field,
+ const upb_MiniTableEnum* sub) {
+ UPB_ASSERT((uintptr_t)table->UPB_PRIVATE(fields) <= (uintptr_t)field &&
+ (uintptr_t)field < (uintptr_t)(table->UPB_PRIVATE(fields) +
+ table->UPB_PRIVATE(field_count)));
+ UPB_ASSERT(sub);
+
+ upb_MiniTableSub* table_sub =
+ (void*)&table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)];
+ *table_sub = upb_MiniTableSub_FromEnum(sub);
+ return true;
+}
+
+uint32_t upb_MiniTable_GetSubList(const upb_MiniTable* mt,
+ const upb_MiniTableField** subs) {
+ uint32_t msg_count = 0;
+ uint32_t enum_count = 0;
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
+ *subs = f;
+ ++subs;
+ msg_count++;
+ }
+ }
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_CType(f) == kUpb_CType_Enum) {
+ *subs = f;
+ ++subs;
+ enum_count++;
+ }
+ }
+
+ return (msg_count << 16) | enum_count;
+}
+
+// The list of sub_tables and sub_enums must exactly match the number and order
+// of sub-message fields and sub-enum fields given by upb_MiniTable_GetSubList()
+// above.
+bool upb_MiniTable_Link(upb_MiniTable* mt, const upb_MiniTable** sub_tables,
+ size_t sub_table_count,
+ const upb_MiniTableEnum** sub_enums,
+ size_t sub_enum_count) {
+ uint32_t msg_count = 0;
+ uint32_t enum_count = 0;
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ upb_MiniTableField* f = (upb_MiniTableField*)&mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
+ const upb_MiniTable* sub = sub_tables[msg_count++];
+ if (msg_count > sub_table_count) return false;
+ if (sub != NULL) {
+ if (!upb_MiniTable_SetSubMessage(mt, f, sub)) return false;
+ }
+ }
+ }
+
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ upb_MiniTableField* f = (upb_MiniTableField*)&mt->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_IsClosedEnum(f)) {
+ const upb_MiniTableEnum* sub = sub_enums[enum_count++];
+ if (enum_count > sub_enum_count) return false;
+ if (sub != NULL) {
+ if (!upb_MiniTable_SetSubEnum(mt, f, sub)) return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+#define EXTREG_KEY_SIZE (sizeof(upb_MiniTable*) + sizeof(uint32_t))
+
+struct upb_ExtensionRegistry {
+ upb_Arena* arena;
+ upb_strtable exts; // Key is upb_MiniTable* concatenated with fieldnum.
+};
+
+static void extreg_key(char* buf, const upb_MiniTable* l, uint32_t fieldnum) {
+ memcpy(buf, &l, sizeof(l));
+ memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum));
+}
+
+upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena) {
+ upb_ExtensionRegistry* r = upb_Arena_Malloc(arena, sizeof(*r));
+ if (!r) return NULL;
+ r->arena = arena;
+ if (!upb_strtable_init(&r->exts, 8, arena)) return NULL;
+ return r;
+}
+
+UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension* e) {
+ char buf[EXTREG_KEY_SIZE];
+ extreg_key(buf, e->UPB_PRIVATE(extendee), upb_MiniTableExtension_Number(e));
+ if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
+ return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
+ upb_value_constptr(e), r->arena);
+}
+
+bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension** e,
+ size_t count) {
+ const upb_MiniTableExtension** start = e;
+ const upb_MiniTableExtension** end = UPB_PTRADD(e, count);
+ for (; e < end; e++) {
+ if (!upb_ExtensionRegistry_Add(r, *e)) goto failure;
+ }
+ return true;
+
+failure:
+ // Back out the entries previously added.
+ for (end = e, e = start; e < end; e++) {
+ const upb_MiniTableExtension* ext = *e;
+ char buf[EXTREG_KEY_SIZE];
+ extreg_key(buf, ext->UPB_PRIVATE(extendee),
+ upb_MiniTableExtension_Number(ext));
+ upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
+ }
+ return false;
+}
+
+const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
+ const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num) {
+ char buf[EXTREG_KEY_SIZE];
+ upb_value v;
+ extreg_key(buf, t, num);
+ if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) {
+ return upb_value_getconstptr(v);
+ } else {
+ return NULL;
+ }
+}
+
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
+ const upb_MiniTable* m, uint32_t number) {
+ const size_t i = ((size_t)number) - 1; // 0 wraps to SIZE_MAX
+
+ // Ideal case: index into dense fields
+ if (i < m->UPB_PRIVATE(dense_below)) {
+ UPB_ASSERT(m->UPB_PRIVATE(fields)[i].UPB_PRIVATE(number) == number);
+ return &m->UPB_PRIVATE(fields)[i];
+ }
+
+ // Slow case: binary search
+ int lo = m->UPB_PRIVATE(dense_below);
+ int hi = m->UPB_PRIVATE(field_count) - 1;
+ while (lo <= hi) {
+ int mid = (lo + hi) / 2;
+ uint32_t num = m->UPB_PRIVATE(fields)[mid].UPB_PRIVATE(number);
+ if (num < number) {
+ lo = mid + 1;
+ continue;
+ }
+ if (num > number) {
+ hi = mid - 1;
+ continue;
+ }
+ return &m->UPB_PRIVATE(fields)[mid];
+ }
+ return NULL;
+}
+
+const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
+ const upb_MiniTableField* f) {
+ if (UPB_UNLIKELY(!upb_MiniTableField_IsInOneof(f))) {
+ return NULL;
+ }
+ const upb_MiniTableField* ptr = &m->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* end =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ for (; ptr < end; ptr++) {
+ if (ptr->presence == (*f).presence) {
+ return ptr;
+ }
+ }
+ return NULL;
+}
+
+bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
+ const upb_MiniTableField** f) {
+ const upb_MiniTableField* ptr = *f;
+ const upb_MiniTableField* end =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ while (++ptr < end) {
+ if (ptr->presence == (*f)->presence) {
+ *f = ptr;
+ return true;
+ }
+ }
+ return false;
+}
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+// Checks if source and target mini table fields are identical.
+//
+// If the field is a sub message and sub messages are identical we record
+// the association in table.
+//
+// Hashing the source sub message mini table and it's equivalent in the table
+// stops recursing when a cycle is detected and instead just checks if the
+// destination table is equal.
+static upb_MiniTableEquals_Status upb_deep_check(const upb_MiniTable* src,
+ const upb_MiniTable* dst,
+ upb_inttable* table,
+ upb_Arena** arena) {
+ if (src->UPB_PRIVATE(field_count) != dst->UPB_PRIVATE(field_count))
+ return kUpb_MiniTableEquals_NotEqual;
+ bool marked_src = false;
+ for (int i = 0; i < upb_MiniTable_FieldCount(src); i++) {
+ const upb_MiniTableField* src_field = upb_MiniTable_GetFieldByIndex(src, i);
+ const upb_MiniTableField* dst_field = upb_MiniTable_FindFieldByNumber(
+ dst, upb_MiniTableField_Number(src_field));
+
+ if (upb_MiniTableField_CType(src_field) !=
+ upb_MiniTableField_CType(dst_field))
+ return false;
+ if (src_field->UPB_PRIVATE(mode) != dst_field->UPB_PRIVATE(mode))
+ return false;
+ if (src_field->UPB_PRIVATE(offset) != dst_field->UPB_PRIVATE(offset))
+ return false;
+ if (src_field->presence != dst_field->presence) return false;
+ if (src_field->UPB_PRIVATE(submsg_index) !=
+ dst_field->UPB_PRIVATE(submsg_index))
+ return kUpb_MiniTableEquals_NotEqual;
+
+ // Go no further if we are only checking for compatibility.
+ if (!table) continue;
+
+ if (upb_MiniTableField_CType(src_field) == kUpb_CType_Message) {
+ if (!*arena) {
+ *arena = upb_Arena_New();
+ if (!upb_inttable_init(table, *arena)) {
+ return kUpb_MiniTableEquals_OutOfMemory;
+ }
+ }
+ if (!marked_src) {
+ marked_src = true;
+ upb_value val;
+ val.val = (uint64_t)dst;
+ if (!upb_inttable_insert(table, (uintptr_t)src, val, *arena)) {
+ return kUpb_MiniTableEquals_OutOfMemory;
+ }
+ }
+ const upb_MiniTable* sub_src =
+ upb_MiniTable_GetSubMessageTable(src, src_field);
+ const upb_MiniTable* sub_dst =
+ upb_MiniTable_GetSubMessageTable(dst, dst_field);
+ if (sub_src != NULL) {
+ upb_value cmp;
+ if (upb_inttable_lookup(table, (uintptr_t)sub_src, &cmp)) {
+ // We already compared this src before. Check if same dst.
+ if (cmp.val != (uint64_t)sub_dst) {
+ return kUpb_MiniTableEquals_NotEqual;
+ }
+ } else {
+ // Recurse if not already visited.
+ upb_MiniTableEquals_Status s =
+ upb_deep_check(sub_src, sub_dst, table, arena);
+ if (s != kUpb_MiniTableEquals_Equal) {
+ return s;
+ }
+ }
+ }
+ }
+ }
+ return kUpb_MiniTableEquals_Equal;
+}
+
+bool upb_MiniTable_Compatible(const upb_MiniTable* src,
+ const upb_MiniTable* dst) {
+ return upb_deep_check(src, dst, NULL, NULL);
+}
+
+upb_MiniTableEquals_Status upb_MiniTable_Equals(const upb_MiniTable* src,
+ const upb_MiniTable* dst) {
+ // Arena allocated on demand for hash table.
+ upb_Arena* arena = NULL;
+ // Table to keep track of visited mini tables to guard against cycles.
+ upb_inttable table;
+ upb_MiniTableEquals_Status status = upb_deep_check(src, dst, &table, &arena);
+ if (arena) {
+ upb_Arena_Free(arena);
+ }
+ return status;
+}
+
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+// A few fake field types for our tables.
+enum {
+ kUpb_FakeFieldType_FieldNotFound = 0,
+ kUpb_FakeFieldType_MessageSetItem = 19,
+};
+
+// DecodeOp: an action to be performed for a wire-type/field-type combination.
+enum {
+ // Special ops: we don't write data to regular fields for these.
+ kUpb_DecodeOp_UnknownField = -1,
+ kUpb_DecodeOp_MessageSetItem = -2,
+
+ // Scalar-only ops.
+ kUpb_DecodeOp_Scalar1Byte = 0,
+ kUpb_DecodeOp_Scalar4Byte = 2,
+ kUpb_DecodeOp_Scalar8Byte = 3,
+ kUpb_DecodeOp_Enum = 1,
+
+ // Scalar/repeated ops.
+ kUpb_DecodeOp_String = 4,
+ kUpb_DecodeOp_Bytes = 5,
+ kUpb_DecodeOp_SubMessage = 6,
+
+ // Repeated-only ops (also see macros below).
+ kUpb_DecodeOp_PackedEnum = 13,
+};
+
+// For packed fields it is helpful to be able to recover the lg2 of the data
+// size from the op.
+#define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
+#define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
+
+typedef union {
+ bool bool_val;
+ uint32_t uint32_val;
+ uint64_t uint64_val;
+ uint32_t size;
+} wireval;
+
+// Ideally these two functions should take the owning MiniTable pointer as a
+// first argument, then we could just put them in mini_table/message.h as nice
+// clean getters. But we don't have that so instead we gotta write these
+// Frankenfunctions that take an array of subtables.
+// TODO: Move these to mini_table/ anyway since there are other places
+// that could use them.
+
+// Returns the MiniTable corresponding to a given MiniTableField
+// from an array of MiniTableSubs.
+static const upb_MiniTable* _upb_MiniTableSubs_MessageByField(
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ return upb_MiniTableSub_Message(subs[field->UPB_PRIVATE(submsg_index)]);
+}
+
+// Returns the MiniTableEnum corresponding to a given MiniTableField
+// from an array of MiniTableSub.
+static const upb_MiniTableEnum* _upb_MiniTableSubs_EnumByField(
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ return upb_MiniTableSub_Enum(subs[field->UPB_PRIVATE(submsg_index)]);
+}
+
+static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTable* layout);
+
+UPB_NORETURN static void* _upb_Decoder_ErrorJmp(upb_Decoder* d,
+ upb_DecodeStatus status) {
+ UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
+ d->status = status;
+ UPB_LONGJMP(d->err, 1);
+}
+
+const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status) {
+ UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
+ d->status = status;
+ UPB_LONGJMP(d->err, 1);
+ return NULL;
+}
+
+static void _upb_Decoder_VerifyUtf8(upb_Decoder* d, const char* buf, int len) {
+ if (!_upb_Decoder_VerifyUtf8Inline(buf, len)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
+ }
+}
+
+static bool _upb_Decoder_Reserve(upb_Decoder* d, upb_Array* arr, size_t elem) {
+ bool need_realloc =
+ arr->UPB_PRIVATE(capacity) - arr->UPB_PRIVATE(size) < elem;
+ if (need_realloc && !UPB_PRIVATE(_upb_Array_Realloc)(
+ arr, arr->UPB_PRIVATE(size) + elem, &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ return need_realloc;
+}
+
+typedef struct {
+ const char* ptr;
+ uint64_t val;
+} _upb_DecodeLongVarintReturn;
+
+UPB_NOINLINE
+static _upb_DecodeLongVarintReturn _upb_Decoder_DecodeLongVarint(
+ const char* ptr, uint64_t val) {
+ _upb_DecodeLongVarintReturn ret = {NULL, 0};
+ uint64_t byte;
+ int i;
+ for (i = 1; i < 10; i++) {
+ byte = (uint8_t)ptr[i];
+ val += (byte - 1) << (i * 7);
+ if (!(byte & 0x80)) {
+ ret.ptr = ptr + i + 1;
+ ret.val = val;
+ return ret;
+ }
+ }
+ return ret;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeVarint(upb_Decoder* d, const char* ptr,
+ uint64_t* val) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = byte;
+ return ptr + 1;
+ } else {
+ _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
+ if (!res.ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ *val = res.val;
+ return res.ptr;
+ }
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeTag(upb_Decoder* d, const char* ptr,
+ uint32_t* val) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = byte;
+ return ptr + 1;
+ } else {
+ const char* start = ptr;
+ _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
+ if (!res.ptr || res.ptr - start > 5 || res.val > UINT32_MAX) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ *val = res.val;
+ return res.ptr;
+ }
+}
+
+UPB_FORCEINLINE
+static const char* upb_Decoder_DecodeSize(upb_Decoder* d, const char* ptr,
+ uint32_t* size) {
+ uint64_t size64;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &size64);
+ if (size64 >= INT32_MAX ||
+ !upb_EpsCopyInputStream_CheckSize(&d->input, ptr, (int)size64)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ *size = size64;
+ return ptr;
+}
+
+static void _upb_Decoder_MungeInt32(wireval* val) {
+ if (!upb_IsLittleEndian()) {
+ /* The next stage will memcpy(dst, &val, 4) */
+ val->uint32_val = val->uint64_val;
+ }
+}
+
+static void _upb_Decoder_Munge(int type, wireval* val) {
+ switch (type) {
+ case kUpb_FieldType_Bool:
+ val->bool_val = val->uint64_val != 0;
+ break;
+ case kUpb_FieldType_SInt32: {
+ uint32_t n = val->uint64_val;
+ val->uint32_val = (n >> 1) ^ -(int32_t)(n & 1);
+ break;
+ }
+ case kUpb_FieldType_SInt64: {
+ uint64_t n = val->uint64_val;
+ val->uint64_val = (n >> 1) ^ -(int64_t)(n & 1);
+ break;
+ }
+ case kUpb_FieldType_Int32:
+ case kUpb_FieldType_UInt32:
+ case kUpb_FieldType_Enum:
+ _upb_Decoder_MungeInt32(val);
+ break;
+ }
+}
+
+static upb_Message* _upb_Decoder_NewSubMessage(upb_Decoder* d,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ upb_TaggedMessagePtr* target) {
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ upb_Message* msg = _upb_Message_New(subl, &d->arena);
+ if (!msg) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+
+ // Extensions should not be unlinked. A message extension should not be
+ // registered until its sub-message type is available to be linked.
+ bool is_empty = UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl);
+ bool is_extension = field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension;
+ UPB_ASSERT(!(is_empty && is_extension));
+
+ if (is_empty && !(d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_UnlinkedSubMessage);
+ }
+
+ upb_TaggedMessagePtr tagged =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(msg, is_empty);
+ memcpy(target, &tagged, sizeof(tagged));
+ return msg;
+}
+
+static upb_Message* _upb_Decoder_ReuseSubMessage(
+ upb_Decoder* d, const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
+ upb_TaggedMessagePtr tagged = *target;
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ if (!upb_TaggedMessagePtr_IsEmpty(tagged) ||
+ UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl)) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
+ }
+
+ // We found an empty message from a previous parse that was performed before
+ // this field was linked. But it is linked now, so we want to allocate a new
+ // message of the correct type and promote data into it before continuing.
+ upb_Message* existing =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetEmptyMessage)(tagged);
+ upb_Message* promoted = _upb_Decoder_NewSubMessage(d, subs, field, target);
+ size_t size;
+ const char* unknown = upb_Message_GetUnknown(existing, &size);
+ upb_DecodeStatus status = upb_Decode(unknown, size, promoted, subl, d->extreg,
+ d->options, &d->arena);
+ if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
+ return promoted;
+}
+
+static const char* _upb_Decoder_ReadString(upb_Decoder* d, const char* ptr,
+ int size, upb_StringView* str) {
+ const char* str_ptr = ptr;
+ ptr = upb_EpsCopyInputStream_ReadString(&d->input, &str_ptr, size, &d->arena);
+ if (!ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ str->data = str_ptr;
+ str->size = size;
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_RecurseSubMessage(upb_Decoder* d,
+ const char* ptr,
+ upb_Message* submsg,
+ const upb_MiniTable* subl,
+ uint32_t expected_end_group) {
+ if (--d->depth < 0) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded);
+ }
+ ptr = _upb_Decoder_DecodeMessage(d, ptr, submsg, subl);
+ d->depth++;
+ if (d->end_group != expected_end_group) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeSubMessage(
+ upb_Decoder* d, const char* ptr, upb_Message* submsg,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field, int size) {
+ int saved_delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, DECODE_NOGROUP);
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_delta);
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeGroup(upb_Decoder* d, const char* ptr,
+ upb_Message* submsg,
+ const upb_MiniTable* subl,
+ uint32_t number) {
+ if (_upb_Decoder_IsDone(d, &ptr)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, number);
+ d->end_group = DECODE_NOGROUP;
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeUnknownGroup(upb_Decoder* d,
+ const char* ptr,
+ uint32_t number) {
+ return _upb_Decoder_DecodeGroup(d, ptr, NULL, NULL, number);
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeKnownGroup(
+ upb_Decoder* d, const char* ptr, upb_Message* submsg,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
+ UPB_ASSERT(subl);
+ return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl,
+ field->UPB_PRIVATE(number));
+}
+
+static char* upb_Decoder_EncodeVarint32(uint32_t val, char* ptr) {
+ do {
+ uint8_t byte = val & 0x7fU;
+ val >>= 7;
+ if (val) byte |= 0x80U;
+ *(ptr++) = byte;
+ } while (val);
+ return ptr;
+}
+
+static void _upb_Decoder_AddUnknownVarints(upb_Decoder* d, upb_Message* msg,
+ uint32_t val1, uint32_t val2) {
+ char buf[20];
+ char* end = buf;
+ end = upb_Decoder_EncodeVarint32(val1, end);
+ end = upb_Decoder_EncodeVarint32(val2, end);
+
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, end - buf, &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+}
+
+UPB_FORCEINLINE
+static bool _upb_Decoder_CheckEnum(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, const upb_MiniTableEnum* e,
+ const upb_MiniTableField* field,
+ wireval* val) {
+ const uint32_t v = val->uint32_val;
+
+ if (UPB_LIKELY(upb_MiniTableEnum_CheckValue(e, v))) return true;
+
+ // Unrecognized enum goes into unknown fields.
+ // For packed fields the tag could be arbitrarily far in the past,
+ // so we just re-encode the tag and value here.
+ const uint32_t tag =
+ ((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Varint;
+ upb_Message* unknown_msg =
+ field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension ? d->unknown_msg
+ : msg;
+ _upb_Decoder_AddUnknownVarints(d, unknown_msg, tag, v);
+ return false;
+}
+
+UPB_NOINLINE
+static const char* _upb_Decoder_DecodeEnumArray(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ upb_Array* arr,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ wireval* val) {
+ const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
+ if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, val)) return ptr;
+ void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ arr->UPB_PRIVATE(size)++;
+ memcpy(mem, val, 4);
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeFixedPacked(
+ upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
+ const upb_MiniTableField* field, int lg2) {
+ int mask = (1 << lg2) - 1;
+ size_t count = val->size >> lg2;
+ if ((val->size & mask) != 0) {
+ // Length isn't a round multiple of elem size.
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+ _upb_Decoder_Reserve(d, arr, count);
+ void* mem =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ arr->UPB_PRIVATE(size) += count;
+ // Note: if/when the decoder supports multi-buffer input, we will need to
+ // handle buffer seams here.
+ if (upb_IsLittleEndian()) {
+ ptr = upb_EpsCopyInputStream_Copy(&d->input, ptr, mem, val->size);
+ } else {
+ int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
+ char* dst = mem;
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ if (lg2 == 2) {
+ ptr = upb_WireReader_ReadFixed32(ptr, dst);
+ dst += 4;
+ } else {
+ UPB_ASSERT(lg2 == 3);
+ ptr = upb_WireReader_ReadFixed64(ptr, dst);
+ dst += 8;
+ }
+ }
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
+ }
+
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeVarintPacked(
+ upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
+ const upb_MiniTableField* field, int lg2) {
+ int scale = 1 << lg2;
+ int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
+ char* out =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ wireval elem;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
+ _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), &elem);
+ if (_upb_Decoder_Reserve(d, arr, 1)) {
+ out =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ }
+ arr->UPB_PRIVATE(size)++;
+ memcpy(out, &elem, scale);
+ out += scale;
+ }
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
+ return ptr;
+}
+
+UPB_NOINLINE
+static const char* _upb_Decoder_DecodeEnumPacked(
+ upb_Decoder* d, const char* ptr, upb_Message* msg, upb_Array* arr,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field,
+ wireval* val) {
+ const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
+ int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
+ char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ wireval elem;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
+ _upb_Decoder_MungeInt32(&elem);
+ if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, &elem)) {
+ continue;
+ }
+ if (_upb_Decoder_Reserve(d, arr, 1)) {
+ out = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ }
+ arr->UPB_PRIVATE(size)++;
+ memcpy(out, &elem, 4);
+ out += 4;
+ }
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
+ return ptr;
+}
+
+upb_Array* _upb_Decoder_CreateArray(upb_Decoder* d,
+ const upb_MiniTableField* field) {
+ const upb_FieldType field_type = field->UPB_PRIVATE(descriptortype);
+ const size_t lg2 = UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
+ upb_Array* ret = UPB_PRIVATE(_upb_Array_New)(&d->arena, 4, lg2);
+ if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ return ret;
+}
+
+static const char* _upb_Decoder_DecodeToArray(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ wireval* val, int op) {
+ upb_Array** arrp = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
+ upb_Array* arr = *arrp;
+ void* mem;
+
+ if (arr) {
+ _upb_Decoder_Reserve(d, arr, 1);
+ } else {
+ arr = _upb_Decoder_CreateArray(d, field);
+ *arrp = arr;
+ }
+
+ switch (op) {
+ case kUpb_DecodeOp_Scalar1Byte:
+ case kUpb_DecodeOp_Scalar4Byte:
+ case kUpb_DecodeOp_Scalar8Byte:
+ /* Append scalar value. */
+ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << op, void);
+ arr->UPB_PRIVATE(size)++;
+ memcpy(mem, val, 1 << op);
+ return ptr;
+ case kUpb_DecodeOp_String:
+ _upb_Decoder_VerifyUtf8(d, ptr, val->size);
+ /* Fallthrough. */
+ case kUpb_DecodeOp_Bytes: {
+ /* Append bytes. */
+ upb_StringView* str =
+ (upb_StringView*)_upb_array_ptr(arr) + arr->UPB_PRIVATE(size);
+ arr->UPB_PRIVATE(size)++;
+ return _upb_Decoder_ReadString(d, ptr, val->size, str);
+ }
+ case kUpb_DecodeOp_SubMessage: {
+ /* Append submessage / group. */
+ upb_TaggedMessagePtr* target = UPB_PTR_AT(
+ _upb_array_ptr(arr), arr->UPB_PRIVATE(size) * sizeof(void*),
+ upb_TaggedMessagePtr);
+ upb_Message* submsg = _upb_Decoder_NewSubMessage(d, subs, field, target);
+ arr->UPB_PRIVATE(size)++;
+ if (UPB_UNLIKELY(field->UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Group)) {
+ return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
+ } else {
+ return _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
+ val->size);
+ }
+ }
+ case OP_FIXPCK_LG2(2):
+ case OP_FIXPCK_LG2(3):
+ return _upb_Decoder_DecodeFixedPacked(d, ptr, arr, val, field,
+ op - OP_FIXPCK_LG2(0));
+ case OP_VARPCK_LG2(0):
+ case OP_VARPCK_LG2(2):
+ case OP_VARPCK_LG2(3):
+ return _upb_Decoder_DecodeVarintPacked(d, ptr, arr, val, field,
+ op - OP_VARPCK_LG2(0));
+ case kUpb_DecodeOp_Enum:
+ return _upb_Decoder_DecodeEnumArray(d, ptr, msg, arr, subs, field, val);
+ case kUpb_DecodeOp_PackedEnum:
+ return _upb_Decoder_DecodeEnumPacked(d, ptr, msg, arr, subs, field, val);
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+upb_Map* _upb_Decoder_CreateMap(upb_Decoder* d, const upb_MiniTable* entry) {
+ /* Maps descriptor type -> upb map size. */
+ static const uint8_t kSizeInMap[] = {
+ [0] = -1, // invalid descriptor type */
+ [kUpb_FieldType_Double] = 8,
+ [kUpb_FieldType_Float] = 4,
+ [kUpb_FieldType_Int64] = 8,
+ [kUpb_FieldType_UInt64] = 8,
+ [kUpb_FieldType_Int32] = 4,
+ [kUpb_FieldType_Fixed64] = 8,
+ [kUpb_FieldType_Fixed32] = 4,
+ [kUpb_FieldType_Bool] = 1,
+ [kUpb_FieldType_String] = UPB_MAPTYPE_STRING,
+ [kUpb_FieldType_Group] = sizeof(void*),
+ [kUpb_FieldType_Message] = sizeof(void*),
+ [kUpb_FieldType_Bytes] = UPB_MAPTYPE_STRING,
+ [kUpb_FieldType_UInt32] = 4,
+ [kUpb_FieldType_Enum] = 4,
+ [kUpb_FieldType_SFixed32] = 4,
+ [kUpb_FieldType_SFixed64] = 8,
+ [kUpb_FieldType_SInt32] = 4,
+ [kUpb_FieldType_SInt64] = 8,
+ };
+
+ const upb_MiniTableField* key_field = &entry->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* val_field = &entry->UPB_PRIVATE(fields)[1];
+ char key_size = kSizeInMap[key_field->UPB_PRIVATE(descriptortype)];
+ char val_size = kSizeInMap[val_field->UPB_PRIVATE(descriptortype)];
+ UPB_ASSERT(key_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntryData, k));
+ UPB_ASSERT(val_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntryData, v));
+ upb_Map* ret = _upb_Map_New(&d->arena, key_size, val_size);
+ if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ return ret;
+}
+
+static const char* _upb_Decoder_DecodeToMap(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field,
+ wireval* val) {
+ upb_Map** map_p = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), upb_Map*);
+ upb_Map* map = *map_p;
+ upb_MapEntry ent;
+ UPB_ASSERT(upb_MiniTableField_Type(field) == kUpb_FieldType_Message);
+ const upb_MiniTable* entry = _upb_MiniTableSubs_MessageByField(subs, field);
+
+ UPB_ASSERT(entry);
+ UPB_ASSERT(entry->UPB_PRIVATE(field_count) == 2);
+ UPB_ASSERT(upb_MiniTableField_IsScalar(&entry->UPB_PRIVATE(fields)[0]));
+ UPB_ASSERT(upb_MiniTableField_IsScalar(&entry->UPB_PRIVATE(fields)[1]));
+
+ if (!map) {
+ map = _upb_Decoder_CreateMap(d, entry);
+ *map_p = map;
+ }
+
+ // Parse map entry.
+ memset(&ent, 0, sizeof(ent));
+
+ if (entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Message ||
+ entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Group) {
+ // Create proactively to handle the case where it doesn't appear.
+ upb_TaggedMessagePtr msg;
+ _upb_Decoder_NewSubMessage(d, entry->UPB_PRIVATE(subs),
+ &entry->UPB_PRIVATE(fields)[1], &msg);
+ ent.data.v.val = upb_value_uintptr(msg);
+ }
+
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, (upb_Message*)&ent.data, subs,
+ field, val->size);
+ // check if ent had any unknown fields
+ size_t size;
+ upb_Message_GetUnknown((upb_Message*)&ent.data, &size);
+ if (size != 0) {
+ char* buf;
+ size_t size;
+ uint32_t tag =
+ ((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Delimited;
+ upb_EncodeStatus status =
+ upb_Encode((upb_Message*)&ent.data, entry, 0, &d->arena, &buf, &size);
+ if (status != kUpb_EncodeStatus_Ok) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ _upb_Decoder_AddUnknownVarints(d, msg, tag, size);
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, size, &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ } else {
+ if (_upb_Map_Insert(map, &ent.data.k, map->key_size, &ent.data.v,
+ map->val_size,
+ &d->arena) == kUpb_MapInsertStatus_OutOfMemory) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ }
+ return ptr;
+}
+
+static const char* _upb_Decoder_DecodeToSubMessage(
+ upb_Decoder* d, const char* ptr, upb_Message* msg,
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field, wireval* val,
+ int op) {
+ void* mem = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
+ int type = field->UPB_PRIVATE(descriptortype);
+
+ if (UPB_UNLIKELY(op == kUpb_DecodeOp_Enum) &&
+ !_upb_Decoder_CheckEnum(d, ptr, msg,
+ _upb_MiniTableSubs_EnumByField(subs, field),
+ field, val)) {
+ return ptr;
+ }
+
+ // Set presence if necessary.
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(field)) {
+ UPB_PRIVATE(_upb_Message_SetHasbit)(msg, field);
+ } else if (UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(field)) {
+ // Oneof case
+ uint32_t* oneof_case = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, field);
+ if (op == kUpb_DecodeOp_SubMessage &&
+ *oneof_case != field->UPB_PRIVATE(number)) {
+ memset(mem, 0, sizeof(void*));
+ }
+ *oneof_case = field->UPB_PRIVATE(number);
+ }
+
+ // Store into message.
+ switch (op) {
+ case kUpb_DecodeOp_SubMessage: {
+ upb_TaggedMessagePtr* submsgp = mem;
+ upb_Message* submsg;
+ if (*submsgp) {
+ submsg = _upb_Decoder_ReuseSubMessage(d, subs, field, submsgp);
+ } else {
+ submsg = _upb_Decoder_NewSubMessage(d, subs, field, submsgp);
+ }
+ if (UPB_UNLIKELY(type == kUpb_FieldType_Group)) {
+ ptr = _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
+ } else {
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
+ val->size);
+ }
+ break;
+ }
+ case kUpb_DecodeOp_String:
+ _upb_Decoder_VerifyUtf8(d, ptr, val->size);
+ /* Fallthrough. */
+ case kUpb_DecodeOp_Bytes:
+ return _upb_Decoder_ReadString(d, ptr, val->size, mem);
+ case kUpb_DecodeOp_Scalar8Byte:
+ memcpy(mem, val, 8);
+ break;
+ case kUpb_DecodeOp_Enum:
+ case kUpb_DecodeOp_Scalar4Byte:
+ memcpy(mem, val, 4);
+ break;
+ case kUpb_DecodeOp_Scalar1Byte:
+ memcpy(mem, val, 1);
+ break;
+ default:
+ UPB_UNREACHABLE();
+ }
+
+ return ptr;
+}
+
+UPB_NOINLINE
+const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
+ const upb_Message* msg,
+ const upb_MiniTable* m) {
+ UPB_ASSERT(m->UPB_PRIVATE(required_count));
+ if (UPB_LIKELY((d->options & kUpb_DecodeOption_CheckRequired) == 0)) {
+ return ptr;
+ }
+ uint64_t msg_head;
+ memcpy(&msg_head, msg, 8);
+ msg_head = upb_BigEndian64(msg_head);
+ if (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~msg_head) {
+ d->missing_required = true;
+ }
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static bool _upb_Decoder_TryFastDispatch(upb_Decoder* d, const char** ptr,
+ upb_Message* msg,
+ const upb_MiniTable* m) {
+#if UPB_FASTTABLE
+ if (m && m->UPB_PRIVATE(table_mask) != (unsigned char)-1) {
+ uint16_t tag = _upb_FastDecoder_LoadTag(*ptr);
+ intptr_t table = decode_totable(m);
+ *ptr = _upb_FastDecoder_TagDispatch(d, *ptr, msg, table, 0, tag);
+ return true;
+ }
+#endif
+ return false;
+}
+
+static const char* upb_Decoder_SkipField(upb_Decoder* d, const char* ptr,
+ uint32_t tag) {
+ int field_number = tag >> 3;
+ int wire_type = tag & 7;
+ switch (wire_type) {
+ case kUpb_WireType_Varint: {
+ uint64_t val;
+ return _upb_Decoder_DecodeVarint(d, ptr, &val);
+ }
+ case kUpb_WireType_64Bit:
+ return ptr + 8;
+ case kUpb_WireType_32Bit:
+ return ptr + 4;
+ case kUpb_WireType_Delimited: {
+ uint32_t size;
+ ptr = upb_Decoder_DecodeSize(d, ptr, &size);
+ return ptr + size;
+ }
+ case kUpb_WireType_StartGroup:
+ return _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
+ default:
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+ }
+}
+
+enum {
+ kStartItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_StartGroup),
+ kEndItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_EndGroup),
+ kTypeIdTag = ((kUpb_MsgSet_TypeId << 3) | kUpb_WireType_Varint),
+ kMessageTag = ((kUpb_MsgSet_Message << 3) | kUpb_WireType_Delimited),
+};
+
+static void upb_Decoder_AddKnownMessageSetItem(
+ upb_Decoder* d, upb_Message* msg, const upb_MiniTableExtension* item_mt,
+ const char* data, uint32_t size) {
+ upb_Extension* ext =
+ _upb_Message_GetOrCreateExtension(msg, item_mt, &d->arena);
+ if (UPB_UNLIKELY(!ext)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ upb_Message* submsg = _upb_Decoder_NewSubMessage(
+ d, &ext->ext->UPB_PRIVATE(sub), upb_MiniTableExtension_AsField(ext->ext),
+ (upb_TaggedMessagePtr*)&ext->data);
+ upb_DecodeStatus status = upb_Decode(
+ data, size, submsg, upb_MiniTableExtension_GetSubMessage(item_mt),
+ d->extreg, d->options, &d->arena);
+ if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
+}
+
+static void upb_Decoder_AddUnknownMessageSetItem(upb_Decoder* d,
+ upb_Message* msg,
+ uint32_t type_id,
+ const char* message_data,
+ uint32_t message_size) {
+ char buf[60];
+ char* ptr = buf;
+ ptr = upb_Decoder_EncodeVarint32(kStartItemTag, ptr);
+ ptr = upb_Decoder_EncodeVarint32(kTypeIdTag, ptr);
+ ptr = upb_Decoder_EncodeVarint32(type_id, ptr);
+ ptr = upb_Decoder_EncodeVarint32(kMessageTag, ptr);
+ ptr = upb_Decoder_EncodeVarint32(message_size, ptr);
+ char* split = ptr;
+
+ ptr = upb_Decoder_EncodeVarint32(kEndItemTag, ptr);
+ char* end = ptr;
+
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, split - buf, &d->arena) ||
+ !UPB_PRIVATE(_upb_Message_AddUnknown)(msg, message_data, message_size,
+ &d->arena) ||
+ !UPB_PRIVATE(_upb_Message_AddUnknown)(msg, split, end - split,
+ &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+}
+
+static void upb_Decoder_AddMessageSetItem(upb_Decoder* d, upb_Message* msg,
+ const upb_MiniTable* t,
+ uint32_t type_id, const char* data,
+ uint32_t size) {
+ const upb_MiniTableExtension* item_mt =
+ upb_ExtensionRegistry_Lookup(d->extreg, t, type_id);
+ if (item_mt) {
+ upb_Decoder_AddKnownMessageSetItem(d, msg, item_mt, data, size);
+ } else {
+ upb_Decoder_AddUnknownMessageSetItem(d, msg, type_id, data, size);
+ }
+}
+
+static const char* upb_Decoder_DecodeMessageSetItem(
+ upb_Decoder* d, const char* ptr, upb_Message* msg,
+ const upb_MiniTable* layout) {
+ uint32_t type_id = 0;
+ upb_StringView preserved = {NULL, 0};
+ typedef enum {
+ kUpb_HaveId = 1 << 0,
+ kUpb_HavePayload = 1 << 1,
+ } StateMask;
+ StateMask state_mask = 0;
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ uint32_t tag;
+ ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
+ switch (tag) {
+ case kEndItemTag:
+ return ptr;
+ case kTypeIdTag: {
+ uint64_t tmp;
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &tmp);
+ if (state_mask & kUpb_HaveId) break; // Ignore dup.
+ state_mask |= kUpb_HaveId;
+ type_id = tmp;
+ if (state_mask & kUpb_HavePayload) {
+ upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, preserved.data,
+ preserved.size);
+ }
+ break;
+ }
+ case kMessageTag: {
+ uint32_t size;
+ ptr = upb_Decoder_DecodeSize(d, ptr, &size);
+ const char* data = ptr;
+ ptr += size;
+ if (state_mask & kUpb_HavePayload) break; // Ignore dup.
+ state_mask |= kUpb_HavePayload;
+ if (state_mask & kUpb_HaveId) {
+ upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, data, size);
+ } else {
+ // Out of order, we must preserve the payload.
+ preserved.data = data;
+ preserved.size = size;
+ }
+ break;
+ }
+ default:
+ // We do not preserve unexpected fields inside a message set item.
+ ptr = upb_Decoder_SkipField(d, ptr, tag);
+ break;
+ }
+ }
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+}
+
+static const upb_MiniTableField* _upb_Decoder_FindField(upb_Decoder* d,
+ const upb_MiniTable* t,
+ uint32_t field_number,
+ int* last_field_index) {
+ static upb_MiniTableField none = {
+ 0, 0, 0, 0, kUpb_FakeFieldType_FieldNotFound, 0};
+ if (t == NULL) return &none;
+
+ size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
+ if (idx < t->UPB_PRIVATE(dense_below)) {
+ /* Fastest case: index into dense fields. */
+ goto found;
+ }
+
+ if (t->UPB_PRIVATE(dense_below) < t->UPB_PRIVATE(field_count)) {
+ /* Linear search non-dense fields. Resume scanning from last_field_index
+ * since fields are usually in order. */
+ size_t last = *last_field_index;
+ for (idx = last; idx < t->UPB_PRIVATE(field_count); idx++) {
+ if (t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number) {
+ goto found;
+ }
+ }
+
+ for (idx = t->UPB_PRIVATE(dense_below); idx < last; idx++) {
+ if (t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number) {
+ goto found;
+ }
+ }
+ }
+
+ if (d->extreg) {
+ switch (t->UPB_PRIVATE(ext)) {
+ case kUpb_ExtMode_Extendable: {
+ const upb_MiniTableExtension* ext =
+ upb_ExtensionRegistry_Lookup(d->extreg, t, field_number);
+ if (ext) return upb_MiniTableExtension_AsField(ext);
+ break;
+ }
+ case kUpb_ExtMode_IsMessageSet:
+ if (field_number == kUpb_MsgSet_Item) {
+ static upb_MiniTableField item = {
+ 0, 0, 0, 0, kUpb_FakeFieldType_MessageSetItem, 0};
+ return &item;
+ }
+ break;
+ }
+ }
+
+ return &none; /* Unknown field. */
+
+found:
+ UPB_ASSERT(t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number);
+ *last_field_index = idx;
+ return &t->UPB_PRIVATE(fields)[idx];
+}
+
+int _upb_Decoder_GetVarintOp(const upb_MiniTableField* field) {
+ static const int8_t kVarintOps[] = {
+ [kUpb_FakeFieldType_FieldNotFound] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Int64] = kUpb_DecodeOp_Scalar8Byte,
+ [kUpb_FieldType_UInt64] = kUpb_DecodeOp_Scalar8Byte,
+ [kUpb_FieldType_Int32] = kUpb_DecodeOp_Scalar4Byte,
+ [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Bool] = kUpb_DecodeOp_Scalar1Byte,
+ [kUpb_FieldType_String] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Message] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Bytes] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_UInt32] = kUpb_DecodeOp_Scalar4Byte,
+ [kUpb_FieldType_Enum] = kUpb_DecodeOp_Enum,
+ [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SInt32] = kUpb_DecodeOp_Scalar4Byte,
+ [kUpb_FieldType_SInt64] = kUpb_DecodeOp_Scalar8Byte,
+ [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
+ };
+
+ return kVarintOps[field->UPB_PRIVATE(descriptortype)];
+}
+
+UPB_FORCEINLINE
+static void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
+ const upb_MiniTableField* field,
+ int* op) {
+ // If sub-message is not linked, treat as unknown.
+ if (field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension) return;
+ const upb_MiniTable* mt_sub =
+ _upb_MiniTableSubs_MessageByField(mt->UPB_PRIVATE(subs), field);
+ if ((d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked) ||
+ !UPB_PRIVATE(_upb_MiniTable_IsEmpty)(mt_sub)) {
+ return;
+ }
+#ifndef NDEBUG
+ const upb_MiniTableField* oneof = upb_MiniTable_GetOneof(mt, field);
+ if (oneof) {
+ // All other members of the oneof must be message fields that are also
+ // unlinked.
+ do {
+ UPB_ASSERT(upb_MiniTableField_CType(oneof) == kUpb_CType_Message);
+ const upb_MiniTableSub* oneof_sub =
+ &mt->UPB_PRIVATE(subs)[oneof->UPB_PRIVATE(submsg_index)];
+ UPB_ASSERT(!oneof_sub);
+ } while (upb_MiniTable_NextOneofField(mt, &oneof));
+ }
+#endif // NDEBUG
+ *op = kUpb_DecodeOp_UnknownField;
+}
+
+int _upb_Decoder_GetDelimitedOp(upb_Decoder* d, const upb_MiniTable* mt,
+ const upb_MiniTableField* field) {
+ enum { kRepeatedBase = 19 };
+
+ static const int8_t kDelimitedOps[] = {
+ /* For non-repeated field type. */
+ [kUpb_FakeFieldType_FieldNotFound] =
+ kUpb_DecodeOp_UnknownField, // Field not found.
+ [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Int64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_UInt64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Int32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Bool] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_String] = kUpb_DecodeOp_String,
+ [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
+ [kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
+ [kUpb_FieldType_UInt32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_Enum] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SInt32] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FieldType_SInt64] = kUpb_DecodeOp_UnknownField,
+ [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
+ // For repeated field type. */
+ [kRepeatedBase + kUpb_FieldType_Double] = OP_FIXPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_Float] = OP_FIXPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Int64] = OP_VARPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_UInt64] = OP_VARPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_Int32] = OP_VARPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Fixed64] = OP_FIXPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_Fixed32] = OP_FIXPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Bool] = OP_VARPCK_LG2(0),
+ [kRepeatedBase + kUpb_FieldType_String] = kUpb_DecodeOp_String,
+ [kRepeatedBase + kUpb_FieldType_Group] = kUpb_DecodeOp_SubMessage,
+ [kRepeatedBase + kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
+ [kRepeatedBase + kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
+ [kRepeatedBase + kUpb_FieldType_UInt32] = OP_VARPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_Enum] = kUpb_DecodeOp_PackedEnum,
+ [kRepeatedBase + kUpb_FieldType_SFixed32] = OP_FIXPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_SFixed64] = OP_FIXPCK_LG2(3),
+ [kRepeatedBase + kUpb_FieldType_SInt32] = OP_VARPCK_LG2(2),
+ [kRepeatedBase + kUpb_FieldType_SInt64] = OP_VARPCK_LG2(3),
+ // Omitting kUpb_FakeFieldType_MessageSetItem, because we never emit a
+ // repeated msgset type
+ };
+
+ int ndx = field->UPB_PRIVATE(descriptortype);
+ if (upb_MiniTableField_IsArray(field)) ndx += kRepeatedBase;
+ int op = kDelimitedOps[ndx];
+
+ if (op == kUpb_DecodeOp_SubMessage) {
+ _upb_Decoder_CheckUnlinked(d, mt, field, &op);
+ }
+
+ return op;
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
+ const upb_MiniTable* mt,
+ const upb_MiniTableField* field,
+ int wire_type, wireval* val,
+ int* op) {
+ static const unsigned kFixed32OkMask = (1 << kUpb_FieldType_Float) |
+ (1 << kUpb_FieldType_Fixed32) |
+ (1 << kUpb_FieldType_SFixed32);
+
+ static const unsigned kFixed64OkMask = (1 << kUpb_FieldType_Double) |
+ (1 << kUpb_FieldType_Fixed64) |
+ (1 << kUpb_FieldType_SFixed64);
+
+ switch (wire_type) {
+ case kUpb_WireType_Varint:
+ ptr = _upb_Decoder_DecodeVarint(d, ptr, &val->uint64_val);
+ *op = _upb_Decoder_GetVarintOp(field);
+ _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), val);
+ return ptr;
+ case kUpb_WireType_32Bit:
+ *op = kUpb_DecodeOp_Scalar4Byte;
+ if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed32OkMask) == 0) {
+ *op = kUpb_DecodeOp_UnknownField;
+ }
+ return upb_WireReader_ReadFixed32(ptr, &val->uint32_val);
+ case kUpb_WireType_64Bit:
+ *op = kUpb_DecodeOp_Scalar8Byte;
+ if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed64OkMask) == 0) {
+ *op = kUpb_DecodeOp_UnknownField;
+ }
+ return upb_WireReader_ReadFixed64(ptr, &val->uint64_val);
+ case kUpb_WireType_Delimited:
+ ptr = upb_Decoder_DecodeSize(d, ptr, &val->size);
+ *op = _upb_Decoder_GetDelimitedOp(d, mt, field);
+ return ptr;
+ case kUpb_WireType_StartGroup:
+ val->uint32_val = field->UPB_PRIVATE(number);
+ if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
+ *op = kUpb_DecodeOp_SubMessage;
+ _upb_Decoder_CheckUnlinked(d, mt, field, op);
+ } else if (field->UPB_PRIVATE(descriptortype) ==
+ kUpb_FakeFieldType_MessageSetItem) {
+ *op = kUpb_DecodeOp_MessageSetItem;
+ } else {
+ *op = kUpb_DecodeOp_UnknownField;
+ }
+ return ptr;
+ default:
+ break;
+ }
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+}
+
+UPB_FORCEINLINE
+static const char* _upb_Decoder_DecodeKnownField(
+ upb_Decoder* d, const char* ptr, upb_Message* msg,
+ const upb_MiniTable* layout, const upb_MiniTableField* field, int op,
+ wireval* val) {
+ const upb_MiniTableSub* subs = layout->UPB_PRIVATE(subs);
+ uint8_t mode = field->UPB_PRIVATE(mode);
+
+ if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
+ const upb_MiniTableExtension* ext_layout =
+ (const upb_MiniTableExtension*)field;
+ upb_Extension* ext =
+ _upb_Message_GetOrCreateExtension(msg, ext_layout, &d->arena);
+ if (UPB_UNLIKELY(!ext)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ d->unknown_msg = msg;
+ msg = (upb_Message*)&ext->data;
+ subs = &ext->ext->UPB_PRIVATE(sub);
+ }
+
+ switch (mode & kUpb_FieldMode_Mask) {
+ case kUpb_FieldMode_Array:
+ return _upb_Decoder_DecodeToArray(d, ptr, msg, subs, field, val, op);
+ case kUpb_FieldMode_Map:
+ return _upb_Decoder_DecodeToMap(d, ptr, msg, subs, field, val);
+ case kUpb_FieldMode_Scalar:
+ return _upb_Decoder_DecodeToSubMessage(d, ptr, msg, subs, field, val, op);
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+static const char* _upb_Decoder_ReverseSkipVarint(const char* ptr,
+ uint32_t val) {
+ uint32_t seen = 0;
+ do {
+ ptr--;
+ seen <<= 7;
+ seen |= *ptr & 0x7f;
+ } while (seen != val);
+ return ptr;
+}
+
+static const char* _upb_Decoder_DecodeUnknownField(upb_Decoder* d,
+ const char* ptr,
+ upb_Message* msg,
+ int field_number,
+ int wire_type, wireval val) {
+ if (field_number == 0) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+
+ // Since unknown fields are the uncommon case, we do a little extra work here
+ // to walk backwards through the buffer to find the field start. This frees
+ // up a register in the fast paths (when the field is known), which leads to
+ // significant speedups in benchmarks.
+ const char* start = ptr;
+
+ if (wire_type == kUpb_WireType_Delimited) ptr += val.size;
+ if (msg) {
+ switch (wire_type) {
+ case kUpb_WireType_Varint:
+ case kUpb_WireType_Delimited:
+ start--;
+ while (start[-1] & 0x80) start--;
+ break;
+ case kUpb_WireType_32Bit:
+ start -= 4;
+ break;
+ case kUpb_WireType_64Bit:
+ start -= 8;
+ break;
+ default:
+ break;
+ }
+
+ assert(start == d->debug_valstart);
+ uint32_t tag = ((uint32_t)field_number << 3) | wire_type;
+ start = _upb_Decoder_ReverseSkipVarint(start, tag);
+ assert(start == d->debug_tagstart);
+
+ if (wire_type == kUpb_WireType_StartGroup) {
+ d->unknown = start;
+ d->unknown_msg = msg;
+ ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
+ start = d->unknown;
+ d->unknown = NULL;
+ }
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, start, ptr - start,
+ &d->arena)) {
+ _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ } else if (wire_type == kUpb_WireType_StartGroup) {
+ ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
+ }
+ return ptr;
+}
+
+UPB_NOINLINE
+static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
+ upb_Message* msg,
+ const upb_MiniTable* layout) {
+ int last_field_index = 0;
+
+#if UPB_FASTTABLE
+ // The first time we want to skip fast dispatch, because we may have just been
+ // invoked by the fast parser to handle a case that it bailed on.
+ if (!_upb_Decoder_IsDone(d, &ptr)) goto nofast;
+#endif
+
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ uint32_t tag;
+ const upb_MiniTableField* field;
+ int field_number;
+ int wire_type;
+ wireval val;
+ int op;
+
+ if (_upb_Decoder_TryFastDispatch(d, &ptr, msg, layout)) break;
+
+#if UPB_FASTTABLE
+ nofast:
+#endif
+
+#ifndef NDEBUG
+ d->debug_tagstart = ptr;
+#endif
+
+ UPB_ASSERT(ptr < d->input.limit_ptr);
+ ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
+ field_number = tag >> 3;
+ wire_type = tag & 7;
+
+#ifndef NDEBUG
+ d->debug_valstart = ptr;
+#endif
+
+ if (wire_type == kUpb_WireType_EndGroup) {
+ d->end_group = field_number;
+ return ptr;
+ }
+
+ field = _upb_Decoder_FindField(d, layout, field_number, &last_field_index);
+ ptr = _upb_Decoder_DecodeWireValue(d, ptr, layout, field, wire_type, &val,
+ &op);
+
+ if (op >= 0) {
+ ptr = _upb_Decoder_DecodeKnownField(d, ptr, msg, layout, field, op, &val);
+ } else {
+ switch (op) {
+ case kUpb_DecodeOp_UnknownField:
+ ptr = _upb_Decoder_DecodeUnknownField(d, ptr, msg, field_number,
+ wire_type, val);
+ break;
+ case kUpb_DecodeOp_MessageSetItem:
+ ptr = upb_Decoder_DecodeMessageSetItem(d, ptr, msg, layout);
+ break;
+ }
+ }
+ }
+
+ return UPB_UNLIKELY(layout && layout->UPB_PRIVATE(required_count))
+ ? _upb_Decoder_CheckRequired(d, ptr, msg, layout)
+ : ptr;
+}
+
+const char* _upb_FastDecoder_DecodeGeneric(struct upb_Decoder* d,
+ const char* ptr, upb_Message* msg,
+ intptr_t table, uint64_t hasbits,
+ uint64_t data) {
+ (void)data;
+ *(uint32_t*)msg |= hasbits;
+ return _upb_Decoder_DecodeMessage(d, ptr, msg, decode_totablep(table));
+}
+
+static upb_DecodeStatus _upb_Decoder_DecodeTop(struct upb_Decoder* d,
+ const char* buf, void* msg,
+ const upb_MiniTable* l) {
+ if (!_upb_Decoder_TryFastDispatch(d, &buf, msg, l)) {
+ _upb_Decoder_DecodeMessage(d, buf, msg, l);
+ }
+ if (d->end_group != DECODE_NOGROUP) return kUpb_DecodeStatus_Malformed;
+ if (d->missing_required) return kUpb_DecodeStatus_MissingRequired;
+ return kUpb_DecodeStatus_Ok;
+}
+
+UPB_NOINLINE
+const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
+ const char* ptr, int overrun) {
+ return _upb_EpsCopyInputStream_IsDoneFallbackInline(
+ e, ptr, overrun, _upb_Decoder_BufferFlipCallback);
+}
+
+static upb_DecodeStatus upb_Decoder_Decode(upb_Decoder* const decoder,
+ const char* const buf,
+ void* const msg,
+ const upb_MiniTable* const l,
+ upb_Arena* const arena) {
+ if (UPB_SETJMP(decoder->err) == 0) {
+ decoder->status = _upb_Decoder_DecodeTop(decoder, buf, msg, l);
+ } else {
+ UPB_ASSERT(decoder->status != kUpb_DecodeStatus_Ok);
+ }
+
+ UPB_PRIVATE(_upb_Arena_SwapOut)(arena, &decoder->arena);
+
+ return decoder->status;
+}
+
+upb_DecodeStatus upb_Decode(const char* buf, size_t size, upb_Message* msg,
+ const upb_MiniTable* l,
+ const upb_ExtensionRegistry* extreg, int options,
+ upb_Arena* arena) {
+ upb_Decoder decoder;
+ unsigned depth = (unsigned)options >> 16;
+
+ upb_EpsCopyInputStream_Init(&decoder.input, &buf, size,
+ options & kUpb_DecodeOption_AliasString);
+
+ decoder.extreg = extreg;
+ decoder.unknown = NULL;
+ decoder.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
+ decoder.end_group = DECODE_NOGROUP;
+ decoder.options = (uint16_t)options;
+ decoder.missing_required = false;
+ decoder.status = kUpb_DecodeStatus_Ok;
+
+ // Violating the encapsulation of the arena for performance reasons.
+ // This is a temporary arena that we swap into and swap out of when we are
+ // done. The temporary arena only needs to be able to handle allocation,
+ // not fuse or free, so it does not need many of the members to be initialized
+ // (particularly parent_or_count).
+ UPB_PRIVATE(_upb_Arena_SwapIn)(&decoder.arena, arena);
+
+ return upb_Decoder_Decode(&decoder, buf, msg, l, arena);
+}
+
+#undef OP_FIXPCK_LG2
+#undef OP_VARPCK_LG2
+
+// We encode backwards, to avoid pre-computing lengths (one-pass encode).
+
+
+#include <setjmp.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+#define UPB_PB_VARINT_MAX_LEN 10
+
+UPB_NOINLINE
+static size_t encode_varint64(uint64_t val, char* buf) {
+ size_t i = 0;
+ do {
+ uint8_t byte = val & 0x7fU;
+ val >>= 7;
+ if (val) byte |= 0x80U;
+ buf[i++] = byte;
+ } while (val);
+ return i;
+}
+
+static uint32_t encode_zz32(int32_t n) {
+ return ((uint32_t)n << 1) ^ (n >> 31);
+}
+static uint64_t encode_zz64(int64_t n) {
+ return ((uint64_t)n << 1) ^ (n >> 63);
+}
+
+typedef struct {
+ upb_EncodeStatus status;
+ jmp_buf err;
+ upb_Arena* arena;
+ char *buf, *ptr, *limit;
+ int options;
+ int depth;
+ _upb_mapsorter sorter;
+} upb_encstate;
+
+static size_t upb_roundup_pow2(size_t bytes) {
+ size_t ret = 128;
+ while (ret < bytes) {
+ ret *= 2;
+ }
+ return ret;
+}
+
+UPB_NORETURN static void encode_err(upb_encstate* e, upb_EncodeStatus s) {
+ UPB_ASSERT(s != kUpb_EncodeStatus_Ok);
+ e->status = s;
+ UPB_LONGJMP(e->err, 1);
+}
+
+UPB_NOINLINE
+static void encode_growbuffer(upb_encstate* e, size_t bytes) {
+ size_t old_size = e->limit - e->buf;
+ size_t new_size = upb_roundup_pow2(bytes + (e->limit - e->ptr));
+ char* new_buf = upb_Arena_Realloc(e->arena, e->buf, old_size, new_size);
+
+ if (!new_buf) encode_err(e, kUpb_EncodeStatus_OutOfMemory);
+
+ // We want previous data at the end, realloc() put it at the beginning.
+ // TODO: This is somewhat inefficient since we are copying twice.
+ // Maybe create a realloc() that copies to the end of the new buffer?
+ if (old_size > 0) {
+ memmove(new_buf + new_size - old_size, e->buf, old_size);
+ }
+
+ e->ptr = new_buf + new_size - (e->limit - e->ptr);
+ e->limit = new_buf + new_size;
+ e->buf = new_buf;
+
+ e->ptr -= bytes;
+}
+
+/* Call to ensure that at least "bytes" bytes are available for writing at
+ * e->ptr. Returns false if the bytes could not be allocated. */
+UPB_FORCEINLINE
+static void encode_reserve(upb_encstate* e, size_t bytes) {
+ if ((size_t)(e->ptr - e->buf) < bytes) {
+ encode_growbuffer(e, bytes);
+ return;
+ }
+
+ e->ptr -= bytes;
+}
+
+/* Writes the given bytes to the buffer, handling reserve/advance. */
+static void encode_bytes(upb_encstate* e, const void* data, size_t len) {
+ if (len == 0) return; /* memcpy() with zero size is UB */
+ encode_reserve(e, len);
+ memcpy(e->ptr, data, len);
+}
+
+static void encode_fixed64(upb_encstate* e, uint64_t val) {
+ val = upb_BigEndian64(val);
+ encode_bytes(e, &val, sizeof(uint64_t));
+}
+
+static void encode_fixed32(upb_encstate* e, uint32_t val) {
+ val = upb_BigEndian32(val);
+ encode_bytes(e, &val, sizeof(uint32_t));
+}
+
+UPB_NOINLINE
+static void encode_longvarint(upb_encstate* e, uint64_t val) {
+ size_t len;
+ char* start;
+
+ encode_reserve(e, UPB_PB_VARINT_MAX_LEN);
+ len = encode_varint64(val, e->ptr);
+ start = e->ptr + UPB_PB_VARINT_MAX_LEN - len;
+ memmove(start, e->ptr, len);
+ e->ptr = start;
+}
+
+UPB_FORCEINLINE
+static void encode_varint(upb_encstate* e, uint64_t val) {
+ if (val < 128 && e->ptr != e->buf) {
+ --e->ptr;
+ *e->ptr = val;
+ } else {
+ encode_longvarint(e, val);
+ }
+}
+
+static void encode_double(upb_encstate* e, double d) {
+ uint64_t u64;
+ UPB_ASSERT(sizeof(double) == sizeof(uint64_t));
+ memcpy(&u64, &d, sizeof(uint64_t));
+ encode_fixed64(e, u64);
+}
+
+static void encode_float(upb_encstate* e, float d) {
+ uint32_t u32;
+ UPB_ASSERT(sizeof(float) == sizeof(uint32_t));
+ memcpy(&u32, &d, sizeof(uint32_t));
+ encode_fixed32(e, u32);
+}
+
+static void encode_tag(upb_encstate* e, uint32_t field_number,
+ uint8_t wire_type) {
+ encode_varint(e, (field_number << 3) | wire_type);
+}
+
+static void encode_fixedarray(upb_encstate* e, const upb_Array* arr,
+ size_t elem_size, uint32_t tag) {
+ size_t bytes = arr->UPB_PRIVATE(size) * elem_size;
+ const char* data = _upb_array_constptr(arr);
+ const char* ptr = data + bytes - elem_size;
+
+ if (tag || !upb_IsLittleEndian()) {
+ while (true) {
+ if (elem_size == 4) {
+ uint32_t val;
+ memcpy(&val, ptr, sizeof(val));
+ val = upb_BigEndian32(val);
+ encode_bytes(e, &val, elem_size);
+ } else {
+ UPB_ASSERT(elem_size == 8);
+ uint64_t val;
+ memcpy(&val, ptr, sizeof(val));
+ val = upb_BigEndian64(val);
+ encode_bytes(e, &val, elem_size);
+ }
+
+ if (tag) encode_varint(e, tag);
+ if (ptr == data) break;
+ ptr -= elem_size;
+ }
+ } else {
+ encode_bytes(e, data, bytes);
+ }
+}
+
+static void encode_message(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTable* m, size_t* size);
+
+static void encode_TaggedMessagePtr(upb_encstate* e,
+ upb_TaggedMessagePtr tagged,
+ const upb_MiniTable* m, size_t* size) {
+ if (upb_TaggedMessagePtr_IsEmpty(tagged)) {
+ m = UPB_PRIVATE(_upb_MiniTable_Empty)();
+ }
+ encode_message(e, UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged), m,
+ size);
+}
+
+static void encode_scalar(upb_encstate* e, const void* _field_mem,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ const char* field_mem = _field_mem;
+ int wire_type;
+
+#define CASE(ctype, type, wtype, encodeval) \
+ { \
+ ctype val = *(ctype*)field_mem; \
+ encode_##type(e, encodeval); \
+ wire_type = wtype; \
+ break; \
+ }
+
+ switch (f->UPB_PRIVATE(descriptortype)) {
+ case kUpb_FieldType_Double:
+ CASE(double, double, kUpb_WireType_64Bit, val);
+ case kUpb_FieldType_Float:
+ CASE(float, float, kUpb_WireType_32Bit, val);
+ case kUpb_FieldType_Int64:
+ case kUpb_FieldType_UInt64:
+ CASE(uint64_t, varint, kUpb_WireType_Varint, val);
+ case kUpb_FieldType_UInt32:
+ CASE(uint32_t, varint, kUpb_WireType_Varint, val);
+ case kUpb_FieldType_Int32:
+ case kUpb_FieldType_Enum:
+ CASE(int32_t, varint, kUpb_WireType_Varint, (int64_t)val);
+ case kUpb_FieldType_SFixed64:
+ case kUpb_FieldType_Fixed64:
+ CASE(uint64_t, fixed64, kUpb_WireType_64Bit, val);
+ case kUpb_FieldType_Fixed32:
+ case kUpb_FieldType_SFixed32:
+ CASE(uint32_t, fixed32, kUpb_WireType_32Bit, val);
+ case kUpb_FieldType_Bool:
+ CASE(bool, varint, kUpb_WireType_Varint, val);
+ case kUpb_FieldType_SInt32:
+ CASE(int32_t, varint, kUpb_WireType_Varint, encode_zz32(val));
+ case kUpb_FieldType_SInt64:
+ CASE(int64_t, varint, kUpb_WireType_Varint, encode_zz64(val));
+ case kUpb_FieldType_String:
+ case kUpb_FieldType_Bytes: {
+ upb_StringView view = *(upb_StringView*)field_mem;
+ encode_bytes(e, view.data, view.size);
+ encode_varint(e, view.size);
+ wire_type = kUpb_WireType_Delimited;
+ break;
+ }
+ case kUpb_FieldType_Group: {
+ size_t size;
+ upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (submsg == 0) {
+ return;
+ }
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_EndGroup);
+ encode_TaggedMessagePtr(e, submsg, subm, &size);
+ wire_type = kUpb_WireType_StartGroup;
+ e->depth++;
+ break;
+ }
+ case kUpb_FieldType_Message: {
+ size_t size;
+ upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (submsg == 0) {
+ return;
+ }
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ encode_TaggedMessagePtr(e, submsg, subm, &size);
+ encode_varint(e, size);
+ wire_type = kUpb_WireType_Delimited;
+ e->depth++;
+ break;
+ }
+ default:
+ UPB_UNREACHABLE();
+ }
+#undef CASE
+
+ encode_tag(e, f->UPB_PRIVATE(number), wire_type);
+}
+
+static void encode_array(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ const upb_Array* arr = *UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), upb_Array*);
+ bool packed = upb_MiniTableField_IsPacked(f);
+ size_t pre_len = e->limit - e->ptr;
+
+ if (arr == NULL || arr->UPB_PRIVATE(size) == 0) {
+ return;
+ }
+
+#define VARINT_CASE(ctype, encode) \
+ { \
+ const ctype* start = _upb_array_constptr(arr); \
+ const ctype* ptr = start + arr->UPB_PRIVATE(size); \
+ uint32_t tag = \
+ packed ? 0 : (f->UPB_PRIVATE(number) << 3) | kUpb_WireType_Varint; \
+ do { \
+ ptr--; \
+ encode_varint(e, encode); \
+ if (tag) encode_varint(e, tag); \
+ } while (ptr != start); \
+ } \
+ break;
+
+#define TAG(wire_type) (packed ? 0 : (f->UPB_PRIVATE(number) << 3 | wire_type))
+
+ switch (f->UPB_PRIVATE(descriptortype)) {
+ case kUpb_FieldType_Double:
+ encode_fixedarray(e, arr, sizeof(double), TAG(kUpb_WireType_64Bit));
+ break;
+ case kUpb_FieldType_Float:
+ encode_fixedarray(e, arr, sizeof(float), TAG(kUpb_WireType_32Bit));
+ break;
+ case kUpb_FieldType_SFixed64:
+ case kUpb_FieldType_Fixed64:
+ encode_fixedarray(e, arr, sizeof(uint64_t), TAG(kUpb_WireType_64Bit));
+ break;
+ case kUpb_FieldType_Fixed32:
+ case kUpb_FieldType_SFixed32:
+ encode_fixedarray(e, arr, sizeof(uint32_t), TAG(kUpb_WireType_32Bit));
+ break;
+ case kUpb_FieldType_Int64:
+ case kUpb_FieldType_UInt64:
+ VARINT_CASE(uint64_t, *ptr);
+ case kUpb_FieldType_UInt32:
+ VARINT_CASE(uint32_t, *ptr);
+ case kUpb_FieldType_Int32:
+ case kUpb_FieldType_Enum:
+ VARINT_CASE(int32_t, (int64_t)*ptr);
+ case kUpb_FieldType_Bool:
+ VARINT_CASE(bool, *ptr);
+ case kUpb_FieldType_SInt32:
+ VARINT_CASE(int32_t, encode_zz32(*ptr));
+ case kUpb_FieldType_SInt64:
+ VARINT_CASE(int64_t, encode_zz64(*ptr));
+ case kUpb_FieldType_String:
+ case kUpb_FieldType_Bytes: {
+ const upb_StringView* start = _upb_array_constptr(arr);
+ const upb_StringView* ptr = start + arr->UPB_PRIVATE(size);
+ do {
+ ptr--;
+ encode_bytes(e, ptr->data, ptr->size);
+ encode_varint(e, ptr->size);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
+ } while (ptr != start);
+ return;
+ }
+ case kUpb_FieldType_Group: {
+ const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
+ const upb_TaggedMessagePtr* ptr = start + arr->UPB_PRIVATE(size);
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ do {
+ size_t size;
+ ptr--;
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_EndGroup);
+ encode_TaggedMessagePtr(e, *ptr, subm, &size);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_StartGroup);
+ } while (ptr != start);
+ e->depth++;
+ return;
+ }
+ case kUpb_FieldType_Message: {
+ const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
+ const upb_TaggedMessagePtr* ptr = start + arr->UPB_PRIVATE(size);
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
+ do {
+ size_t size;
+ ptr--;
+ encode_TaggedMessagePtr(e, *ptr, subm, &size);
+ encode_varint(e, size);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
+ } while (ptr != start);
+ e->depth++;
+ return;
+ }
+ }
+#undef VARINT_CASE
+
+ if (packed) {
+ encode_varint(e, e->limit - e->ptr - pre_len);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
+ }
+}
+
+static void encode_mapentry(upb_encstate* e, uint32_t number,
+ const upb_MiniTable* layout,
+ const upb_MapEntry* ent) {
+ const upb_MiniTableField* key_field = &layout->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* val_field = &layout->UPB_PRIVATE(fields)[1];
+ size_t pre_len = e->limit - e->ptr;
+ size_t size;
+ encode_scalar(e, &ent->data.v, layout->UPB_PRIVATE(subs), val_field);
+ encode_scalar(e, &ent->data.k, layout->UPB_PRIVATE(subs), key_field);
+ size = (e->limit - e->ptr) - pre_len;
+ encode_varint(e, size);
+ encode_tag(e, number, kUpb_WireType_Delimited);
+}
+
+static void encode_map(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ const upb_Map* map = *UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), const upb_Map*);
+ const upb_MiniTable* layout =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(layout->UPB_PRIVATE(field_count) == 2);
+
+ if (map == NULL) return;
+
+ if (e->options & kUpb_EncodeOption_Deterministic) {
+ _upb_sortedmap sorted;
+ _upb_mapsorter_pushmap(
+ &e->sorter, layout->UPB_PRIVATE(fields)[0].UPB_PRIVATE(descriptortype),
+ map, &sorted);
+ upb_MapEntry ent;
+ while (_upb_sortedmap_next(&e->sorter, map, &sorted, &ent)) {
+ encode_mapentry(e, f->UPB_PRIVATE(number), layout, &ent);
+ }
+ _upb_mapsorter_popmap(&e->sorter, &sorted);
+ } else {
+ intptr_t iter = UPB_STRTABLE_BEGIN;
+ upb_StringView key;
+ upb_value val;
+ while (upb_strtable_next2(&map->table, &key, &val, &iter)) {
+ upb_MapEntry ent;
+ _upb_map_fromkey(key, &ent.data.k, map->key_size);
+ _upb_map_fromvalue(val, &ent.data.v, map->val_size);
+ encode_mapentry(e, f->UPB_PRIVATE(number), layout, &ent);
+ }
+ }
+}
+
+static bool encode_shouldencode(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* f) {
+ if (f->presence == 0) {
+ // Proto3 presence or map/array.
+ const void* mem = UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), void);
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte: {
+ char ch;
+ memcpy(&ch, mem, 1);
+ return ch != 0;
+ }
+ case kUpb_FieldRep_4Byte: {
+ uint32_t u32;
+ memcpy(&u32, mem, 4);
+ return u32 != 0;
+ }
+ case kUpb_FieldRep_8Byte: {
+ uint64_t u64;
+ memcpy(&u64, mem, 8);
+ return u64 != 0;
+ }
+ case kUpb_FieldRep_StringView: {
+ const upb_StringView* str = (const upb_StringView*)mem;
+ return str->size != 0;
+ }
+ default:
+ UPB_UNREACHABLE();
+ }
+ } else if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ // Proto2 presence: hasbit.
+ return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, f);
+ } else {
+ // Field is in a oneof.
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, f) ==
+ f->UPB_PRIVATE(number);
+ }
+}
+
+static void encode_field(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTableSub* subs,
+ const upb_MiniTableField* field) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(field)) {
+ case kUpb_FieldMode_Array:
+ encode_array(e, msg, subs, field);
+ break;
+ case kUpb_FieldMode_Map:
+ encode_map(e, msg, subs, field);
+ break;
+ case kUpb_FieldMode_Scalar:
+ encode_scalar(e, UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void), subs,
+ field);
+ break;
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+static void encode_msgset_item(upb_encstate* e, const upb_Extension* ext) {
+ size_t size;
+ encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_EndGroup);
+ encode_message(e, ext->data.ptr,
+ upb_MiniTableExtension_GetSubMessage(ext->ext), &size);
+ encode_varint(e, size);
+ encode_tag(e, kUpb_MsgSet_Message, kUpb_WireType_Delimited);
+ encode_varint(e, upb_MiniTableExtension_Number(ext->ext));
+ encode_tag(e, kUpb_MsgSet_TypeId, kUpb_WireType_Varint);
+ encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_StartGroup);
+}
+
+static void encode_ext(upb_encstate* e, const upb_Extension* ext,
+ bool is_message_set) {
+ if (UPB_UNLIKELY(is_message_set)) {
+ encode_msgset_item(e, ext);
+ } else {
+ encode_field(e, (upb_Message*)&ext->data, &ext->ext->UPB_PRIVATE(sub),
+ &ext->ext->UPB_PRIVATE(field));
+ }
+}
+
+static void encode_message(upb_encstate* e, const upb_Message* msg,
+ const upb_MiniTable* m, size_t* size) {
+ size_t pre_len = e->limit - e->ptr;
+
+ if ((e->options & kUpb_EncodeOption_CheckRequired) &&
+ m->UPB_PRIVATE(required_count)) {
+ uint64_t msg_head;
+ memcpy(&msg_head, msg, 8);
+ msg_head = upb_BigEndian64(msg_head);
+ if (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~msg_head) {
+ encode_err(e, kUpb_EncodeStatus_MissingRequired);
+ }
+ }
+
+ if ((e->options & kUpb_EncodeOption_SkipUnknown) == 0) {
+ size_t unknown_size;
+ const char* unknown = upb_Message_GetUnknown(msg, &unknown_size);
+
+ if (unknown) {
+ encode_bytes(e, unknown, unknown_size);
+ }
+ }
+
+ if (m->UPB_PRIVATE(ext) != kUpb_ExtMode_NonExtendable) {
+ /* Encode all extensions together. Unlike C++, we do not attempt to keep
+ * these in field number order relative to normal fields or even to each
+ * other. */
+ size_t ext_count;
+ const upb_Extension* ext =
+ UPB_PRIVATE(_upb_Message_Getexts)(msg, &ext_count);
+ if (ext_count) {
+ if (e->options & kUpb_EncodeOption_Deterministic) {
+ _upb_sortedmap sorted;
+ _upb_mapsorter_pushexts(&e->sorter, ext, ext_count, &sorted);
+ while (_upb_sortedmap_nextext(&e->sorter, &sorted, &ext)) {
+ encode_ext(e, ext, m->UPB_PRIVATE(ext) == kUpb_ExtMode_IsMessageSet);
+ }
+ _upb_mapsorter_popmap(&e->sorter, &sorted);
+ } else {
+ const upb_Extension* end = ext + ext_count;
+ for (; ext != end; ext++) {
+ encode_ext(e, ext, m->UPB_PRIVATE(ext) == kUpb_ExtMode_IsMessageSet);
+ }
+ }
+ }
+ }
+
+ if (m->UPB_PRIVATE(field_count)) {
+ const upb_MiniTableField* f =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ const upb_MiniTableField* first = &m->UPB_PRIVATE(fields)[0];
+ while (f != first) {
+ f--;
+ if (encode_shouldencode(e, msg, m->UPB_PRIVATE(subs), f)) {
+ encode_field(e, msg, m->UPB_PRIVATE(subs), f);
+ }
+ }
+ }
+
+ *size = (e->limit - e->ptr) - pre_len;
+}
+
+static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
+ const upb_Message* const msg,
+ const upb_MiniTable* const l,
+ char** const buf,
+ size_t* const size) {
+ // Unfortunately we must continue to perform hackery here because there are
+ // code paths which blindly copy the returned pointer without bothering to
+ // check for errors until much later (b/235839510). So we still set *buf to
+ // NULL on error and we still set it to non-NULL on a successful empty result.
+ if (UPB_SETJMP(encoder->err) == 0) {
+ encode_message(encoder, msg, l, size);
+ *size = encoder->limit - encoder->ptr;
+ if (*size == 0) {
+ static char ch;
+ *buf = &ch;
+ } else {
+ UPB_ASSERT(encoder->ptr);
+ *buf = encoder->ptr;
+ }
+ } else {
+ UPB_ASSERT(encoder->status != kUpb_EncodeStatus_Ok);
+ *buf = NULL;
+ *size = 0;
+ }
+
+ _upb_mapsorter_destroy(&encoder->sorter);
+ return encoder->status;
+}
+
+upb_EncodeStatus upb_Encode(const upb_Message* msg, const upb_MiniTable* l,
+ int options, upb_Arena* arena, char** buf,
+ size_t* size) {
+ upb_encstate e;
+ unsigned depth = (unsigned)options >> 16;
+
+ e.status = kUpb_EncodeStatus_Ok;
+ e.arena = arena;
+ e.buf = NULL;
+ e.limit = NULL;
+ e.ptr = NULL;
+ e.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
+ e.options = options;
+ _upb_mapsorter_init(&e.sorter);
+
+ return upb_Encoder_Encode(&e, msg, l, buf, size);
+}
+
+// Fast decoder: ~3x the speed of decode.c, but requires x86-64/ARM64.
+// Also the table size grows by 2x.
+//
+// Could potentially be ported to other 64-bit archs that pass at least six
+// arguments in registers and have 8 unused high bits in pointers.
+//
+// The overall design is to create specialized functions for every possible
+// field type (eg. oneof boolean field with a 1 byte tag) and then dispatch
+// to the specialized function as quickly as possible.
+
+
+
+// Must be last.
+
+#if UPB_FASTTABLE
+
+// The standard set of arguments passed to each parsing function.
+// Thanks to x86-64 calling conventions, these will stay in registers.
+#define UPB_PARSE_PARAMS \
+ upb_Decoder *d, const char *ptr, upb_Message *msg, intptr_t table, \
+ uint64_t hasbits, uint64_t data
+
+#define UPB_PARSE_ARGS d, ptr, msg, table, hasbits, data
+
+#define RETURN_GENERIC(m) \
+ /* Uncomment either of these for debugging purposes. */ \
+ /* fprintf(stderr, m); */ \
+ /*__builtin_trap(); */ \
+ return _upb_FastDecoder_DecodeGeneric(d, ptr, msg, table, hasbits, 0);
+
+typedef enum {
+ CARD_s = 0, /* Singular (optional, non-repeated) */
+ CARD_o = 1, /* Oneof */
+ CARD_r = 2, /* Repeated */
+ CARD_p = 3 /* Packed Repeated */
+} upb_card;
+
+UPB_NOINLINE
+static const char* fastdecode_isdonefallback(UPB_PARSE_PARAMS) {
+ int overrun = data;
+ ptr = _upb_EpsCopyInputStream_IsDoneFallbackInline(
+ &d->input, ptr, overrun, _upb_Decoder_BufferFlipCallback);
+ data = _upb_FastDecoder_LoadTag(ptr);
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_dispatch(UPB_PARSE_PARAMS) {
+ int overrun;
+ switch (upb_EpsCopyInputStream_IsDoneStatus(&d->input, ptr, &overrun)) {
+ case kUpb_IsDoneStatus_Done:
+ *(uint32_t*)msg |= hasbits; // Sync hasbits.
+ const upb_MiniTable* m = decode_totablep(table);
+ return UPB_UNLIKELY(m->UPB_PRIVATE(required_count))
+ ? _upb_Decoder_CheckRequired(d, ptr, msg, m)
+ : ptr;
+ case kUpb_IsDoneStatus_NotDone:
+ break;
+ case kUpb_IsDoneStatus_NeedFallback:
+ data = overrun;
+ UPB_MUSTTAIL return fastdecode_isdonefallback(UPB_PARSE_ARGS);
+ }
+
+ // Read two bytes of tag data (for a one-byte tag, the high byte is junk).
+ data = _upb_FastDecoder_LoadTag(ptr);
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
+}
+
+UPB_FORCEINLINE
+static bool fastdecode_checktag(uint16_t data, int tagbytes) {
+ if (tagbytes == 1) {
+ return (data & 0xff) == 0;
+ } else {
+ return data == 0;
+ }
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_longsize(const char* ptr, int* size) {
+ int i;
+ UPB_ASSERT(*size & 0x80);
+ *size &= 0xff;
+ for (i = 0; i < 3; i++) {
+ ptr++;
+ size_t byte = (uint8_t)ptr[-1];
+ *size += (byte - 1) << (7 + 7 * i);
+ if (UPB_LIKELY((byte & 0x80) == 0)) return ptr;
+ }
+ ptr++;
+ size_t byte = (uint8_t)ptr[-1];
+ // len is limited by 2gb not 4gb, hence 8 and not 16 as normally expected
+ // for a 32 bit varint.
+ if (UPB_UNLIKELY(byte >= 8)) return NULL;
+ *size += (byte - 1) << 28;
+ return ptr;
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_delimited(
+ upb_Decoder* d, const char* ptr,
+ upb_EpsCopyInputStream_ParseDelimitedFunc* func, void* ctx) {
+ ptr++;
+
+ // Sign-extend so varint greater than one byte becomes negative, causing
+ // fast delimited parse to fail.
+ int len = (int8_t)ptr[-1];
+
+ if (!upb_EpsCopyInputStream_TryParseDelimitedFast(&d->input, &ptr, len, func,
+ ctx)) {
+ // Slow case: Sub-message is >=128 bytes and/or exceeds the current buffer.
+ // If it exceeds the buffer limit, limit/limit_ptr will change during
+ // sub-message parsing, so we need to preserve delta, not limit.
+ if (UPB_UNLIKELY(len & 0x80)) {
+ // Size varint >1 byte (length >= 128).
+ ptr = fastdecode_longsize(ptr, &len);
+ if (!ptr) {
+ // Corrupt wire format: size exceeded INT_MAX.
+ return NULL;
+ }
+ }
+ if (!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, len)) {
+ // Corrupt wire format: invalid limit.
+ return NULL;
+ }
+ int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, len);
+ ptr = func(&d->input, ptr, ctx);
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
+ }
+ return ptr;
+}
+
+/* singular, oneof, repeated field handling ***********************************/
+
+typedef struct {
+ upb_Array* arr;
+ void* end;
+} fastdecode_arr;
+
+typedef enum {
+ FD_NEXT_ATLIMIT,
+ FD_NEXT_SAMEFIELD,
+ FD_NEXT_OTHERFIELD
+} fastdecode_next;
+
+typedef struct {
+ void* dst;
+ fastdecode_next next;
+ uint32_t tag;
+} fastdecode_nextret;
+
+UPB_FORCEINLINE
+static void* fastdecode_resizearr(upb_Decoder* d, void* dst,
+ fastdecode_arr* farr, int valbytes) {
+ if (UPB_UNLIKELY(dst == farr->end)) {
+ size_t old_capacity = farr->arr->UPB_PRIVATE(capacity);
+ size_t old_bytes = old_capacity * valbytes;
+ size_t new_capacity = old_capacity * 2;
+ size_t new_bytes = new_capacity * valbytes;
+ char* old_ptr = _upb_array_ptr(farr->arr);
+ char* new_ptr = upb_Arena_Realloc(&d->arena, old_ptr, old_bytes, new_bytes);
+ uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)(farr->arr, new_ptr, elem_size_lg2);
+ farr->arr->UPB_PRIVATE(capacity) = new_capacity;
+ dst = (void*)(new_ptr + (old_capacity * valbytes));
+ farr->end = (void*)(new_ptr + (new_capacity * valbytes));
+ }
+ return dst;
+}
+
+UPB_FORCEINLINE
+static bool fastdecode_tagmatch(uint32_t tag, uint64_t data, int tagbytes) {
+ if (tagbytes == 1) {
+ return (uint8_t)tag == (uint8_t)data;
+ } else {
+ return (uint16_t)tag == (uint16_t)data;
+ }
+}
+
+UPB_FORCEINLINE
+static void fastdecode_commitarr(void* dst, fastdecode_arr* farr,
+ int valbytes) {
+ farr->arr->UPB_PRIVATE(size) =
+ (size_t)((char*)dst - (char*)_upb_array_ptr(farr->arr)) / valbytes;
+}
+
+UPB_FORCEINLINE
+static fastdecode_nextret fastdecode_nextrepeated(upb_Decoder* d, void* dst,
+ const char** ptr,
+ fastdecode_arr* farr,
+ uint64_t data, int tagbytes,
+ int valbytes) {
+ fastdecode_nextret ret;
+ dst = (char*)dst + valbytes;
+
+ if (UPB_LIKELY(!_upb_Decoder_IsDone(d, ptr))) {
+ ret.tag = _upb_FastDecoder_LoadTag(*ptr);
+ if (fastdecode_tagmatch(ret.tag, data, tagbytes)) {
+ ret.next = FD_NEXT_SAMEFIELD;
+ } else {
+ fastdecode_commitarr(dst, farr, valbytes);
+ ret.next = FD_NEXT_OTHERFIELD;
+ }
+ } else {
+ fastdecode_commitarr(dst, farr, valbytes);
+ ret.next = FD_NEXT_ATLIMIT;
+ }
+
+ ret.dst = dst;
+ return ret;
+}
+
+UPB_FORCEINLINE
+static void* fastdecode_fieldmem(upb_Message* msg, uint64_t data) {
+ size_t ofs = data >> 48;
+ return (char*)msg + ofs;
+}
+
+UPB_FORCEINLINE
+static void* fastdecode_getfield(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, uint64_t* data,
+ uint64_t* hasbits, fastdecode_arr* farr,
+ int valbytes, upb_card card) {
+ switch (card) {
+ case CARD_s: {
+ uint8_t hasbit_index = *data >> 24;
+ // Set hasbit and return pointer to scalar field.
+ *hasbits |= 1ull << hasbit_index;
+ return fastdecode_fieldmem(msg, *data);
+ }
+ case CARD_o: {
+ uint16_t case_ofs = *data >> 32;
+ uint32_t* oneof_case = UPB_PTR_AT(msg, case_ofs, uint32_t);
+ uint8_t field_number = *data >> 24;
+ *oneof_case = field_number;
+ return fastdecode_fieldmem(msg, *data);
+ }
+ case CARD_r: {
+ // Get pointer to upb_Array and allocate/expand if necessary.
+ uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
+ upb_Array** arr_p = fastdecode_fieldmem(msg, *data);
+ char* begin;
+ *(uint32_t*)msg |= *hasbits;
+ *hasbits = 0;
+ if (UPB_LIKELY(!*arr_p)) {
+ farr->arr = UPB_PRIVATE(_upb_Array_New)(&d->arena, 8, elem_size_lg2);
+ *arr_p = farr->arr;
+ } else {
+ farr->arr = *arr_p;
+ }
+ begin = _upb_array_ptr(farr->arr);
+ farr->end = begin + (farr->arr->UPB_PRIVATE(capacity) * valbytes);
+ *data = _upb_FastDecoder_LoadTag(ptr);
+ return begin + (farr->arr->UPB_PRIVATE(size) * valbytes);
+ }
+ default:
+ UPB_UNREACHABLE();
+ }
+}
+
+UPB_FORCEINLINE
+static bool fastdecode_flippacked(uint64_t* data, int tagbytes) {
+ *data ^= (0x2 ^ 0x0); // Patch data to match packed wiretype.
+ return fastdecode_checktag(*data, tagbytes);
+}
+
+#define FASTDECODE_CHECKPACKED(tagbytes, card, func) \
+ if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
+ if (card == CARD_r && fastdecode_flippacked(&data, tagbytes)) { \
+ UPB_MUSTTAIL return func(UPB_PARSE_ARGS); \
+ } \
+ RETURN_GENERIC("packed check tag mismatch\n"); \
+ }
+
+/* varint fields **************************************************************/
+
+UPB_FORCEINLINE
+static uint64_t fastdecode_munge(uint64_t val, int valbytes, bool zigzag) {
+ if (valbytes == 1) {
+ return val != 0;
+ } else if (zigzag) {
+ if (valbytes == 4) {
+ uint32_t n = val;
+ return (n >> 1) ^ -(int32_t)(n & 1);
+ } else if (valbytes == 8) {
+ return (val >> 1) ^ -(int64_t)(val & 1);
+ }
+ UPB_UNREACHABLE();
+ }
+ return val;
+}
+
+UPB_FORCEINLINE
+static const char* fastdecode_varint64(const char* ptr, uint64_t* val) {
+ ptr++;
+ *val = (uint8_t)ptr[-1];
+ if (UPB_UNLIKELY(*val & 0x80)) {
+ int i;
+ for (i = 0; i < 8; i++) {
+ ptr++;
+ uint64_t byte = (uint8_t)ptr[-1];
+ *val += (byte - 1) << (7 + 7 * i);
+ if (UPB_LIKELY((byte & 0x80) == 0)) goto done;
+ }
+ ptr++;
+ uint64_t byte = (uint8_t)ptr[-1];
+ if (byte > 1) {
+ return NULL;
+ }
+ *val += (byte - 1) << 63;
+ }
+done:
+ UPB_ASSUME(ptr != NULL);
+ return ptr;
+}
+
+#define FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, zigzag, packed) \
+ uint64_t val; \
+ void* dst; \
+ fastdecode_arr farr; \
+ \
+ FASTDECODE_CHECKPACKED(tagbytes, card, packed); \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
+ card); \
+ if (card == CARD_r) { \
+ if (UPB_UNLIKELY(!dst)) { \
+ RETURN_GENERIC("need array resize\n"); \
+ } \
+ } \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
+ } \
+ \
+ ptr += tagbytes; \
+ ptr = fastdecode_varint64(ptr, &val); \
+ if (ptr == NULL) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ val = fastdecode_munge(val, valbytes, zigzag); \
+ memcpy(dst, &val, valbytes); \
+ \
+ if (card == CARD_r) { \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, valbytes); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+typedef struct {
+ uint8_t valbytes;
+ bool zigzag;
+ void* dst;
+ fastdecode_arr farr;
+} fastdecode_varintdata;
+
+UPB_FORCEINLINE
+static const char* fastdecode_topackedvarint(upb_EpsCopyInputStream* e,
+ const char* ptr, void* ctx) {
+ upb_Decoder* d = (upb_Decoder*)e;
+ fastdecode_varintdata* data = ctx;
+ void* dst = data->dst;
+ uint64_t val;
+
+ while (!_upb_Decoder_IsDone(d, &ptr)) {
+ dst = fastdecode_resizearr(d, dst, &data->farr, data->valbytes);
+ ptr = fastdecode_varint64(ptr, &val);
+ if (ptr == NULL) return NULL;
+ val = fastdecode_munge(val, data->valbytes, data->zigzag);
+ memcpy(dst, &val, data->valbytes);
+ dst = (char*)dst + data->valbytes;
+ }
+
+ fastdecode_commitarr(dst, &data->farr, data->valbytes);
+ return ptr;
+}
+
+#define FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, zigzag, unpacked) \
+ fastdecode_varintdata ctx = {valbytes, zigzag}; \
+ \
+ FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked); \
+ \
+ ctx.dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &ctx.farr, \
+ valbytes, CARD_r); \
+ if (UPB_UNLIKELY(!ctx.dst)) { \
+ RETURN_GENERIC("need array resize\n"); \
+ } \
+ \
+ ptr += tagbytes; \
+ ptr = fastdecode_delimited(d, ptr, &fastdecode_topackedvarint, &ctx); \
+ \
+ if (UPB_UNLIKELY(ptr == NULL)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(d, ptr, msg, table, hasbits, 0);
+
+#define FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, zigzag, unpacked, packed) \
+ if (card == CARD_p) { \
+ FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, zigzag, unpacked); \
+ } else { \
+ FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, zigzag, packed); \
+ }
+
+#define z_ZZ true
+#define b_ZZ false
+#define v_ZZ false
+
+/* Generate all combinations:
+ * {s,o,r,p} x {b1,v4,z4,v8,z8} x {1bt,2bt} */
+
+#define F(card, type, valbytes, tagbytes) \
+ UPB_NOINLINE \
+ const char* upb_p##card##type##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
+ CARD_##card, type##_ZZ, \
+ upb_pr##type##valbytes##_##tagbytes##bt, \
+ upb_pp##type##valbytes##_##tagbytes##bt); \
+ }
+
+#define TYPES(card, tagbytes) \
+ F(card, b, 1, tagbytes) \
+ F(card, v, 4, tagbytes) \
+ F(card, v, 8, tagbytes) \
+ F(card, z, 4, tagbytes) \
+ F(card, z, 8, tagbytes)
+
+#define TAGBYTES(card) \
+ TYPES(card, 1) \
+ TYPES(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+TAGBYTES(p)
+
+#undef z_ZZ
+#undef b_ZZ
+#undef v_ZZ
+#undef o_ONEOF
+#undef s_ONEOF
+#undef r_ONEOF
+#undef F
+#undef TYPES
+#undef TAGBYTES
+#undef FASTDECODE_UNPACKEDVARINT
+#undef FASTDECODE_PACKEDVARINT
+#undef FASTDECODE_VARINT
+
+/* fixed fields ***************************************************************/
+
+#define FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, packed) \
+ void* dst; \
+ fastdecode_arr farr; \
+ \
+ FASTDECODE_CHECKPACKED(tagbytes, card, packed) \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
+ card); \
+ if (card == CARD_r) { \
+ if (UPB_UNLIKELY(!dst)) { \
+ RETURN_GENERIC("couldn't allocate array in arena\n"); \
+ } \
+ } \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
+ } \
+ \
+ ptr += tagbytes; \
+ memcpy(dst, ptr, valbytes); \
+ ptr += valbytes; \
+ \
+ if (card == CARD_r) { \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, valbytes); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+#define FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, unpacked) \
+ FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked) \
+ \
+ ptr += tagbytes; \
+ int size = (uint8_t)ptr[0]; \
+ ptr++; \
+ if (size & 0x80) { \
+ ptr = fastdecode_longsize(ptr, &size); \
+ } \
+ \
+ if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckDataSizeAvailable( \
+ &d->input, ptr, size) || \
+ (size % valbytes) != 0)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ upb_Array** arr_p = fastdecode_fieldmem(msg, data); \
+ upb_Array* arr = *arr_p; \
+ uint8_t elem_size_lg2 = __builtin_ctz(valbytes); \
+ int elems = size / valbytes; \
+ \
+ if (UPB_LIKELY(!arr)) { \
+ *arr_p = arr = \
+ UPB_PRIVATE(_upb_Array_New)(&d->arena, elems, elem_size_lg2); \
+ if (!arr) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ } else { \
+ _upb_Array_ResizeUninitialized(arr, elems, &d->arena); \
+ } \
+ \
+ char* dst = _upb_array_ptr(arr); \
+ memcpy(dst, ptr, size); \
+ arr->UPB_PRIVATE(size) = elems; \
+ \
+ ptr += size; \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+#define FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, unpacked, packed) \
+ if (card == CARD_p) { \
+ FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, unpacked); \
+ } else { \
+ FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
+ valbytes, card, packed); \
+ }
+
+/* Generate all combinations:
+ * {s,o,r,p} x {f4,f8} x {1bt,2bt} */
+
+#define F(card, valbytes, tagbytes) \
+ UPB_NOINLINE \
+ const char* upb_p##card##f##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
+ CARD_##card, upb_ppf##valbytes##_##tagbytes##bt, \
+ upb_prf##valbytes##_##tagbytes##bt); \
+ }
+
+#define TYPES(card, tagbytes) \
+ F(card, 4, tagbytes) \
+ F(card, 8, tagbytes)
+
+#define TAGBYTES(card) \
+ TYPES(card, 1) \
+ TYPES(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+TAGBYTES(p)
+
+#undef F
+#undef TYPES
+#undef TAGBYTES
+#undef FASTDECODE_UNPACKEDFIXED
+#undef FASTDECODE_PACKEDFIXED
+
+/* string fields **************************************************************/
+
+typedef const char* fastdecode_copystr_func(struct upb_Decoder* d,
+ const char* ptr, upb_Message* msg,
+ const upb_MiniTable* table,
+ uint64_t hasbits,
+ upb_StringView* dst);
+
+UPB_NOINLINE
+static const char* fastdecode_verifyutf8(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t data) {
+ upb_StringView* dst = (upb_StringView*)data;
+ if (!_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) {
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
+ }
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+}
+
+#define FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, validate_utf8) \
+ int size = (uint8_t)ptr[0]; /* Could plumb through hasbits. */ \
+ ptr++; \
+ if (size & 0x80) { \
+ ptr = fastdecode_longsize(ptr, &size); \
+ } \
+ \
+ if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, size))) { \
+ dst->size = 0; \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ const char* s_ptr = ptr; \
+ ptr = upb_EpsCopyInputStream_ReadString(&d->input, &s_ptr, size, &d->arena); \
+ if (!ptr) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory); \
+ dst->data = s_ptr; \
+ dst->size = size; \
+ \
+ if (validate_utf8) { \
+ data = (uint64_t)dst; \
+ UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
+ } else { \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
+ }
+
+UPB_NOINLINE
+static const char* fastdecode_longstring_utf8(struct upb_Decoder* d,
+ const char* ptr, upb_Message* msg,
+ intptr_t table, uint64_t hasbits,
+ uint64_t data) {
+ upb_StringView* dst = (upb_StringView*)data;
+ FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, true);
+}
+
+UPB_NOINLINE
+static const char* fastdecode_longstring_noutf8(
+ struct upb_Decoder* d, const char* ptr, upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t data) {
+ upb_StringView* dst = (upb_StringView*)data;
+ FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, false);
+}
+
+UPB_FORCEINLINE
+static void fastdecode_docopy(upb_Decoder* d, const char* ptr, uint32_t size,
+ int copy, char* data, size_t data_offset,
+ upb_StringView* dst) {
+ d->arena.UPB_PRIVATE(ptr) += copy;
+ dst->data = data + data_offset;
+ UPB_UNPOISON_MEMORY_REGION(data, copy);
+ memcpy(data, ptr, copy);
+ UPB_POISON_MEMORY_REGION(data + data_offset + size,
+ copy - data_offset - size);
+}
+
+#define FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
+ card, validate_utf8) \
+ upb_StringView* dst; \
+ fastdecode_arr farr; \
+ int64_t size; \
+ size_t arena_has; \
+ size_t common_has; \
+ char* buf; \
+ \
+ UPB_ASSERT(!upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0)); \
+ UPB_ASSERT(fastdecode_checktag(data, tagbytes)); \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
+ sizeof(upb_StringView), card); \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
+ } \
+ \
+ size = (uint8_t)ptr[tagbytes]; \
+ ptr += tagbytes + 1; \
+ dst->size = size; \
+ \
+ buf = d->arena.UPB_PRIVATE(ptr); \
+ arena_has = UPB_PRIVATE(_upb_ArenaHas)(&d->arena); \
+ common_has = UPB_MIN(arena_has, \
+ upb_EpsCopyInputStream_BytesAvailable(&d->input, ptr)); \
+ \
+ if (UPB_LIKELY(size <= 15 - tagbytes)) { \
+ if (arena_has < 16) goto longstr; \
+ fastdecode_docopy(d, ptr - tagbytes - 1, size, 16, buf, tagbytes + 1, \
+ dst); \
+ } else if (UPB_LIKELY(size <= 32)) { \
+ if (UPB_UNLIKELY(common_has < 32)) goto longstr; \
+ fastdecode_docopy(d, ptr, size, 32, buf, 0, dst); \
+ } else if (UPB_LIKELY(size <= 64)) { \
+ if (UPB_UNLIKELY(common_has < 64)) goto longstr; \
+ fastdecode_docopy(d, ptr, size, 64, buf, 0, dst); \
+ } else if (UPB_LIKELY(size < 128)) { \
+ if (UPB_UNLIKELY(common_has < 128)) goto longstr; \
+ fastdecode_docopy(d, ptr, size, 128, buf, 0, dst); \
+ } else { \
+ goto longstr; \
+ } \
+ \
+ ptr += size; \
+ \
+ if (card == CARD_r) { \
+ if (validate_utf8 && \
+ !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
+ } \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ if (card != CARD_r && validate_utf8) { \
+ data = (uint64_t)dst; \
+ UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
+ \
+ longstr: \
+ if (card == CARD_r) { \
+ fastdecode_commitarr(dst + 1, &farr, sizeof(upb_StringView)); \
+ } \
+ ptr--; \
+ if (validate_utf8) { \
+ UPB_MUSTTAIL return fastdecode_longstring_utf8(d, ptr, msg, table, \
+ hasbits, (uint64_t)dst); \
+ } else { \
+ UPB_MUSTTAIL return fastdecode_longstring_noutf8(d, ptr, msg, table, \
+ hasbits, (uint64_t)dst); \
+ }
+
+#define FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, card, \
+ copyfunc, validate_utf8) \
+ upb_StringView* dst; \
+ fastdecode_arr farr; \
+ int64_t size; \
+ \
+ if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
+ RETURN_GENERIC("string field tag mismatch\n"); \
+ } \
+ \
+ if (UPB_UNLIKELY( \
+ !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0))) { \
+ UPB_MUSTTAIL return copyfunc(UPB_PARSE_ARGS); \
+ } \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
+ sizeof(upb_StringView), card); \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
+ } \
+ \
+ size = (int8_t)ptr[tagbytes]; \
+ ptr += tagbytes + 1; \
+ \
+ if (UPB_UNLIKELY( \
+ !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, size))) { \
+ ptr--; \
+ if (validate_utf8) { \
+ return fastdecode_longstring_utf8(d, ptr, msg, table, hasbits, \
+ (uint64_t)dst); \
+ } else { \
+ return fastdecode_longstring_noutf8(d, ptr, msg, table, hasbits, \
+ (uint64_t)dst); \
+ } \
+ } \
+ \
+ dst->data = ptr; \
+ dst->size = size; \
+ ptr = upb_EpsCopyInputStream_ReadStringAliased(&d->input, &dst->data, \
+ dst->size); \
+ \
+ if (card == CARD_r) { \
+ if (validate_utf8 && \
+ !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
+ } \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ return ptr; \
+ } \
+ } \
+ \
+ if (card != CARD_r && validate_utf8) { \
+ data = (uint64_t)dst; \
+ UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
+ } \
+ \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+/* Generate all combinations:
+ * {p,c} x {s,o,r} x {s, b} x {1bt,2bt} */
+
+#define s_VALIDATE true
+#define b_VALIDATE false
+
+#define F(card, tagbytes, type) \
+ UPB_NOINLINE \
+ const char* upb_c##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
+ CARD_##card, type##_VALIDATE); \
+ } \
+ const char* upb_p##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
+ FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, \
+ CARD_##card, upb_c##card##type##_##tagbytes##bt, \
+ type##_VALIDATE); \
+ }
+
+#define UTF8(card, tagbytes) \
+ F(card, tagbytes, s) \
+ F(card, tagbytes, b)
+
+#define TAGBYTES(card) \
+ UTF8(card, 1) \
+ UTF8(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+
+#undef s_VALIDATE
+#undef b_VALIDATE
+#undef F
+#undef TAGBYTES
+#undef FASTDECODE_LONGSTRING
+#undef FASTDECODE_COPYSTRING
+#undef FASTDECODE_STRING
+
+/* message fields *************************************************************/
+
+UPB_INLINE
+upb_Message* decode_newmsg_ceil(upb_Decoder* d, const upb_MiniTable* m,
+ int msg_ceil_bytes) {
+ size_t size = m->UPB_PRIVATE(size) + sizeof(upb_Message_Internal);
+ char* msg_data;
+ if (UPB_LIKELY(msg_ceil_bytes > 0 &&
+ UPB_PRIVATE(_upb_ArenaHas)(&d->arena) >= msg_ceil_bytes)) {
+ UPB_ASSERT(size <= (size_t)msg_ceil_bytes);
+ msg_data = d->arena.UPB_PRIVATE(ptr);
+ d->arena.UPB_PRIVATE(ptr) += size;
+ UPB_UNPOISON_MEMORY_REGION(msg_data, msg_ceil_bytes);
+ memset(msg_data, 0, msg_ceil_bytes);
+ UPB_POISON_MEMORY_REGION(msg_data + size, msg_ceil_bytes - size);
+ } else {
+ msg_data = (char*)upb_Arena_Malloc(&d->arena, size);
+ memset(msg_data, 0, size);
+ }
+ return msg_data + sizeof(upb_Message_Internal);
+}
+
+typedef struct {
+ intptr_t table;
+ upb_Message* msg;
+} fastdecode_submsgdata;
+
+UPB_FORCEINLINE
+static const char* fastdecode_tosubmsg(upb_EpsCopyInputStream* e,
+ const char* ptr, void* ctx) {
+ upb_Decoder* d = (upb_Decoder*)e;
+ fastdecode_submsgdata* submsg = ctx;
+ ptr = fastdecode_dispatch(d, ptr, submsg->msg, submsg->table, 0, 0);
+ UPB_ASSUME(ptr != NULL);
+ return ptr;
+}
+
+#define FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, \
+ msg_ceil_bytes, card) \
+ \
+ if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
+ RETURN_GENERIC("submessage field tag mismatch\n"); \
+ } \
+ \
+ if (--d->depth == 0) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded); \
+ } \
+ \
+ upb_Message** dst; \
+ uint32_t submsg_idx = (data >> 16) & 0xff; \
+ const upb_MiniTable* tablep = decode_totablep(table); \
+ const upb_MiniTable* subtablep = upb_MiniTableSub_Message( \
+ *UPB_PRIVATE(_upb_MiniTable_GetSubByIndex)(tablep, submsg_idx)); \
+ fastdecode_submsgdata submsg = {decode_totable(subtablep)}; \
+ fastdecode_arr farr; \
+ \
+ if (subtablep->UPB_PRIVATE(table_mask) == (uint8_t)-1) { \
+ d->depth++; \
+ RETURN_GENERIC("submessage doesn't have fast tables."); \
+ } \
+ \
+ dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
+ sizeof(upb_Message*), card); \
+ \
+ if (card == CARD_s) { \
+ *(uint32_t*)msg |= hasbits; \
+ hasbits = 0; \
+ } \
+ \
+ again: \
+ if (card == CARD_r) { \
+ dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_Message*)); \
+ } \
+ \
+ submsg.msg = *dst; \
+ \
+ if (card == CARD_r || UPB_LIKELY(!submsg.msg)) { \
+ *dst = submsg.msg = decode_newmsg_ceil(d, subtablep, msg_ceil_bytes); \
+ } \
+ \
+ ptr += tagbytes; \
+ ptr = fastdecode_delimited(d, ptr, fastdecode_tosubmsg, &submsg); \
+ \
+ if (UPB_UNLIKELY(ptr == NULL || d->end_group != DECODE_NOGROUP)) { \
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
+ } \
+ \
+ if (card == CARD_r) { \
+ fastdecode_nextret ret = fastdecode_nextrepeated( \
+ d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_Message*)); \
+ switch (ret.next) { \
+ case FD_NEXT_SAMEFIELD: \
+ dst = ret.dst; \
+ goto again; \
+ case FD_NEXT_OTHERFIELD: \
+ d->depth++; \
+ data = ret.tag; \
+ UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
+ case FD_NEXT_ATLIMIT: \
+ d->depth++; \
+ return ptr; \
+ } \
+ } \
+ \
+ d->depth++; \
+ UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
+
+#define F(card, tagbytes, size_ceil, ceil_arg) \
+ const char* upb_p##card##m_##tagbytes##bt_max##size_ceil##b( \
+ UPB_PARSE_PARAMS) { \
+ FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, ceil_arg, \
+ CARD_##card); \
+ }
+
+#define SIZES(card, tagbytes) \
+ F(card, tagbytes, 64, 64) \
+ F(card, tagbytes, 128, 128) \
+ F(card, tagbytes, 192, 192) \
+ F(card, tagbytes, 256, 256) \
+ F(card, tagbytes, max, -1)
+
+#define TAGBYTES(card) \
+ SIZES(card, 1) \
+ SIZES(card, 2)
+
+TAGBYTES(s)
+TAGBYTES(o)
+TAGBYTES(r)
+
+#undef TAGBYTES
+#undef SIZES
+#undef F
+#undef FASTDECODE_SUBMSG
+
+#endif /* UPB_FASTTABLE */
+
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+UPB_NOINLINE UPB_PRIVATE(_upb_WireReader_LongVarint)
+ UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val) {
+ UPB_PRIVATE(_upb_WireReader_LongVarint) ret = {NULL, 0};
+ uint64_t byte;
+ int i;
+ for (i = 1; i < 10; i++) {
+ byte = (uint8_t)ptr[i];
+ val += (byte - 1) << (i * 7);
+ if (!(byte & 0x80)) {
+ ret.ptr = ptr + i + 1;
+ ret.val = val;
+ return ret;
+ }
+ }
+ return ret;
+}
+
+const char* UPB_PRIVATE(_upb_WireReader_SkipGroup)(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream) {
+ if (--depth_limit == 0) return NULL;
+ uint32_t end_group_tag = (tag & ~7ULL) | kUpb_WireType_EndGroup;
+ while (!upb_EpsCopyInputStream_IsDone(stream, &ptr)) {
+ uint32_t tag;
+ ptr = upb_WireReader_ReadTag(ptr, &tag);
+ if (!ptr) return NULL;
+ if (tag == end_group_tag) return ptr;
+ ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, stream);
+ if (!ptr) return NULL;
+ }
+ return ptr;
+}
+
+/*
+ * upb_table Implementation
+ *
+ * Implementation is heavily inspired by Lua's ltable.c.
+ */
+
+#include <string.h>
+
+
+// Must be last.
+
+#define UPB_MAXARRSIZE 16 // 2**16 = 64k.
+
+// From Chromium.
+#define ARRAY_SIZE(x) \
+ ((sizeof(x) / sizeof(0 [x])) / ((size_t)(!(sizeof(x) % sizeof(0 [x])))))
+
+static const double MAX_LOAD = 0.85;
+
+/* The minimum utilization of the array part of a mixed hash/array table. This
+ * is a speed/memory-usage tradeoff (though it's not straightforward because of
+ * cache effects). The lower this is, the more memory we'll use. */
+static const double MIN_DENSITY = 0.1;
+
+static bool is_pow2(uint64_t v) { return v == 0 || (v & (v - 1)) == 0; }
+
+static upb_value _upb_value_val(uint64_t val) {
+ upb_value ret;
+ _upb_value_setval(&ret, val);
+ return ret;
+}
+
+static int log2ceil(uint64_t v) {
+ int ret = 0;
+ bool pow2 = is_pow2(v);
+ while (v >>= 1) ret++;
+ ret = pow2 ? ret : ret + 1; // Ceiling.
+ return UPB_MIN(UPB_MAXARRSIZE, ret);
+}
+
+/* A type to represent the lookup key of either a strtable or an inttable. */
+typedef union {
+ uintptr_t num;
+ struct {
+ const char* str;
+ size_t len;
+ } str;
+} lookupkey_t;
+
+static lookupkey_t strkey2(const char* str, size_t len) {
+ lookupkey_t k;
+ k.str.str = str;
+ k.str.len = len;
+ return k;
+}
+
+static lookupkey_t intkey(uintptr_t key) {
+ lookupkey_t k;
+ k.num = key;
+ return k;
+}
+
+typedef uint32_t hashfunc_t(upb_tabkey key);
+typedef bool eqlfunc_t(upb_tabkey k1, lookupkey_t k2);
+
+/* Base table (shared code) ***************************************************/
+
+static uint32_t upb_inthash(uintptr_t key) { return (uint32_t)key; }
+
+static const upb_tabent* upb_getentry(const upb_table* t, uint32_t hash) {
+ return t->entries + (hash & t->mask);
+}
+
+static bool upb_arrhas(upb_tabval key) { return key.val != (uint64_t)-1; }
+
+static bool isfull(upb_table* t) { return t->count == t->max_count; }
+
+static bool init(upb_table* t, uint8_t size_lg2, upb_Arena* a) {
+ size_t bytes;
+
+ t->count = 0;
+ t->size_lg2 = size_lg2;
+ t->mask = upb_table_size(t) ? upb_table_size(t) - 1 : 0;
+ t->max_count = upb_table_size(t) * MAX_LOAD;
+ bytes = upb_table_size(t) * sizeof(upb_tabent);
+ if (bytes > 0) {
+ t->entries = upb_Arena_Malloc(a, bytes);
+ if (!t->entries) return false;
+ memset(t->entries, 0, bytes);
+ } else {
+ t->entries = NULL;
+ }
+ return true;
+}
+
+static upb_tabent* emptyent(upb_table* t, upb_tabent* e) {
+ upb_tabent* begin = t->entries;
+ upb_tabent* end = begin + upb_table_size(t);
+ for (e = e + 1; e < end; e++) {
+ if (upb_tabent_isempty(e)) return e;
+ }
+ for (e = begin; e < end; e++) {
+ if (upb_tabent_isempty(e)) return e;
+ }
+ UPB_ASSERT(false);
+ return NULL;
+}
+
+static upb_tabent* getentry_mutable(upb_table* t, uint32_t hash) {
+ return (upb_tabent*)upb_getentry(t, hash);
+}
+
+static const upb_tabent* findentry(const upb_table* t, lookupkey_t key,
+ uint32_t hash, eqlfunc_t* eql) {
+ const upb_tabent* e;
+
+ if (t->size_lg2 == 0) return NULL;
+ e = upb_getentry(t, hash);
+ if (upb_tabent_isempty(e)) return NULL;
+ while (1) {
+ if (eql(e->key, key)) return e;
+ if ((e = e->next) == NULL) return NULL;
+ }
+}
+
+static upb_tabent* findentry_mutable(upb_table* t, lookupkey_t key,
+ uint32_t hash, eqlfunc_t* eql) {
+ return (upb_tabent*)findentry(t, key, hash, eql);
+}
+
+static bool lookup(const upb_table* t, lookupkey_t key, upb_value* v,
+ uint32_t hash, eqlfunc_t* eql) {
+ const upb_tabent* e = findentry(t, key, hash, eql);
+ if (e) {
+ if (v) {
+ _upb_value_setval(v, e->val.val);
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/* The given key must not already exist in the table. */
+static void insert(upb_table* t, lookupkey_t key, upb_tabkey tabkey,
+ upb_value val, uint32_t hash, hashfunc_t* hashfunc,
+ eqlfunc_t* eql) {
+ upb_tabent* mainpos_e;
+ upb_tabent* our_e;
+
+ UPB_ASSERT(findentry(t, key, hash, eql) == NULL);
+
+ t->count++;
+ mainpos_e = getentry_mutable(t, hash);
+ our_e = mainpos_e;
+
+ if (upb_tabent_isempty(mainpos_e)) {
+ /* Our main position is empty; use it. */
+ our_e->next = NULL;
+ } else {
+ /* Collision. */
+ upb_tabent* new_e = emptyent(t, mainpos_e);
+ /* Head of collider's chain. */
+ upb_tabent* chain = getentry_mutable(t, hashfunc(mainpos_e->key));
+ if (chain == mainpos_e) {
+ /* Existing ent is in its main position (it has the same hash as us, and
+ * is the head of our chain). Insert to new ent and append to this chain.
+ */
+ new_e->next = mainpos_e->next;
+ mainpos_e->next = new_e;
+ our_e = new_e;
+ } else {
+ /* Existing ent is not in its main position (it is a node in some other
+ * chain). This implies that no existing ent in the table has our hash.
+ * Evict it (updating its chain) and use its ent for head of our chain. */
+ *new_e = *mainpos_e; /* copies next. */
+ while (chain->next != mainpos_e) {
+ chain = (upb_tabent*)chain->next;
+ UPB_ASSERT(chain);
+ }
+ chain->next = new_e;
+ our_e = mainpos_e;
+ our_e->next = NULL;
+ }
+ }
+ our_e->key = tabkey;
+ our_e->val.val = val.val;
+ UPB_ASSERT(findentry(t, key, hash, eql) == our_e);
+}
+
+static bool rm(upb_table* t, lookupkey_t key, upb_value* val,
+ upb_tabkey* removed, uint32_t hash, eqlfunc_t* eql) {
+ upb_tabent* chain = getentry_mutable(t, hash);
+ if (upb_tabent_isempty(chain)) return false;
+ if (eql(chain->key, key)) {
+ /* Element to remove is at the head of its chain. */
+ t->count--;
+ if (val) _upb_value_setval(val, chain->val.val);
+ if (removed) *removed = chain->key;
+ if (chain->next) {
+ upb_tabent* move = (upb_tabent*)chain->next;
+ *chain = *move;
+ move->key = 0; /* Make the slot empty. */
+ } else {
+ chain->key = 0; /* Make the slot empty. */
+ }
+ return true;
+ } else {
+ /* Element to remove is either in a non-head position or not in the
+ * table. */
+ while (chain->next && !eql(chain->next->key, key)) {
+ chain = (upb_tabent*)chain->next;
+ }
+ if (chain->next) {
+ /* Found element to remove. */
+ upb_tabent* rm = (upb_tabent*)chain->next;
+ t->count--;
+ if (val) _upb_value_setval(val, chain->next->val.val);
+ if (removed) *removed = rm->key;
+ rm->key = 0; /* Make the slot empty. */
+ chain->next = rm->next;
+ return true;
+ } else {
+ /* Element to remove is not in the table. */
+ return false;
+ }
+ }
+}
+
+static size_t next(const upb_table* t, size_t i) {
+ do {
+ if (++i >= upb_table_size(t)) return SIZE_MAX - 1; /* Distinct from -1. */
+ } while (upb_tabent_isempty(&t->entries[i]));
+
+ return i;
+}
+
+static size_t begin(const upb_table* t) { return next(t, -1); }
+
+/* upb_strtable ***************************************************************/
+
+/* A simple "subclass" of upb_table that only adds a hash function for strings.
+ */
+
+static upb_tabkey strcopy(lookupkey_t k2, upb_Arena* a) {
+ uint32_t len = (uint32_t)k2.str.len;
+ char* str = upb_Arena_Malloc(a, k2.str.len + sizeof(uint32_t) + 1);
+ if (str == NULL) return 0;
+ memcpy(str, &len, sizeof(uint32_t));
+ if (k2.str.len) memcpy(str + sizeof(uint32_t), k2.str.str, k2.str.len);
+ str[sizeof(uint32_t) + k2.str.len] = '\0';
+ return (uintptr_t)str;
+}
+
+/* Adapted from ABSL's wyhash. */
+
+static uint64_t UnalignedLoad64(const void* p) {
+ uint64_t val;
+ memcpy(&val, p, 8);
+ return val;
+}
+
+static uint32_t UnalignedLoad32(const void* p) {
+ uint32_t val;
+ memcpy(&val, p, 4);
+ return val;
+}
+
+#if defined(_MSC_VER) && defined(_M_X64)
+#include <intrin.h>
+#endif
+
+/* Computes a * b, returning the low 64 bits of the result and storing the high
+ * 64 bits in |*high|. */
+static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) {
+#ifdef __SIZEOF_INT128__
+ __uint128_t p = v0;
+ p *= v1;
+ *out_high = (uint64_t)(p >> 64);
+ return (uint64_t)p;
+#elif defined(_MSC_VER) && defined(_M_X64)
+ return _umul128(v0, v1, out_high);
+#else
+ uint64_t a32 = v0 >> 32;
+ uint64_t a00 = v0 & 0xffffffff;
+ uint64_t b32 = v1 >> 32;
+ uint64_t b00 = v1 & 0xffffffff;
+ uint64_t high = a32 * b32;
+ uint64_t low = a00 * b00;
+ uint64_t mid1 = a32 * b00;
+ uint64_t mid2 = a00 * b32;
+ low += (mid1 << 32) + (mid2 << 32);
+ // Omit carry bit, for mixing we do not care about exact numerical precision.
+ high += (mid1 >> 32) + (mid2 >> 32);
+ *out_high = high;
+ return low;
+#endif
+}
+
+static uint64_t WyhashMix(uint64_t v0, uint64_t v1) {
+ uint64_t high;
+ uint64_t low = upb_umul128(v0, v1, &high);
+ return low ^ high;
+}
+
+static uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
+ const uint64_t salt[]) {
+ const uint8_t* ptr = (const uint8_t*)data;
+ uint64_t starting_length = (uint64_t)len;
+ uint64_t current_state = seed ^ salt[0];
+
+ if (len > 64) {
+ // If we have more than 64 bytes, we're going to handle chunks of 64
+ // bytes at a time. We're going to build up two separate hash states
+ // which we will then hash together.
+ uint64_t duplicated_state = current_state;
+
+ do {
+ uint64_t a = UnalignedLoad64(ptr);
+ uint64_t b = UnalignedLoad64(ptr + 8);
+ uint64_t c = UnalignedLoad64(ptr + 16);
+ uint64_t d = UnalignedLoad64(ptr + 24);
+ uint64_t e = UnalignedLoad64(ptr + 32);
+ uint64_t f = UnalignedLoad64(ptr + 40);
+ uint64_t g = UnalignedLoad64(ptr + 48);
+ uint64_t h = UnalignedLoad64(ptr + 56);
+
+ uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state);
+ uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state);
+ current_state = (cs0 ^ cs1);
+
+ uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state);
+ uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state);
+ duplicated_state = (ds0 ^ ds1);
+
+ ptr += 64;
+ len -= 64;
+ } while (len > 64);
+
+ current_state = current_state ^ duplicated_state;
+ }
+
+ // We now have a data `ptr` with at most 64 bytes and the current state
+ // of the hashing state machine stored in current_state.
+ while (len > 16) {
+ uint64_t a = UnalignedLoad64(ptr);
+ uint64_t b = UnalignedLoad64(ptr + 8);
+
+ current_state = WyhashMix(a ^ salt[1], b ^ current_state);
+
+ ptr += 16;
+ len -= 16;
+ }
+
+ // We now have a data `ptr` with at most 16 bytes.
+ uint64_t a = 0;
+ uint64_t b = 0;
+ if (len > 8) {
+ // When we have at least 9 and at most 16 bytes, set A to the first 64
+ // bits of the input and B to the last 64 bits of the input. Yes, they will
+ // overlap in the middle if we are working with less than the full 16
+ // bytes.
+ a = UnalignedLoad64(ptr);
+ b = UnalignedLoad64(ptr + len - 8);
+ } else if (len > 3) {
+ // If we have at least 4 and at most 8 bytes, set A to the first 32
+ // bits and B to the last 32 bits.
+ a = UnalignedLoad32(ptr);
+ b = UnalignedLoad32(ptr + len - 4);
+ } else if (len > 0) {
+ // If we have at least 1 and at most 3 bytes, read all of the provided
+ // bits into A, with some adjustments.
+ a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
+ b = 0;
+ } else {
+ a = 0;
+ b = 0;
+ }
+
+ uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state);
+ uint64_t z = salt[1] ^ starting_length;
+ return WyhashMix(w, z);
+}
+
+const uint64_t kWyhashSalt[5] = {
+ 0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL,
+ 0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL,
+};
+
+uint32_t _upb_Hash(const void* p, size_t n, uint64_t seed) {
+ return Wyhash(p, n, seed, kWyhashSalt);
+}
+
+static uint32_t _upb_Hash_NoSeed(const char* p, size_t n) {
+ return _upb_Hash(p, n, 0);
+}
+
+static uint32_t strhash(upb_tabkey key) {
+ uint32_t len;
+ char* str = upb_tabstr(key, &len);
+ return _upb_Hash_NoSeed(str, len);
+}
+
+static bool streql(upb_tabkey k1, lookupkey_t k2) {
+ uint32_t len;
+ char* str = upb_tabstr(k1, &len);
+ return len == k2.str.len && (len == 0 || memcmp(str, k2.str.str, len) == 0);
+}
+
+bool upb_strtable_init(upb_strtable* t, size_t expected_size, upb_Arena* a) {
+ // Multiply by approximate reciprocal of MAX_LOAD (0.85), with pow2
+ // denominator.
+ size_t need_entries = (expected_size + 1) * 1204 / 1024;
+ UPB_ASSERT(need_entries >= expected_size * 0.85);
+ int size_lg2 = upb_Log2Ceiling(need_entries);
+ return init(&t->t, size_lg2, a);
+}
+
+void upb_strtable_clear(upb_strtable* t) {
+ size_t bytes = upb_table_size(&t->t) * sizeof(upb_tabent);
+ t->t.count = 0;
+ memset((char*)t->t.entries, 0, bytes);
+}
+
+bool upb_strtable_resize(upb_strtable* t, size_t size_lg2, upb_Arena* a) {
+ upb_strtable new_table;
+ if (!init(&new_table.t, size_lg2, a)) return false;
+
+ intptr_t iter = UPB_STRTABLE_BEGIN;
+ upb_StringView key;
+ upb_value val;
+ while (upb_strtable_next2(t, &key, &val, &iter)) {
+ upb_strtable_insert(&new_table, key.data, key.size, val, a);
+ }
+ *t = new_table;
+ return true;
+}
+
+bool upb_strtable_insert(upb_strtable* t, const char* k, size_t len,
+ upb_value v, upb_Arena* a) {
+ lookupkey_t key;
+ upb_tabkey tabkey;
+ uint32_t hash;
+
+ if (isfull(&t->t)) {
+ /* Need to resize. New table of double the size, add old elements to it. */
+ if (!upb_strtable_resize(t, t->t.size_lg2 + 1, a)) {
+ return false;
+ }
+ }
+
+ key = strkey2(k, len);
+ tabkey = strcopy(key, a);
+ if (tabkey == 0) return false;
+
+ hash = _upb_Hash_NoSeed(key.str.str, key.str.len);
+ insert(&t->t, key, tabkey, v, hash, &strhash, &streql);
+ return true;
+}
+
+bool upb_strtable_lookup2(const upb_strtable* t, const char* key, size_t len,
+ upb_value* v) {
+ uint32_t hash = _upb_Hash_NoSeed(key, len);
+ return lookup(&t->t, strkey2(key, len), v, hash, &streql);
+}
+
+bool upb_strtable_remove2(upb_strtable* t, const char* key, size_t len,
+ upb_value* val) {
+ uint32_t hash = _upb_Hash_NoSeed(key, len);
+ upb_tabkey tabkey;
+ return rm(&t->t, strkey2(key, len), val, &tabkey, hash, &streql);
+}
+
+/* Iteration */
+
+void upb_strtable_begin(upb_strtable_iter* i, const upb_strtable* t) {
+ i->t = t;
+ i->index = begin(&t->t);
+}
+
+void upb_strtable_next(upb_strtable_iter* i) {
+ i->index = next(&i->t->t, i->index);
+}
+
+bool upb_strtable_done(const upb_strtable_iter* i) {
+ if (!i->t) return true;
+ return i->index >= upb_table_size(&i->t->t) ||
+ upb_tabent_isempty(str_tabent(i));
+}
+
+upb_StringView upb_strtable_iter_key(const upb_strtable_iter* i) {
+ upb_StringView key;
+ uint32_t len;
+ UPB_ASSERT(!upb_strtable_done(i));
+ key.data = upb_tabstr(str_tabent(i)->key, &len);
+ key.size = len;
+ return key;
+}
+
+upb_value upb_strtable_iter_value(const upb_strtable_iter* i) {
+ UPB_ASSERT(!upb_strtable_done(i));
+ return _upb_value_val(str_tabent(i)->val.val);
+}
+
+void upb_strtable_iter_setdone(upb_strtable_iter* i) {
+ i->t = NULL;
+ i->index = SIZE_MAX;
+}
+
+bool upb_strtable_iter_isequal(const upb_strtable_iter* i1,
+ const upb_strtable_iter* i2) {
+ if (upb_strtable_done(i1) && upb_strtable_done(i2)) return true;
+ return i1->t == i2->t && i1->index == i2->index;
+}
+
+/* upb_inttable ***************************************************************/
+
+/* For inttables we use a hybrid structure where small keys are kept in an
+ * array and large keys are put in the hash table. */
+
+static uint32_t inthash(upb_tabkey key) { return upb_inthash(key); }
+
+static bool inteql(upb_tabkey k1, lookupkey_t k2) { return k1 == k2.num; }
+
+static upb_tabval* mutable_array(upb_inttable* t) {
+ return (upb_tabval*)t->array;
+}
+
+static upb_tabval* inttable_val(upb_inttable* t, uintptr_t key) {
+ if (key < t->array_size) {
+ return upb_arrhas(t->array[key]) ? &(mutable_array(t)[key]) : NULL;
+ } else {
+ upb_tabent* e =
+ findentry_mutable(&t->t, intkey(key), upb_inthash(key), &inteql);
+ return e ? &e->val : NULL;
+ }
+}
+
+static const upb_tabval* inttable_val_const(const upb_inttable* t,
+ uintptr_t key) {
+ return inttable_val((upb_inttable*)t, key);
+}
+
+size_t upb_inttable_count(const upb_inttable* t) {
+ return t->t.count + t->array_count;
+}
+
+static void check(upb_inttable* t) {
+ UPB_UNUSED(t);
+#if defined(UPB_DEBUG_TABLE) && !defined(NDEBUG)
+ {
+ // This check is very expensive (makes inserts/deletes O(N)).
+ size_t count = 0;
+ intptr_t iter = UPB_INTTABLE_BEGIN;
+ uintptr_t key;
+ upb_value val;
+ while (upb_inttable_next(t, &key, &val, &iter)) {
+ UPB_ASSERT(upb_inttable_lookup(t, key, NULL));
+ }
+ UPB_ASSERT(count == upb_inttable_count(t));
+ }
+#endif
+}
+
+bool upb_inttable_sizedinit(upb_inttable* t, size_t asize, int hsize_lg2,
+ upb_Arena* a) {
+ size_t array_bytes;
+
+ if (!init(&t->t, hsize_lg2, a)) return false;
+ /* Always make the array part at least 1 long, so that we know key 0
+ * won't be in the hash part, which simplifies things. */
+ t->array_size = UPB_MAX(1, asize);
+ t->array_count = 0;
+ array_bytes = t->array_size * sizeof(upb_value);
+ t->array = upb_Arena_Malloc(a, array_bytes);
+ if (!t->array) {
+ return false;
+ }
+ memset(mutable_array(t), 0xff, array_bytes);
+ check(t);
+ return true;
+}
+
+bool upb_inttable_init(upb_inttable* t, upb_Arena* a) {
+ return upb_inttable_sizedinit(t, 0, 4, a);
+}
+
+bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
+ upb_Arena* a) {
+ upb_tabval tabval;
+ tabval.val = val.val;
+ UPB_ASSERT(
+ upb_arrhas(tabval)); /* This will reject (uint64_t)-1. Fix this. */
+
+ if (key < t->array_size) {
+ UPB_ASSERT(!upb_arrhas(t->array[key]));
+ t->array_count++;
+ mutable_array(t)[key].val = val.val;
+ } else {
+ if (isfull(&t->t)) {
+ /* Need to resize the hash part, but we re-use the array part. */
+ size_t i;
+ upb_table new_table;
+
+ if (!init(&new_table, t->t.size_lg2 + 1, a)) {
+ return false;
+ }
+
+ for (i = begin(&t->t); i < upb_table_size(&t->t); i = next(&t->t, i)) {
+ const upb_tabent* e = &t->t.entries[i];
+ uint32_t hash;
+ upb_value v;
+
+ _upb_value_setval(&v, e->val.val);
+ hash = upb_inthash(e->key);
+ insert(&new_table, intkey(e->key), e->key, v, hash, &inthash, &inteql);
+ }
+
+ UPB_ASSERT(t->t.count == new_table.count);
+
+ t->t = new_table;
+ }
+ insert(&t->t, intkey(key), key, val, upb_inthash(key), &inthash, &inteql);
+ }
+ check(t);
+ return true;
+}
+
+bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v) {
+ const upb_tabval* table_v = inttable_val_const(t, key);
+ if (!table_v) return false;
+ if (v) _upb_value_setval(v, table_v->val);
+ return true;
+}
+
+bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val) {
+ upb_tabval* table_v = inttable_val(t, key);
+ if (!table_v) return false;
+ table_v->val = val.val;
+ return true;
+}
+
+bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val) {
+ bool success;
+ if (key < t->array_size) {
+ if (upb_arrhas(t->array[key])) {
+ upb_tabval empty = UPB_TABVALUE_EMPTY_INIT;
+ t->array_count--;
+ if (val) {
+ _upb_value_setval(val, t->array[key].val);
+ }
+ mutable_array(t)[key] = empty;
+ success = true;
+ } else {
+ success = false;
+ }
+ } else {
+ success = rm(&t->t, intkey(key), val, NULL, upb_inthash(key), &inteql);
+ }
+ check(t);
+ return success;
+}
+
+void upb_inttable_compact(upb_inttable* t, upb_Arena* a) {
+ /* A power-of-two histogram of the table keys. */
+ size_t counts[UPB_MAXARRSIZE + 1] = {0};
+
+ /* The max key in each bucket. */
+ uintptr_t max[UPB_MAXARRSIZE + 1] = {0};
+
+ {
+ intptr_t iter = UPB_INTTABLE_BEGIN;
+ uintptr_t key;
+ upb_value val;
+ while (upb_inttable_next(t, &key, &val, &iter)) {
+ int bucket = log2ceil(key);
+ max[bucket] = UPB_MAX(max[bucket], key);
+ counts[bucket]++;
+ }
+ }
+
+ /* Find the largest power of two that satisfies the MIN_DENSITY
+ * definition (while actually having some keys). */
+ size_t arr_count = upb_inttable_count(t);
+ int size_lg2;
+ upb_inttable new_t;
+
+ for (size_lg2 = ARRAY_SIZE(counts) - 1; size_lg2 > 0; size_lg2--) {
+ if (counts[size_lg2] == 0) {
+ /* We can halve again without losing any entries. */
+ continue;
+ } else if (arr_count >= (1 << size_lg2) * MIN_DENSITY) {
+ break;
+ }
+
+ arr_count -= counts[size_lg2];
+ }
+
+ UPB_ASSERT(arr_count <= upb_inttable_count(t));
+
+ {
+ /* Insert all elements into new, perfectly-sized table. */
+ size_t arr_size = max[size_lg2] + 1; /* +1 so arr[max] will fit. */
+ size_t hash_count = upb_inttable_count(t) - arr_count;
+ size_t hash_size = hash_count ? (hash_count / MAX_LOAD) + 1 : 0;
+ int hashsize_lg2 = log2ceil(hash_size);
+
+ upb_inttable_sizedinit(&new_t, arr_size, hashsize_lg2, a);
+
+ {
+ intptr_t iter = UPB_INTTABLE_BEGIN;
+ uintptr_t key;
+ upb_value val;
+ while (upb_inttable_next(t, &key, &val, &iter)) {
+ upb_inttable_insert(&new_t, key, val, a);
+ }
+ }
+
+ UPB_ASSERT(new_t.array_size == arr_size);
+ UPB_ASSERT(new_t.t.size_lg2 == hashsize_lg2);
+ }
+ *t = new_t;
+}
+
+// Iteration.
+
+bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
+ intptr_t* iter) {
+ intptr_t i = *iter;
+ if ((size_t)(i + 1) <= t->array_size) {
+ while ((size_t)++i < t->array_size) {
+ upb_tabval ent = t->array[i];
+ if (upb_arrhas(ent)) {
+ *key = i;
+ *val = _upb_value_val(ent.val);
+ *iter = i;
+ return true;
+ }
+ }
+ i--; // Back up to exactly one position before the start of the table.
+ }
+
+ size_t tab_idx = next(&t->t, i - t->array_size);
+ if (tab_idx < upb_table_size(&t->t)) {
+ upb_tabent* ent = &t->t.entries[tab_idx];
+ *key = ent->key;
+ *val = _upb_value_val(ent->val.val);
+ *iter = tab_idx + t->array_size;
+ return true;
+ }
+
+ return false;
+}
+
+void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter) {
+ intptr_t i = *iter;
+ if ((size_t)i < t->array_size) {
+ t->array_count--;
+ mutable_array(t)[i].val = -1;
+ } else {
+ upb_tabent* ent = &t->t.entries[i - t->array_size];
+ upb_tabent* prev = NULL;
+
+ // Linear search, not great.
+ upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
+ for (upb_tabent* e = t->t.entries; e != end; e++) {
+ if (e->next == ent) {
+ prev = e;
+ break;
+ }
+ }
+
+ if (prev) {
+ prev->next = ent->next;
+ }
+
+ t->t.count--;
+ ent->key = 0;
+ ent->next = NULL;
+ }
+}
+
+bool upb_strtable_next2(const upb_strtable* t, upb_StringView* key,
+ upb_value* val, intptr_t* iter) {
+ size_t tab_idx = next(&t->t, *iter);
+ if (tab_idx < upb_table_size(&t->t)) {
+ upb_tabent* ent = &t->t.entries[tab_idx];
+ uint32_t len;
+ key->data = upb_tabstr(ent->key, &len);
+ key->size = len;
+ *val = _upb_value_val(ent->val.val);
+ *iter = tab_idx;
+ return true;
+ }
+
+ return false;
+}
+
+void upb_strtable_removeiter(upb_strtable* t, intptr_t* iter) {
+ intptr_t i = *iter;
+ upb_tabent* ent = &t->t.entries[i];
+ upb_tabent* prev = NULL;
+
+ // Linear search, not great.
+ upb_tabent* end = &t->t.entries[upb_table_size(&t->t)];
+ for (upb_tabent* e = t->t.entries; e != end; e++) {
+ if (e->next == ent) {
+ prev = e;
+ break;
+ }
+ }
+
+ if (prev) {
+ prev->next = ent->next;
+ }
+
+ t->t.count--;
+ ent->key = 0;
+ ent->next = NULL;
+}
+
+void upb_strtable_setentryvalue(upb_strtable* t, intptr_t iter, upb_value v) {
+ upb_tabent* ent = &t->t.entries[iter];
+ ent->val.val = v.val;
+}
+
+
// Must be last.
const char* upb_BufToUint64(const char* ptr, const char* end, uint64_t* val) {
@@ -5009,1210 +10708,19 @@
}
-#include <stdlib.h>
-
-// Must be last.
-
-static void* upb_global_allocfunc(upb_alloc* alloc, void* ptr, size_t oldsize,
- size_t size) {
- UPB_UNUSED(alloc);
- UPB_UNUSED(oldsize);
- if (size == 0) {
- free(ptr);
- return NULL;
- } else {
- return realloc(ptr, size);
- }
-}
-
-upb_alloc upb_alloc_global = {&upb_global_allocfunc};
-
-
-
-// Must be last.
-
-struct _upb_MemBlock {
- // Atomic only for the benefit of SpaceAllocated().
- UPB_ATOMIC(_upb_MemBlock*) next;
- uint32_t size;
- // Data follows.
-};
-
-static const size_t memblock_reserve =
- UPB_ALIGN_UP(sizeof(_upb_MemBlock), UPB_MALLOC_ALIGN);
-
-typedef struct _upb_ArenaRoot {
- upb_Arena* root;
- uintptr_t tagged_count;
-} _upb_ArenaRoot;
-
-static _upb_ArenaRoot _upb_Arena_FindRoot(upb_Arena* a) {
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- while (_upb_Arena_IsTaggedPointer(poc)) {
- upb_Arena* next = _upb_Arena_PointerFromTagged(poc);
- UPB_ASSERT(a != next);
- uintptr_t next_poc =
- upb_Atomic_Load(&next->parent_or_count, memory_order_acquire);
-
- if (_upb_Arena_IsTaggedPointer(next_poc)) {
- // To keep complexity down, we lazily collapse levels of the tree. This
- // keeps it flat in the final case, but doesn't cost much incrementally.
- //
- // Path splitting keeps time complexity down, see:
- // https://en.wikipedia.org/wiki/Disjoint-set_data_structure
- //
- // We can safely use a relaxed atomic here because all threads doing this
- // will converge on the same value and we don't need memory orderings to
- // be visible.
- //
- // This is true because:
- // - If no fuses occur, this will eventually become the root.
- // - If fuses are actively occurring, the root may change, but the
- // invariant is that `parent_or_count` merely points to *a* parent.
- //
- // In other words, it is moving towards "the" root, and that root may move
- // further away over time, but the path towards that root will continue to
- // be valid and the creation of the path carries all the memory orderings
- // required.
- UPB_ASSERT(a != _upb_Arena_PointerFromTagged(next_poc));
- upb_Atomic_Store(&a->parent_or_count, next_poc, memory_order_relaxed);
- }
- a = next;
- poc = next_poc;
- }
- return (_upb_ArenaRoot){.root = a, .tagged_count = poc};
-}
-
-size_t upb_Arena_SpaceAllocated(upb_Arena* arena) {
- arena = _upb_Arena_FindRoot(arena).root;
- size_t memsize = 0;
-
- while (arena != NULL) {
- _upb_MemBlock* block =
- upb_Atomic_Load(&arena->blocks, memory_order_relaxed);
- while (block != NULL) {
- memsize += sizeof(_upb_MemBlock) + block->size;
- block = upb_Atomic_Load(&block->next, memory_order_relaxed);
- }
- arena = upb_Atomic_Load(&arena->next, memory_order_relaxed);
- }
-
- return memsize;
-}
-
-uint32_t upb_Arena_DebugRefCount(upb_Arena* a) {
- // These loads could probably be relaxed, but given that this is debug-only,
- // it's not worth introducing a new variant for it.
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- while (_upb_Arena_IsTaggedPointer(poc)) {
- a = _upb_Arena_PointerFromTagged(poc);
- poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- }
- return _upb_Arena_RefCountFromTagged(poc);
-}
-
-static void upb_Arena_AddBlock(upb_Arena* a, void* ptr, size_t size) {
- _upb_MemBlock* block = ptr;
-
- // Insert into linked list.
- block->size = (uint32_t)size;
- upb_Atomic_Init(&block->next, a->blocks);
- upb_Atomic_Store(&a->blocks, block, memory_order_release);
-
- a->head.ptr = UPB_PTR_AT(block, memblock_reserve, char);
- a->head.end = UPB_PTR_AT(block, size, char);
-
- UPB_POISON_MEMORY_REGION(a->head.ptr, a->head.end - a->head.ptr);
-}
-
-static bool upb_Arena_AllocBlock(upb_Arena* a, size_t size) {
- if (!a->block_alloc) return false;
- _upb_MemBlock* last_block = upb_Atomic_Load(&a->blocks, memory_order_acquire);
- size_t last_size = last_block != NULL ? last_block->size : 128;
- size_t block_size = UPB_MAX(size, last_size * 2) + memblock_reserve;
- _upb_MemBlock* block = upb_malloc(upb_Arena_BlockAlloc(a), block_size);
-
- if (!block) return false;
- upb_Arena_AddBlock(a, block, block_size);
- return true;
-}
-
-void* _upb_Arena_SlowMalloc(upb_Arena* a, size_t size) {
- if (!upb_Arena_AllocBlock(a, size)) return NULL; /* Out of memory. */
- UPB_ASSERT(_upb_ArenaHas(a) >= size);
- return upb_Arena_Malloc(a, size);
-}
-
-/* Public Arena API ***********************************************************/
-
-static upb_Arena* upb_Arena_InitSlow(upb_alloc* alloc) {
- const size_t first_block_overhead = sizeof(upb_Arena) + memblock_reserve;
- upb_Arena* a;
-
- /* We need to malloc the initial block. */
- char* mem;
- size_t n = first_block_overhead + 256;
- if (!alloc || !(mem = upb_malloc(alloc, n))) {
- return NULL;
- }
-
- a = UPB_PTR_AT(mem, n - sizeof(*a), upb_Arena);
- n -= sizeof(*a);
-
- a->block_alloc = upb_Arena_MakeBlockAlloc(alloc, 0);
- upb_Atomic_Init(&a->parent_or_count, _upb_Arena_TaggedFromRefcount(1));
- upb_Atomic_Init(&a->next, NULL);
- upb_Atomic_Init(&a->tail, a);
- upb_Atomic_Init(&a->blocks, NULL);
-
- upb_Arena_AddBlock(a, mem, n);
-
- return a;
-}
-
-upb_Arena* upb_Arena_Init(void* mem, size_t n, upb_alloc* alloc) {
- upb_Arena* a;
-
- if (n) {
- /* Align initial pointer up so that we return properly-aligned pointers. */
- void* aligned = (void*)UPB_ALIGN_UP((uintptr_t)mem, UPB_MALLOC_ALIGN);
- size_t delta = (uintptr_t)aligned - (uintptr_t)mem;
- n = delta <= n ? n - delta : 0;
- mem = aligned;
- }
-
- /* Round block size down to alignof(*a) since we will allocate the arena
- * itself at the end. */
- n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_Arena));
-
- if (UPB_UNLIKELY(n < sizeof(upb_Arena))) {
- return upb_Arena_InitSlow(alloc);
- }
-
- a = UPB_PTR_AT(mem, n - sizeof(*a), upb_Arena);
-
- upb_Atomic_Init(&a->parent_or_count, _upb_Arena_TaggedFromRefcount(1));
- upb_Atomic_Init(&a->next, NULL);
- upb_Atomic_Init(&a->tail, a);
- upb_Atomic_Init(&a->blocks, NULL);
- a->block_alloc = upb_Arena_MakeBlockAlloc(alloc, 1);
- a->head.ptr = mem;
- a->head.end = UPB_PTR_AT(mem, n - sizeof(*a), char);
-
- return a;
-}
-
-static void arena_dofree(upb_Arena* a) {
- UPB_ASSERT(_upb_Arena_RefCountFromTagged(a->parent_or_count) == 1);
-
- while (a != NULL) {
- // Load first since arena itself is likely from one of its blocks.
- upb_Arena* next_arena =
- (upb_Arena*)upb_Atomic_Load(&a->next, memory_order_acquire);
- upb_alloc* block_alloc = upb_Arena_BlockAlloc(a);
- _upb_MemBlock* block = upb_Atomic_Load(&a->blocks, memory_order_acquire);
- while (block != NULL) {
- // Load first since we are deleting block.
- _upb_MemBlock* next_block =
- upb_Atomic_Load(&block->next, memory_order_acquire);
- upb_free(block_alloc, block);
- block = next_block;
- }
- a = next_arena;
- }
-}
-
-void upb_Arena_Free(upb_Arena* a) {
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
-retry:
- while (_upb_Arena_IsTaggedPointer(poc)) {
- a = _upb_Arena_PointerFromTagged(poc);
- poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
- }
-
- // compare_exchange or fetch_sub are RMW operations, which are more
- // expensive then direct loads. As an optimization, we only do RMW ops
- // when we need to update things for other threads to see.
- if (poc == _upb_Arena_TaggedFromRefcount(1)) {
- arena_dofree(a);
- return;
- }
-
- if (upb_Atomic_CompareExchangeWeak(
- &a->parent_or_count, &poc,
- _upb_Arena_TaggedFromRefcount(_upb_Arena_RefCountFromTagged(poc) - 1),
- memory_order_release, memory_order_acquire)) {
- // We were >1 and we decremented it successfully, so we are done.
- return;
- }
-
- // We failed our update, so someone has done something, retry the whole
- // process, but the failed exchange reloaded `poc` for us.
- goto retry;
-}
-
-static void _upb_Arena_DoFuseArenaLists(upb_Arena* const parent,
- upb_Arena* child) {
- upb_Arena* parent_tail = upb_Atomic_Load(&parent->tail, memory_order_relaxed);
- do {
- // Our tail might be stale, but it will always converge to the true tail.
- upb_Arena* parent_tail_next =
- upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
- while (parent_tail_next != NULL) {
- parent_tail = parent_tail_next;
- parent_tail_next =
- upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
- }
-
- upb_Arena* displaced =
- upb_Atomic_Exchange(&parent_tail->next, child, memory_order_relaxed);
- parent_tail = upb_Atomic_Load(&child->tail, memory_order_relaxed);
-
- // If we displaced something that got installed racily, we can simply
- // reinstall it on our new tail.
- child = displaced;
- } while (child != NULL);
-
- upb_Atomic_Store(&parent->tail, parent_tail, memory_order_relaxed);
-}
-
-static upb_Arena* _upb_Arena_DoFuse(upb_Arena* a1, upb_Arena* a2,
- uintptr_t* ref_delta) {
- // `parent_or_count` has two disctint modes
- // - parent pointer mode
- // - refcount mode
- //
- // In parent pointer mode, it may change what pointer it refers to in the
- // tree, but it will always approach a root. Any operation that walks the
- // tree to the root may collapse levels of the tree concurrently.
- _upb_ArenaRoot r1 = _upb_Arena_FindRoot(a1);
- _upb_ArenaRoot r2 = _upb_Arena_FindRoot(a2);
-
- if (r1.root == r2.root) return r1.root; // Already fused.
-
- // Avoid cycles by always fusing into the root with the lower address.
- if ((uintptr_t)r1.root > (uintptr_t)r2.root) {
- _upb_ArenaRoot tmp = r1;
- r1 = r2;
- r2 = tmp;
- }
-
- // The moment we install `r1` as the parent for `r2` all racing frees may
- // immediately begin decrementing `r1`'s refcount (including pending
- // increments to that refcount and their frees!). We need to add `r2`'s refs
- // now, so that `r1` can withstand any unrefs that come from r2.
- //
- // Note that while it is possible for `r2`'s refcount to increase
- // asynchronously, we will not actually do the reparenting operation below
- // unless `r2`'s refcount is unchanged from when we read it.
- //
- // Note that we may have done this previously, either to this node or a
- // different node, during a previous and failed DoFuse() attempt. But we will
- // not lose track of these refs because we always add them to our overall
- // delta.
- uintptr_t r2_untagged_count = r2.tagged_count & ~1;
- uintptr_t with_r2_refs = r1.tagged_count + r2_untagged_count;
- if (!upb_Atomic_CompareExchangeStrong(
- &r1.root->parent_or_count, &r1.tagged_count, with_r2_refs,
- memory_order_release, memory_order_acquire)) {
- return NULL;
- }
-
- // Perform the actual fuse by removing the refs from `r2` and swapping in the
- // parent pointer.
- if (!upb_Atomic_CompareExchangeStrong(
- &r2.root->parent_or_count, &r2.tagged_count,
- _upb_Arena_TaggedFromPointer(r1.root), memory_order_release,
- memory_order_acquire)) {
- // We'll need to remove the excess refs we added to r1 previously.
- *ref_delta += r2_untagged_count;
- return NULL;
- }
-
- // Now that the fuse has been performed (and can no longer fail) we need to
- // append `r2` to `r1`'s linked list.
- _upb_Arena_DoFuseArenaLists(r1.root, r2.root);
- return r1.root;
-}
-
-static bool _upb_Arena_FixupRefs(upb_Arena* new_root, uintptr_t ref_delta) {
- if (ref_delta == 0) return true; // No fixup required.
- uintptr_t poc =
- upb_Atomic_Load(&new_root->parent_or_count, memory_order_relaxed);
- if (_upb_Arena_IsTaggedPointer(poc)) return false;
- uintptr_t with_refs = poc - ref_delta;
- UPB_ASSERT(!_upb_Arena_IsTaggedPointer(with_refs));
- return upb_Atomic_CompareExchangeStrong(&new_root->parent_or_count, &poc,
- with_refs, memory_order_relaxed,
- memory_order_relaxed);
-}
-
-bool upb_Arena_Fuse(upb_Arena* a1, upb_Arena* a2) {
- if (a1 == a2) return true; // trivial fuse
-
- // Do not fuse initial blocks since we cannot lifetime extend them.
- // Any other fuse scenario is allowed.
- if (upb_Arena_HasInitialBlock(a1) || upb_Arena_HasInitialBlock(a2)) {
- return false;
- }
-
- // The number of refs we ultimately need to transfer to the new root.
- uintptr_t ref_delta = 0;
- while (true) {
- upb_Arena* new_root = _upb_Arena_DoFuse(a1, a2, &ref_delta);
- if (new_root != NULL && _upb_Arena_FixupRefs(new_root, ref_delta)) {
- return true;
- }
- }
-}
-
-bool upb_Arena_IncRefFor(upb_Arena* arena, const void* owner) {
- _upb_ArenaRoot r;
- if (upb_Arena_HasInitialBlock(arena)) return false;
-
-retry:
- r = _upb_Arena_FindRoot(arena);
- if (upb_Atomic_CompareExchangeWeak(
- &r.root->parent_or_count, &r.tagged_count,
- _upb_Arena_TaggedFromRefcount(
- _upb_Arena_RefCountFromTagged(r.tagged_count) + 1),
- memory_order_release, memory_order_acquire)) {
- // We incremented it successfully, so we are done.
- return true;
- }
- // We failed update due to parent switching on the arena.
- goto retry;
-}
-
-void upb_Arena_DecRefFor(upb_Arena* arena, const void* owner) {
- upb_Arena_Free(arena);
-}
-
-
-
-// Must be last.
-
-upb_MapInsertStatus upb_Message_InsertMapEntry(upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* map_entry_message,
- upb_Arena* arena) {
- const upb_MiniTable* map_entry_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(map_entry_mini_table);
- UPB_ASSERT(map_entry_mini_table->field_count == 2);
- const upb_MiniTableField* map_entry_key_field =
- &map_entry_mini_table->fields[0];
- const upb_MiniTableField* map_entry_value_field =
- &map_entry_mini_table->fields[1];
- // Map key/value cannot have explicit defaults,
- // hence assuming a zero default is valid.
- upb_MessageValue default_val;
- memset(&default_val, 0, sizeof(upb_MessageValue));
- upb_MessageValue map_entry_key;
- upb_MessageValue map_entry_value;
- _upb_Message_GetField(map_entry_message, map_entry_key_field, &default_val,
- &map_entry_key);
- _upb_Message_GetField(map_entry_message, map_entry_value_field, &default_val,
- &map_entry_value);
- return upb_Map_Insert(map, map_entry_key, map_entry_value, arena);
-}
-
-bool upb_Message_IsExactlyEqual(const upb_Message* m1, const upb_Message* m2,
- const upb_MiniTable* layout) {
- if (m1 == m2) return true;
-
- int opts = kUpb_EncodeOption_SkipUnknown | kUpb_EncodeOption_Deterministic;
- upb_Arena* a = upb_Arena_New();
-
- // Compare deterministically serialized payloads with no unknown fields.
- size_t size1, size2;
- char *data1, *data2;
- upb_EncodeStatus status1 = upb_Encode(m1, layout, opts, a, &data1, &size1);
- upb_EncodeStatus status2 = upb_Encode(m2, layout, opts, a, &data2, &size2);
-
- if (status1 != kUpb_EncodeStatus_Ok || status2 != kUpb_EncodeStatus_Ok) {
- // TODO: How should we fail here? (In Ruby we throw an exception.)
- upb_Arena_Free(a);
- return false;
- }
-
- const bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
- upb_Arena_Free(a);
- return ret;
-}
-
-
-#include <stdbool.h>
#include <string.h>
// Must be last.
-static bool upb_MessageField_IsMap(const upb_MiniTableField* field) {
- return upb_FieldMode_Get(field) == kUpb_FieldMode_Map;
-}
-
-static upb_StringView upb_Clone_StringView(upb_StringView str,
- upb_Arena* arena) {
- if (str.size == 0) {
- return upb_StringView_FromDataAndSize(NULL, 0);
- }
- void* cloned_data = upb_Arena_Malloc(arena, str.size);
- upb_StringView cloned_str =
- upb_StringView_FromDataAndSize(cloned_data, str.size);
- memcpy(cloned_data, str.data, str.size);
- return cloned_str;
-}
-
-static bool upb_Clone_MessageValue(void* value, upb_CType value_type,
- const upb_MiniTable* sub, upb_Arena* arena) {
- switch (value_type) {
- case kUpb_CType_Bool:
- case kUpb_CType_Float:
- case kUpb_CType_Int32:
- case kUpb_CType_UInt32:
- case kUpb_CType_Enum:
- case kUpb_CType_Double:
- case kUpb_CType_Int64:
- case kUpb_CType_UInt64:
- return true;
- case kUpb_CType_String:
- case kUpb_CType_Bytes: {
- upb_StringView source = *(upb_StringView*)value;
- int size = source.size;
- void* cloned_data = upb_Arena_Malloc(arena, size);
- if (cloned_data == NULL) {
- return false;
- }
- *(upb_StringView*)value =
- upb_StringView_FromDataAndSize(cloned_data, size);
- memcpy(cloned_data, source.data, size);
- return true;
- } break;
- case kUpb_CType_Message: {
- const upb_TaggedMessagePtr source = *(upb_TaggedMessagePtr*)value;
- bool is_empty = upb_TaggedMessagePtr_IsEmpty(source);
- if (is_empty) sub = &_kUpb_MiniTable_Empty;
- UPB_ASSERT(source);
- upb_Message* clone = upb_Message_DeepClone(
- _upb_TaggedMessagePtr_GetMessage(source), sub, arena);
- *(upb_TaggedMessagePtr*)value =
- _upb_TaggedMessagePtr_Pack(clone, is_empty);
- return clone != NULL;
- } break;
- }
- UPB_UNREACHABLE();
-}
-
-upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
- upb_CType value_type,
- const upb_MiniTable* map_entry_table,
- upb_Arena* arena) {
- upb_Map* cloned_map = _upb_Map_New(arena, map->key_size, map->val_size);
- if (cloned_map == NULL) {
- return NULL;
- }
- upb_MessageValue key, val;
- size_t iter = kUpb_Map_Begin;
- while (upb_Map_Next(map, &key, &val, &iter)) {
- const upb_MiniTableField* value_field = &map_entry_table->fields[1];
- const upb_MiniTable* value_sub =
- (value_field->UPB_PRIVATE(submsg_index) != kUpb_NoSub)
- ? upb_MiniTable_GetSubMessageTable(map_entry_table, value_field)
- : NULL;
- upb_CType value_field_type = upb_MiniTableField_CType(value_field);
- if (!upb_Clone_MessageValue(&val, value_field_type, value_sub, arena)) {
- return NULL;
- }
- if (upb_Map_Insert(cloned_map, key, val, arena) ==
- kUpb_MapInsertStatus_OutOfMemory) {
- return NULL;
- }
- }
- return cloned_map;
-}
-
-static upb_Map* upb_Message_Map_DeepClone(const upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* clone,
- upb_Arena* arena) {
- const upb_MiniTable* map_entry_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(map_entry_table);
-
- const upb_MiniTableField* key_field = &map_entry_table->fields[0];
- const upb_MiniTableField* value_field = &map_entry_table->fields[1];
-
- upb_Map* cloned_map = upb_Map_DeepClone(
- map, upb_MiniTableField_CType(key_field),
- upb_MiniTableField_CType(value_field), map_entry_table, arena);
- if (!cloned_map) {
- return NULL;
- }
- _upb_Message_SetNonExtensionField(clone, field, &cloned_map);
- return cloned_map;
-}
-
-upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
- const upb_MiniTable* sub, upb_Arena* arena) {
- size_t size = array->size;
- upb_Array* cloned_array =
- _upb_Array_New(arena, size, _upb_Array_CTypeSizeLg2(value_type));
- if (!cloned_array) {
- return NULL;
- }
- if (!_upb_Array_ResizeUninitialized(cloned_array, size, arena)) {
- return NULL;
- }
- for (size_t i = 0; i < size; ++i) {
- upb_MessageValue val = upb_Array_Get(array, i);
- if (!upb_Clone_MessageValue(&val, value_type, sub, arena)) {
- return false;
- }
- upb_Array_Set(cloned_array, i, val);
- }
- return cloned_array;
-}
-
-static bool upb_Message_Array_DeepClone(const upb_Array* array,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* clone, upb_Arena* arena) {
- _upb_MiniTableField_CheckIsArray(field);
- upb_Array* cloned_array = upb_Array_DeepClone(
- array, upb_MiniTableField_CType(field),
- upb_MiniTableField_CType(field) == kUpb_CType_Message &&
- field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
- ? upb_MiniTable_GetSubMessageTable(mini_table, field)
- : NULL,
- arena);
-
- // Clear out upb_Array* due to parent memcpy.
- _upb_Message_SetNonExtensionField(clone, field, &cloned_array);
- return true;
-}
-
-static bool upb_Clone_ExtensionValue(
- const upb_MiniTableExtension* mini_table_ext,
- const upb_Message_Extension* source, upb_Message_Extension* dest,
- upb_Arena* arena) {
- dest->data = source->data;
- return upb_Clone_MessageValue(
- &dest->data, upb_MiniTableField_CType(&mini_table_ext->field),
- mini_table_ext->sub.submsg, arena);
-}
-
-upb_Message* _upb_Message_Copy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- upb_StringView empty_string = upb_StringView_FromDataAndSize(NULL, 0);
- // Only copy message area skipping upb_Message_Internal.
- memcpy(dst, src, mini_table->size);
- for (size_t i = 0; i < mini_table->field_count; ++i) {
- const upb_MiniTableField* field = &mini_table->fields[i];
- if (!upb_IsRepeatedOrMap(field)) {
- switch (upb_MiniTableField_CType(field)) {
- case kUpb_CType_Message: {
- upb_TaggedMessagePtr tagged =
- upb_Message_GetTaggedMessagePtr(src, field, NULL);
- const upb_Message* sub_message =
- _upb_TaggedMessagePtr_GetMessage(tagged);
- if (sub_message != NULL) {
- // If the message is currently in an unlinked, "empty" state we keep
- // it that way, because we don't want to deal with decode options,
- // decode status, or possible parse failure here.
- bool is_empty = upb_TaggedMessagePtr_IsEmpty(tagged);
- const upb_MiniTable* sub_message_table =
- is_empty ? &_kUpb_MiniTable_Empty
- : upb_MiniTable_GetSubMessageTable(mini_table, field);
- upb_Message* dst_sub_message =
- upb_Message_DeepClone(sub_message, sub_message_table, arena);
- if (dst_sub_message == NULL) {
- return NULL;
- }
- _upb_Message_SetTaggedMessagePtr(
- dst, mini_table, field,
- _upb_TaggedMessagePtr_Pack(dst_sub_message, is_empty));
- }
- } break;
- case kUpb_CType_String:
- case kUpb_CType_Bytes: {
- upb_StringView str = upb_Message_GetString(src, field, empty_string);
- if (str.size != 0) {
- if (!upb_Message_SetString(
- dst, field, upb_Clone_StringView(str, arena), arena)) {
- return NULL;
- }
- }
- } break;
- default:
- // Scalar, already copied.
- break;
- }
- } else {
- if (upb_MessageField_IsMap(field)) {
- const upb_Map* map = upb_Message_GetMap(src, field);
- if (map != NULL) {
- if (!upb_Message_Map_DeepClone(map, mini_table, field, dst, arena)) {
- return NULL;
- }
- }
- } else {
- const upb_Array* array = upb_Message_GetArray(src, field);
- if (array != NULL) {
- if (!upb_Message_Array_DeepClone(array, mini_table, field, dst,
- arena)) {
- return NULL;
- }
- }
- }
- }
- }
- // Clone extensions.
- size_t ext_count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(src, &ext_count);
- for (size_t i = 0; i < ext_count; ++i) {
- const upb_Message_Extension* msg_ext = &ext[i];
- const upb_MiniTableField* field = &msg_ext->ext->field;
- upb_Message_Extension* dst_ext =
- _upb_Message_GetOrCreateExtension(dst, msg_ext->ext, arena);
- if (!dst_ext) return NULL;
- if (!upb_IsRepeatedOrMap(field)) {
- if (!upb_Clone_ExtensionValue(msg_ext->ext, msg_ext, dst_ext, arena)) {
- return NULL;
- }
- } else {
- upb_Array* msg_array = (upb_Array*)msg_ext->data.ptr;
- UPB_ASSERT(msg_array);
- upb_Array* cloned_array =
- upb_Array_DeepClone(msg_array, upb_MiniTableField_CType(field),
- msg_ext->ext->sub.submsg, arena);
- if (!cloned_array) {
- return NULL;
- }
- dst_ext->data.ptr = (void*)cloned_array;
- }
- }
-
- // Clone unknowns.
- size_t unknown_size = 0;
- const char* ptr = upb_Message_GetUnknown(src, &unknown_size);
- if (unknown_size != 0) {
- UPB_ASSERT(ptr);
- // Make a copy into destination arena.
- if (!_upb_Message_AddUnknown(dst, ptr, unknown_size, arena)) {
- return NULL;
- }
- }
- return dst;
-}
-
-bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table, upb_Arena* arena) {
- upb_Message_Clear(dst, mini_table);
- return _upb_Message_Copy(dst, src, mini_table, arena) != NULL;
-}
-
-// Deep clones a message using the provided target arena.
-//
-// Returns NULL on failure.
-upb_Message* upb_Message_DeepClone(const upb_Message* message,
- const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- upb_Message* clone = upb_Message_New(mini_table, arena);
- return _upb_Message_Copy(clone, message, mini_table, arena);
-}
-
-
-#include <string.h>
-
-// Must be last.
-
-const char _upb_Array_CTypeSizeLg2Table[] = {
- [kUpb_CType_Bool] = 0,
- [kUpb_CType_Float] = 2,
- [kUpb_CType_Int32] = 2,
- [kUpb_CType_UInt32] = 2,
- [kUpb_CType_Enum] = 2,
- [kUpb_CType_Message] = UPB_SIZE(2, 3),
- [kUpb_CType_Double] = 3,
- [kUpb_CType_Int64] = 3,
- [kUpb_CType_UInt64] = 3,
- [kUpb_CType_String] = UPB_SIZE(3, 4),
- [kUpb_CType_Bytes] = UPB_SIZE(3, 4),
-};
-
-upb_Array* upb_Array_New(upb_Arena* a, upb_CType type) {
- return _upb_Array_New(a, 4, _upb_Array_CTypeSizeLg2(type));
-}
-
-const void* upb_Array_DataPtr(const upb_Array* arr) {
- return _upb_array_ptr((upb_Array*)arr);
-}
-
-void* upb_Array_MutableDataPtr(upb_Array* arr) { return _upb_array_ptr(arr); }
-
-size_t upb_Array_Size(const upb_Array* arr) { return arr->size; }
-
-upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i) {
- upb_MessageValue ret;
- const char* data = _upb_array_constptr(arr);
- int lg2 = arr->data & 7;
- UPB_ASSERT(i < arr->size);
- memcpy(&ret, data + (i << lg2), 1 << lg2);
- return ret;
-}
-
-void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val) {
- char* data = _upb_array_ptr(arr);
- int lg2 = arr->data & 7;
- UPB_ASSERT(i < arr->size);
- memcpy(data + (i << lg2), &val, 1 << lg2);
-}
-
-bool upb_Array_Append(upb_Array* arr, upb_MessageValue val, upb_Arena* arena) {
- UPB_ASSERT(arena);
- if (!upb_Array_Resize(arr, arr->size + 1, arena)) {
- return false;
- }
- upb_Array_Set(arr, arr->size - 1, val);
- return true;
-}
-
-void upb_Array_Move(upb_Array* arr, size_t dst_idx, size_t src_idx,
- size_t count) {
- const int lg2 = arr->data & 7;
- char* data = _upb_array_ptr(arr);
- memmove(&data[dst_idx << lg2], &data[src_idx << lg2], count << lg2);
-}
-
-bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
- upb_Arena* arena) {
- UPB_ASSERT(arena);
- UPB_ASSERT(i <= arr->size);
- UPB_ASSERT(count + arr->size >= count);
- const size_t oldsize = arr->size;
- if (!upb_Array_Resize(arr, arr->size + count, arena)) {
- return false;
- }
- upb_Array_Move(arr, i + count, i, oldsize - i);
- return true;
-}
-
-/*
- * i end arr->size
- * |------------|XXXXXXXX|--------|
- */
-void upb_Array_Delete(upb_Array* arr, size_t i, size_t count) {
- const size_t end = i + count;
- UPB_ASSERT(i <= end);
- UPB_ASSERT(end <= arr->size);
- upb_Array_Move(arr, i, end, arr->size - end);
- arr->size -= count;
-}
-
-bool upb_Array_Resize(upb_Array* arr, size_t size, upb_Arena* arena) {
- const size_t oldsize = arr->size;
- if (UPB_UNLIKELY(!_upb_Array_ResizeUninitialized(arr, size, arena))) {
- return false;
- }
- const size_t newsize = arr->size;
- if (newsize > oldsize) {
- const int lg2 = arr->data & 7;
- char* data = _upb_array_ptr(arr);
- memset(data + (oldsize << lg2), 0, (newsize - oldsize) << lg2);
- }
- return true;
-}
-
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-bool _upb_array_realloc(upb_Array* arr, size_t min_capacity, upb_Arena* arena) {
- size_t new_capacity = UPB_MAX(arr->capacity, 4);
- int elem_size_lg2 = arr->data & 7;
- size_t old_bytes = arr->capacity << elem_size_lg2;
- size_t new_bytes;
- void* ptr = _upb_array_ptr(arr);
-
- // Log2 ceiling of size.
- while (new_capacity < min_capacity) new_capacity *= 2;
-
- new_bytes = new_capacity << elem_size_lg2;
- ptr = upb_Arena_Realloc(arena, ptr, old_bytes, new_bytes);
- if (!ptr) return false;
-
- arr->data = _upb_tag_arrptr(ptr, elem_size_lg2);
- arr->capacity = new_capacity;
- return true;
-}
-
-
-#include <string.h>
-
-
-// Must be last.
-
-// Strings/bytes are special-cased in maps.
-char _upb_Map_CTypeSizeTable[12] = {
- [kUpb_CType_Bool] = 1,
- [kUpb_CType_Float] = 4,
- [kUpb_CType_Int32] = 4,
- [kUpb_CType_UInt32] = 4,
- [kUpb_CType_Enum] = 4,
- [kUpb_CType_Message] = sizeof(void*),
- [kUpb_CType_Double] = 8,
- [kUpb_CType_Int64] = 8,
- [kUpb_CType_UInt64] = 8,
- [kUpb_CType_String] = UPB_MAPTYPE_STRING,
- [kUpb_CType_Bytes] = UPB_MAPTYPE_STRING,
-};
-
-upb_Map* upb_Map_New(upb_Arena* a, upb_CType key_type, upb_CType value_type) {
- return _upb_Map_New(a, _upb_Map_CTypeSize(key_type),
- _upb_Map_CTypeSize(value_type));
-}
-
-size_t upb_Map_Size(const upb_Map* map) { return _upb_Map_Size(map); }
-
-bool upb_Map_Get(const upb_Map* map, upb_MessageValue key,
- upb_MessageValue* val) {
- return _upb_Map_Get(map, &key, map->key_size, val, map->val_size);
-}
-
-void upb_Map_Clear(upb_Map* map) { _upb_Map_Clear(map); }
-
-upb_MapInsertStatus upb_Map_Insert(upb_Map* map, upb_MessageValue key,
- upb_MessageValue val, upb_Arena* arena) {
- UPB_ASSERT(arena);
- return (upb_MapInsertStatus)_upb_Map_Insert(map, &key, map->key_size, &val,
- map->val_size, arena);
-}
-
-bool upb_Map_Delete(upb_Map* map, upb_MessageValue key, upb_MessageValue* val) {
- upb_value v;
- const bool removed = _upb_Map_Delete(map, &key, map->key_size, &v);
- if (val) _upb_map_fromvalue(v, val, map->val_size);
- return removed;
-}
-
-bool upb_Map_Next(const upb_Map* map, upb_MessageValue* key,
- upb_MessageValue* val, size_t* iter) {
- upb_StringView k;
- upb_value v;
- const bool ok = upb_strtable_next2(&map->table, &k, &v, (intptr_t*)iter);
- if (ok) {
- _upb_map_fromkey(k, key, map->key_size);
- _upb_map_fromvalue(v, val, map->val_size);
- }
- return ok;
-}
-
-UPB_API void upb_Map_SetEntryValue(upb_Map* map, size_t iter,
- upb_MessageValue val) {
- upb_value v;
- _upb_map_tovalue(&val, map->val_size, &v, NULL);
- upb_strtable_setentryvalue(&map->table, iter, v);
-}
-
-bool upb_MapIterator_Next(const upb_Map* map, size_t* iter) {
- return _upb_map_next(map, iter);
-}
-
-bool upb_MapIterator_Done(const upb_Map* map, size_t iter) {
- upb_strtable_iter i;
- UPB_ASSERT(iter != kUpb_Map_Begin);
- i.t = &map->table;
- i.index = iter;
- return upb_strtable_done(&i);
-}
-
-// Returns the key and value for this entry of the map.
-upb_MessageValue upb_MapIterator_Key(const upb_Map* map, size_t iter) {
- upb_strtable_iter i;
- upb_MessageValue ret;
- i.t = &map->table;
- i.index = iter;
- _upb_map_fromkey(upb_strtable_iter_key(&i), &ret, map->key_size);
- return ret;
-}
-
-upb_MessageValue upb_MapIterator_Value(const upb_Map* map, size_t iter) {
- upb_strtable_iter i;
- upb_MessageValue ret;
- i.t = &map->table;
- i.index = iter;
- _upb_map_fromvalue(upb_strtable_iter_value(&i), &ret, map->val_size);
- return ret;
-}
-
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size) {
- upb_Map* map = upb_Arena_Malloc(a, sizeof(upb_Map));
- if (!map) return NULL;
-
- upb_strtable_init(&map->table, 4, a);
- map->key_size = key_size;
- map->val_size = value_size;
-
- return map;
-}
-
-
-
-// Must be last.
-
-static void _upb_mapsorter_getkeys(const void* _a, const void* _b, void* a_key,
- void* b_key, size_t size) {
- const upb_tabent* const* a = _a;
- const upb_tabent* const* b = _b;
- upb_StringView a_tabkey = upb_tabstrview((*a)->key);
- upb_StringView b_tabkey = upb_tabstrview((*b)->key);
- _upb_map_fromkey(a_tabkey, a_key, size);
- _upb_map_fromkey(b_tabkey, b_key, size);
-}
-
-static int _upb_mapsorter_cmpi64(const void* _a, const void* _b) {
- int64_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpu64(const void* _a, const void* _b) {
- uint64_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 8);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpi32(const void* _a, const void* _b) {
- int32_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpu32(const void* _a, const void* _b) {
- uint32_t a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 4);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpbool(const void* _a, const void* _b) {
- bool a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, 1);
- return a < b ? -1 : a > b;
-}
-
-static int _upb_mapsorter_cmpstr(const void* _a, const void* _b) {
- upb_StringView a, b;
- _upb_mapsorter_getkeys(_a, _b, &a, &b, UPB_MAPTYPE_STRING);
- size_t common_size = UPB_MIN(a.size, b.size);
- int cmp = memcmp(a.data, b.data, common_size);
- if (cmp) return -cmp;
- return a.size < b.size ? -1 : a.size > b.size;
-}
-
-static int (*const compar[kUpb_FieldType_SizeOf])(const void*, const void*) = {
- [kUpb_FieldType_Int64] = _upb_mapsorter_cmpi64,
- [kUpb_FieldType_SFixed64] = _upb_mapsorter_cmpi64,
- [kUpb_FieldType_SInt64] = _upb_mapsorter_cmpi64,
-
- [kUpb_FieldType_UInt64] = _upb_mapsorter_cmpu64,
- [kUpb_FieldType_Fixed64] = _upb_mapsorter_cmpu64,
-
- [kUpb_FieldType_Int32] = _upb_mapsorter_cmpi32,
- [kUpb_FieldType_SInt32] = _upb_mapsorter_cmpi32,
- [kUpb_FieldType_SFixed32] = _upb_mapsorter_cmpi32,
- [kUpb_FieldType_Enum] = _upb_mapsorter_cmpi32,
-
- [kUpb_FieldType_UInt32] = _upb_mapsorter_cmpu32,
- [kUpb_FieldType_Fixed32] = _upb_mapsorter_cmpu32,
-
- [kUpb_FieldType_Bool] = _upb_mapsorter_cmpbool,
-
- [kUpb_FieldType_String] = _upb_mapsorter_cmpstr,
- [kUpb_FieldType_Bytes] = _upb_mapsorter_cmpstr,
-};
-
-static bool _upb_mapsorter_resize(_upb_mapsorter* s, _upb_sortedmap* sorted,
- int size) {
- sorted->start = s->size;
- sorted->pos = sorted->start;
- sorted->end = sorted->start + size;
-
- if (sorted->end > s->cap) {
- s->cap = upb_Log2CeilingSize(sorted->end);
- s->entries = realloc(s->entries, s->cap * sizeof(*s->entries));
- if (!s->entries) return false;
- }
-
- s->size = sorted->end;
- return true;
-}
-
-bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
- const upb_Map* map, _upb_sortedmap* sorted) {
- int map_size = _upb_Map_Size(map);
-
- if (!_upb_mapsorter_resize(s, sorted, map_size)) return false;
-
- // Copy non-empty entries from the table to s->entries.
- const void** dst = &s->entries[sorted->start];
- const upb_tabent* src = map->table.t.entries;
- const upb_tabent* end = src + upb_table_size(&map->table.t);
- for (; src < end; src++) {
- if (!upb_tabent_isempty(src)) {
- *dst = src;
- dst++;
- }
- }
- UPB_ASSERT(dst == &s->entries[sorted->end]);
-
- // Sort entries according to the key type.
- qsort(&s->entries[sorted->start], map_size, sizeof(*s->entries),
- compar[key_type]);
- return true;
-}
-
-static int _upb_mapsorter_cmpext(const void* _a, const void* _b) {
- const upb_Message_Extension* const* a = _a;
- const upb_Message_Extension* const* b = _b;
- uint32_t a_num = (*a)->ext->field.number;
- uint32_t b_num = (*b)->ext->field.number;
- assert(a_num != b_num);
- return a_num < b_num ? -1 : 1;
-}
-
-bool _upb_mapsorter_pushexts(_upb_mapsorter* s,
- const upb_Message_Extension* exts, size_t count,
- _upb_sortedmap* sorted) {
- if (!_upb_mapsorter_resize(s, sorted, count)) return false;
-
- for (size_t i = 0; i < count; i++) {
- s->entries[sorted->start + i] = &exts[i];
- }
-
- qsort(&s->entries[sorted->start], count, sizeof(*s->entries),
- _upb_mapsorter_cmpext);
- return true;
-}
-
-
-#include <math.h>
-
-
-// Must be last.
-
-const float kUpb_FltInfinity = INFINITY;
-const double kUpb_Infinity = INFINITY;
-const double kUpb_NaN = NAN;
-
-static const size_t overhead = sizeof(upb_Message_InternalData);
-
-upb_Message* upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- return _upb_Message_New(mini_table, arena);
-}
-
-static bool realloc_internal(upb_Message* msg, size_t need, upb_Arena* arena) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (!in->internal) {
- /* No internal data, allocate from scratch. */
- size_t size = UPB_MAX(128, upb_Log2CeilingSize(need + overhead));
- upb_Message_InternalData* internal = upb_Arena_Malloc(arena, size);
- if (!internal) return false;
- internal->size = size;
- internal->unknown_end = overhead;
- internal->ext_begin = size;
- in->internal = internal;
- } else if (in->internal->ext_begin - in->internal->unknown_end < need) {
- /* Internal data is too small, reallocate. */
- size_t new_size = upb_Log2CeilingSize(in->internal->size + need);
- size_t ext_bytes = in->internal->size - in->internal->ext_begin;
- size_t new_ext_begin = new_size - ext_bytes;
- upb_Message_InternalData* internal =
- upb_Arena_Realloc(arena, in->internal, in->internal->size, new_size);
- if (!internal) return false;
- if (ext_bytes) {
- /* Need to move extension data to the end. */
- char* ptr = (char*)internal;
- memmove(ptr + new_ext_begin, ptr + internal->ext_begin, ext_bytes);
- }
- internal->ext_begin = new_ext_begin;
- internal->size = new_size;
- in->internal = internal;
- }
- UPB_ASSERT(in->internal->ext_begin - in->internal->unknown_end >= need);
- return true;
-}
-
-bool _upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena) {
- if (!realloc_internal(msg, len, arena)) return false;
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- memcpy(UPB_PTR_AT(in->internal, in->internal->unknown_end, char), data, len);
- in->internal->unknown_end += len;
- return true;
-}
-
-void _upb_Message_DiscardUnknown_shallow(upb_Message* msg) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- in->internal->unknown_end = overhead;
- }
-}
-
-const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len) {
- const upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- *len = in->internal->unknown_end - overhead;
- return (char*)(in->internal + 1);
- } else {
- *len = 0;
- return NULL;
- }
-}
-
-void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- const char* internal_unknown_end =
- UPB_PTR_AT(in->internal, in->internal->unknown_end, char);
-#ifndef NDEBUG
- size_t full_unknown_size;
- const char* full_unknown = upb_Message_GetUnknown(msg, &full_unknown_size);
- UPB_ASSERT((uintptr_t)data >= (uintptr_t)full_unknown);
- UPB_ASSERT((uintptr_t)data < (uintptr_t)(full_unknown + full_unknown_size));
- UPB_ASSERT((uintptr_t)(data + len) > (uintptr_t)data);
- UPB_ASSERT((uintptr_t)(data + len) <= (uintptr_t)internal_unknown_end);
-#endif
- if ((data + len) != internal_unknown_end) {
- memmove((char*)data, data + len, internal_unknown_end - data - len);
- }
- in->internal->unknown_end -= len;
-}
-
-const upb_Message_Extension* _upb_Message_Getexts(const upb_Message* msg,
- size_t* count) {
- const upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- *count = (in->internal->size - in->internal->ext_begin) /
- sizeof(upb_Message_Extension);
- return UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
- } else {
- *count = 0;
- return NULL;
- }
-}
-
-const upb_Message_Extension* _upb_Message_Getext(
- const upb_Message* msg, const upb_MiniTableExtension* e) {
+const struct upb_Extension* _upb_Message_Getext(
+ const struct upb_Message* msg, const upb_MiniTableExtension* e) {
size_t n;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &n);
+ const struct upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &n);
- /* For now we use linear search exclusively to find extensions. If this
- * becomes an issue due to messages with lots of extensions, we can introduce
- * a table of some sort. */
+ // For now we use linear search exclusively to find extensions.
+ // If this becomes an issue due to messages with lots of extensions,
+ // we can introduce a table of some sort.
for (size_t i = 0; i < n; i++) {
if (ext[i].ext == e) {
return &ext[i];
@@ -6222,1110 +10730,79 @@
return NULL;
}
-upb_Message_Extension* _upb_Message_GetOrCreateExtension(
- upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* arena) {
- upb_Message_Extension* ext =
- (upb_Message_Extension*)_upb_Message_Getext(msg, e);
+const struct upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(
+ const struct upb_Message* msg, size_t* count) {
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ if (in) {
+ *count = (in->size - in->ext_begin) / sizeof(struct upb_Extension);
+ return UPB_PTR_AT(in, in->ext_begin, void);
+ } else {
+ *count = 0;
+ return NULL;
+ }
+}
+
+struct upb_Extension* _upb_Message_GetOrCreateExtension(
+ struct upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* a) {
+ struct upb_Extension* ext =
+ (struct upb_Extension*)_upb_Message_Getext(msg, e);
if (ext) return ext;
- if (!realloc_internal(msg, sizeof(upb_Message_Extension), arena)) return NULL;
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- in->internal->ext_begin -= sizeof(upb_Message_Extension);
- ext = UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
- memset(ext, 0, sizeof(upb_Message_Extension));
+ if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, sizeof(struct upb_Extension), a))
+ return NULL;
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ in->ext_begin -= sizeof(struct upb_Extension);
+ ext = UPB_PTR_AT(in, in->ext_begin, void);
+ memset(ext, 0, sizeof(struct upb_Extension));
ext->ext = e;
return ext;
}
-size_t upb_Message_ExtensionCount(const upb_Message* msg) {
- size_t count;
- _upb_Message_Getexts(msg, &count);
- return count;
-}
+#include <math.h>
+#include <string.h>
// Must be last.
-typedef struct {
- upb_MdDecoder base;
- upb_Arena* arena;
- upb_MiniTableEnum* enum_table;
- uint32_t enum_value_count;
- uint32_t enum_data_count;
- uint32_t enum_data_capacity;
-} upb_MdEnumDecoder;
+const float kUpb_FltInfinity = INFINITY;
+const double kUpb_Infinity = INFINITY;
+const double kUpb_NaN = NAN;
-static size_t upb_MiniTableEnum_Size(size_t count) {
- return sizeof(upb_MiniTableEnum) + count * sizeof(uint32_t);
-}
+bool UPB_PRIVATE(_upb_Message_Realloc)(struct upb_Message* msg, size_t need,
+ upb_Arena* a) {
+ const size_t overhead = sizeof(upb_Message_InternalData);
-static upb_MiniTableEnum* _upb_MiniTable_AddEnumDataMember(upb_MdEnumDecoder* d,
- uint32_t val) {
- if (d->enum_data_count == d->enum_data_capacity) {
- size_t old_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
- d->enum_data_capacity = UPB_MAX(2, d->enum_data_capacity * 2);
- size_t new_sz = upb_MiniTableEnum_Size(d->enum_data_capacity);
- d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz);
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
- }
- d->enum_table->data[d->enum_data_count++] = val;
- return d->enum_table;
-}
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (!in) {
+ // No internal data, allocate from scratch.
+ size_t size = UPB_MAX(128, upb_Log2CeilingSize(need + overhead));
+ in = upb_Arena_Malloc(a, size);
+ if (!in) return false;
-static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) {
- upb_MiniTableEnum* table = d->enum_table;
- d->enum_value_count++;
- if (table->value_count || (val > 512 && d->enum_value_count < val / 32)) {
- if (table->value_count == 0) {
- assert(d->enum_data_count == table->mask_limit / 32);
+ in->size = size;
+ in->unknown_end = overhead;
+ in->ext_begin = size;
+ owner->internal = in;
+ } else if (in->ext_begin - in->unknown_end < need) {
+ // Internal data is too small, reallocate.
+ size_t new_size = upb_Log2CeilingSize(in->size + need);
+ size_t ext_bytes = in->size - in->ext_begin;
+ size_t new_ext_begin = new_size - ext_bytes;
+ in = upb_Arena_Realloc(a, in, in->size, new_size);
+ if (!in) return false;
+
+ if (ext_bytes) {
+ // Need to move extension data to the end.
+ char* ptr = (char*)in;
+ memmove(ptr + new_ext_begin, ptr + in->ext_begin, ext_bytes);
}
- table = _upb_MiniTable_AddEnumDataMember(d, val);
- table->value_count++;
- } else {
- uint32_t new_mask_limit = ((val / 32) + 1) * 32;
- while (table->mask_limit < new_mask_limit) {
- table = _upb_MiniTable_AddEnumDataMember(d, 0);
- table->mask_limit += 32;
- }
- table->data[val / 32] |= 1ULL << (val % 32);
- }
-}
-
-static upb_MiniTableEnum* upb_MtDecoder_DoBuildMiniTableEnum(
- upb_MdEnumDecoder* d, const char* data, size_t len) {
- // If the string is non-empty then it must begin with a version tag.
- if (len) {
- if (*data != kUpb_EncodedVersion_EnumV1) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid enum version: %c", *data);
- }
- data++;
- len--;
+ in->ext_begin = new_ext_begin;
+ in->size = new_size;
+ owner->internal = in;
}
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
-
- // Guarantee at least 64 bits of mask without checking mask size.
- d->enum_table->mask_limit = 64;
- d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
- d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
-
- d->enum_table->value_count = 0;
-
- const char* ptr = data;
- uint32_t base = 0;
-
- while (ptr < d->base.end) {
- char ch = *ptr++;
- if (ch <= kUpb_EncodedValue_MaxEnumMask) {
- uint32_t mask = _upb_FromBase92(ch);
- for (int i = 0; i < 5; i++, base++, mask >>= 1) {
- if (mask & 1) upb_MiniTableEnum_BuildValue(d, base);
- }
- } else if (kUpb_EncodedValue_MinSkip <= ch &&
- ch <= kUpb_EncodedValue_MaxSkip) {
- uint32_t skip;
- ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
- kUpb_EncodedValue_MinSkip,
- kUpb_EncodedValue_MaxSkip, &skip);
- base += skip;
- } else {
- upb_MdDecoder_ErrorJmp(&d->base, "Unexpected character: %c", ch);
- }
- }
-
- return d->enum_table;
-}
-
-static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum(
- upb_MdEnumDecoder* const decoder, const char* const data, size_t const len) {
- if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
- return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len);
-}
-
-upb_MiniTableEnum* upb_MiniDescriptor_BuildEnum(const char* data, size_t len,
- upb_Arena* arena,
- upb_Status* status) {
- upb_MdEnumDecoder decoder = {
- .base =
- {
- .end = UPB_PTRADD(data, len),
- .status = status,
- },
- .arena = arena,
- .enum_table = upb_Arena_Malloc(arena, upb_MiniTableEnum_Size(2)),
- .enum_value_count = 0,
- .enum_data_count = 0,
- .enum_data_capacity = 1,
- };
-
- return upb_MtDecoder_BuildMiniTableEnum(&decoder, data, len);
-}
-
-
-#include <inttypes.h>
-#include <stdlib.h>
-
-
-// Must be last.
-
-// Note: we sort by this number when calculating layout order.
-typedef enum {
- kUpb_LayoutItemType_OneofCase, // Oneof case.
- kUpb_LayoutItemType_OneofField, // Oneof field data.
- kUpb_LayoutItemType_Field, // Non-oneof field data.
-
- kUpb_LayoutItemType_Max = kUpb_LayoutItemType_Field,
-} upb_LayoutItemType;
-
-#define kUpb_LayoutItem_IndexSentinel ((uint16_t)-1)
-
-typedef struct {
- // Index of the corresponding field. When this is a oneof field, the field's
- // offset will be the index of the next field in a linked list.
- uint16_t field_index;
- uint16_t offset;
- upb_FieldRep rep;
- upb_LayoutItemType type;
-} upb_LayoutItem;
-
-typedef struct {
- upb_LayoutItem* data;
- size_t size;
- size_t capacity;
-} upb_LayoutItemVector;
-
-typedef struct {
- upb_MdDecoder base;
- upb_MiniTable* table;
- upb_MiniTableField* fields;
- upb_MiniTablePlatform platform;
- upb_LayoutItemVector vec;
- upb_Arena* arena;
-} upb_MtDecoder;
-
-// In each field's offset, we temporarily store a presence classifier:
-enum PresenceClass {
- kNoPresence = 0,
- kHasbitPresence = 1,
- kRequiredPresence = 2,
- kOneofBase = 3,
- // Negative values refer to a specific oneof with that number. Positive
- // values >= kOneofBase indicate that this field is in a oneof, and specify
- // the next field in this oneof's linked list.
-};
-
-static bool upb_MtDecoder_FieldIsPackable(upb_MiniTableField* field) {
- return (field->mode & kUpb_FieldMode_Array) &&
- upb_FieldType_IsPackable(field->UPB_PRIVATE(descriptortype));
-}
-
-typedef struct {
- uint16_t submsg_count;
- uint16_t subenum_count;
-} upb_SubCounts;
-
-static void upb_MiniTable_SetTypeAndSub(upb_MiniTableField* field,
- upb_FieldType type,
- upb_SubCounts* sub_counts,
- uint64_t msg_modifiers,
- bool is_proto3_enum) {
- if (is_proto3_enum) {
- UPB_ASSERT(type == kUpb_FieldType_Enum);
- type = kUpb_FieldType_Int32;
- field->mode |= kUpb_LabelFlags_IsAlternate;
- } else if (type == kUpb_FieldType_String &&
- !(msg_modifiers & kUpb_MessageModifier_ValidateUtf8)) {
- type = kUpb_FieldType_Bytes;
- field->mode |= kUpb_LabelFlags_IsAlternate;
- }
-
- field->UPB_PRIVATE(descriptortype) = type;
-
- if (upb_MtDecoder_FieldIsPackable(field) &&
- (msg_modifiers & kUpb_MessageModifier_DefaultIsPacked)) {
- field->mode |= kUpb_LabelFlags_IsPacked;
- }
-
- if (type == kUpb_FieldType_Message || type == kUpb_FieldType_Group) {
- field->UPB_PRIVATE(submsg_index) = sub_counts->submsg_count++;
- } else if (type == kUpb_FieldType_Enum) {
- // We will need to update this later once we know the total number of
- // submsg fields.
- field->UPB_PRIVATE(submsg_index) = sub_counts->subenum_count++;
- } else {
- field->UPB_PRIVATE(submsg_index) = kUpb_NoSub;
- }
-}
-
-static const char kUpb_EncodedToType[] = {
- [kUpb_EncodedType_Double] = kUpb_FieldType_Double,
- [kUpb_EncodedType_Float] = kUpb_FieldType_Float,
- [kUpb_EncodedType_Int64] = kUpb_FieldType_Int64,
- [kUpb_EncodedType_UInt64] = kUpb_FieldType_UInt64,
- [kUpb_EncodedType_Int32] = kUpb_FieldType_Int32,
- [kUpb_EncodedType_Fixed64] = kUpb_FieldType_Fixed64,
- [kUpb_EncodedType_Fixed32] = kUpb_FieldType_Fixed32,
- [kUpb_EncodedType_Bool] = kUpb_FieldType_Bool,
- [kUpb_EncodedType_String] = kUpb_FieldType_String,
- [kUpb_EncodedType_Group] = kUpb_FieldType_Group,
- [kUpb_EncodedType_Message] = kUpb_FieldType_Message,
- [kUpb_EncodedType_Bytes] = kUpb_FieldType_Bytes,
- [kUpb_EncodedType_UInt32] = kUpb_FieldType_UInt32,
- [kUpb_EncodedType_OpenEnum] = kUpb_FieldType_Enum,
- [kUpb_EncodedType_SFixed32] = kUpb_FieldType_SFixed32,
- [kUpb_EncodedType_SFixed64] = kUpb_FieldType_SFixed64,
- [kUpb_EncodedType_SInt32] = kUpb_FieldType_SInt32,
- [kUpb_EncodedType_SInt64] = kUpb_FieldType_SInt64,
- [kUpb_EncodedType_ClosedEnum] = kUpb_FieldType_Enum,
-};
-
-static void upb_MiniTable_SetField(upb_MtDecoder* d, uint8_t ch,
- upb_MiniTableField* field,
- uint64_t msg_modifiers,
- upb_SubCounts* sub_counts) {
- static const char kUpb_EncodedToFieldRep[] = {
- [kUpb_EncodedType_Double] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_Float] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_Int64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_UInt64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_Int32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_Fixed64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_Fixed32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_Bool] = kUpb_FieldRep_1Byte,
- [kUpb_EncodedType_String] = kUpb_FieldRep_StringView,
- [kUpb_EncodedType_Bytes] = kUpb_FieldRep_StringView,
- [kUpb_EncodedType_UInt32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_OpenEnum] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_SFixed32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_SFixed64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_SInt32] = kUpb_FieldRep_4Byte,
- [kUpb_EncodedType_SInt64] = kUpb_FieldRep_8Byte,
- [kUpb_EncodedType_ClosedEnum] = kUpb_FieldRep_4Byte,
- };
-
- char pointer_rep = d->platform == kUpb_MiniTablePlatform_32Bit
- ? kUpb_FieldRep_4Byte
- : kUpb_FieldRep_8Byte;
-
- int8_t type = _upb_FromBase92(ch);
- if (ch >= _upb_ToBase92(kUpb_EncodedType_RepeatedBase)) {
- type -= kUpb_EncodedType_RepeatedBase;
- field->mode = kUpb_FieldMode_Array;
- field->mode |= pointer_rep << kUpb_FieldRep_Shift;
- field->offset = kNoPresence;
- } else {
- field->mode = kUpb_FieldMode_Scalar;
- field->offset = kHasbitPresence;
- if (type == kUpb_EncodedType_Group || type == kUpb_EncodedType_Message) {
- field->mode |= pointer_rep << kUpb_FieldRep_Shift;
- } else if ((unsigned long)type >= sizeof(kUpb_EncodedToFieldRep)) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
- } else {
- field->mode |= kUpb_EncodedToFieldRep[type] << kUpb_FieldRep_Shift;
- }
- }
- if ((unsigned long)type >= sizeof(kUpb_EncodedToType)) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
- }
- upb_MiniTable_SetTypeAndSub(field, kUpb_EncodedToType[type], sub_counts,
- msg_modifiers, type == kUpb_EncodedType_OpenEnum);
-}
-
-static void upb_MtDecoder_ModifyField(upb_MtDecoder* d,
- uint32_t message_modifiers,
- uint32_t field_modifiers,
- upb_MiniTableField* field) {
- if (field_modifiers & kUpb_EncodedFieldModifier_FlipPacked) {
- if (!upb_MtDecoder_FieldIsPackable(field)) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Cannot flip packed on unpackable field %" PRIu32,
- field->number);
- }
- field->mode ^= kUpb_LabelFlags_IsPacked;
- }
-
- if (field_modifiers & kUpb_EncodedFieldModifier_FlipValidateUtf8) {
- if (field->UPB_PRIVATE(descriptortype) != kUpb_FieldType_Bytes ||
- !(field->mode & kUpb_LabelFlags_IsAlternate)) {
- upb_MdDecoder_ErrorJmp(
- &d->base,
- "Cannot flip ValidateUtf8 on field %" PRIu32 ", type=%d, mode=%d",
- field->number, (int)field->UPB_PRIVATE(descriptortype),
- (int)field->mode);
- }
- field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_String;
- field->mode &= ~kUpb_LabelFlags_IsAlternate;
- }
-
- bool singular = field_modifiers & kUpb_EncodedFieldModifier_IsProto3Singular;
- bool required = field_modifiers & kUpb_EncodedFieldModifier_IsRequired;
-
- // Validate.
- if ((singular || required) && field->offset != kHasbitPresence) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Invalid modifier(s) for repeated field %" PRIu32,
- field->number);
- }
- if (singular && required) {
- upb_MdDecoder_ErrorJmp(
- &d->base, "Field %" PRIu32 " cannot be both singular and required",
- field->number);
- }
-
- if (singular) field->offset = kNoPresence;
- if (required) {
- field->offset = kRequiredPresence;
- }
-}
-
-static void upb_MtDecoder_PushItem(upb_MtDecoder* d, upb_LayoutItem item) {
- if (d->vec.size == d->vec.capacity) {
- size_t new_cap = UPB_MAX(8, d->vec.size * 2);
- d->vec.data = realloc(d->vec.data, new_cap * sizeof(*d->vec.data));
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->vec.data);
- d->vec.capacity = new_cap;
- }
- d->vec.data[d->vec.size++] = item;
-}
-
-static void upb_MtDecoder_PushOneof(upb_MtDecoder* d, upb_LayoutItem item) {
- if (item.field_index == kUpb_LayoutItem_IndexSentinel) {
- upb_MdDecoder_ErrorJmp(&d->base, "Empty oneof");
- }
- item.field_index -= kOneofBase;
-
- // Push oneof data.
- item.type = kUpb_LayoutItemType_OneofField;
- upb_MtDecoder_PushItem(d, item);
-
- // Push oneof case.
- item.rep = kUpb_FieldRep_4Byte; // Field Number.
- item.type = kUpb_LayoutItemType_OneofCase;
- upb_MtDecoder_PushItem(d, item);
-}
-
-size_t upb_MtDecoder_SizeOfRep(upb_FieldRep rep,
- upb_MiniTablePlatform platform) {
- static const uint8_t kRepToSize32[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 8,
- [kUpb_FieldRep_8Byte] = 8,
- };
- static const uint8_t kRepToSize64[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 16,
- [kUpb_FieldRep_8Byte] = 8,
- };
- UPB_ASSERT(sizeof(upb_StringView) ==
- UPB_SIZE(kRepToSize32, kRepToSize64)[kUpb_FieldRep_StringView]);
- return platform == kUpb_MiniTablePlatform_32Bit ? kRepToSize32[rep]
- : kRepToSize64[rep];
-}
-
-size_t upb_MtDecoder_AlignOfRep(upb_FieldRep rep,
- upb_MiniTablePlatform platform) {
- static const uint8_t kRepToAlign32[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 4,
- [kUpb_FieldRep_8Byte] = 8,
- };
- static const uint8_t kRepToAlign64[] = {
- [kUpb_FieldRep_1Byte] = 1,
- [kUpb_FieldRep_4Byte] = 4,
- [kUpb_FieldRep_StringView] = 8,
- [kUpb_FieldRep_8Byte] = 8,
- };
- UPB_ASSERT(UPB_ALIGN_OF(upb_StringView) ==
- UPB_SIZE(kRepToAlign32, kRepToAlign64)[kUpb_FieldRep_StringView]);
- return platform == kUpb_MiniTablePlatform_32Bit ? kRepToAlign32[rep]
- : kRepToAlign64[rep];
-}
-
-static const char* upb_MtDecoder_DecodeOneofField(upb_MtDecoder* d,
- const char* ptr,
- char first_ch,
- upb_LayoutItem* item) {
- uint32_t field_num;
- ptr = upb_MdDecoder_DecodeBase92Varint(
- &d->base, ptr, first_ch, kUpb_EncodedValue_MinOneofField,
- kUpb_EncodedValue_MaxOneofField, &field_num);
- upb_MiniTableField* f =
- (void*)upb_MiniTable_FindFieldByNumber(d->table, field_num);
-
- if (!f) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Couldn't add field number %" PRIu32
- " to oneof, no such field number.",
- field_num);
- }
- if (f->offset != kHasbitPresence) {
- upb_MdDecoder_ErrorJmp(
- &d->base,
- "Cannot add repeated, required, or singular field %" PRIu32
- " to oneof.",
- field_num);
- }
-
- // Oneof storage must be large enough to accommodate the largest member.
- int rep = f->mode >> kUpb_FieldRep_Shift;
- if (upb_MtDecoder_SizeOfRep(rep, d->platform) >
- upb_MtDecoder_SizeOfRep(item->rep, d->platform)) {
- item->rep = rep;
- }
- // Prepend this field to the linked list.
- f->offset = item->field_index;
- item->field_index = (f - d->fields) + kOneofBase;
- return ptr;
-}
-
-static const char* upb_MtDecoder_DecodeOneofs(upb_MtDecoder* d,
- const char* ptr) {
- upb_LayoutItem item = {.rep = 0,
- .field_index = kUpb_LayoutItem_IndexSentinel};
- while (ptr < d->base.end) {
- char ch = *ptr++;
- if (ch == kUpb_EncodedValue_FieldSeparator) {
- // Field separator, no action needed.
- } else if (ch == kUpb_EncodedValue_OneofSeparator) {
- // End of oneof.
- upb_MtDecoder_PushOneof(d, item);
- item.field_index = kUpb_LayoutItem_IndexSentinel; // Move to next oneof.
- } else {
- ptr = upb_MtDecoder_DecodeOneofField(d, ptr, ch, &item);
- }
- }
-
- // Push final oneof.
- upb_MtDecoder_PushOneof(d, item);
- return ptr;
-}
-
-static const char* upb_MtDecoder_ParseModifier(upb_MtDecoder* d,
- const char* ptr, char first_ch,
- upb_MiniTableField* last_field,
- uint64_t* msg_modifiers) {
- uint32_t mod;
- ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, first_ch,
- kUpb_EncodedValue_MinModifier,
- kUpb_EncodedValue_MaxModifier, &mod);
- if (last_field) {
- upb_MtDecoder_ModifyField(d, *msg_modifiers, mod, last_field);
- } else {
- if (!d->table) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "Extensions cannot have message modifiers");
- }
- *msg_modifiers = mod;
- }
-
- return ptr;
-}
-
-static void upb_MtDecoder_AllocateSubs(upb_MtDecoder* d,
- upb_SubCounts sub_counts) {
- uint32_t total_count = sub_counts.submsg_count + sub_counts.subenum_count;
- size_t subs_bytes = sizeof(*d->table->subs) * total_count;
- upb_MiniTableSub* subs = upb_Arena_Malloc(d->arena, subs_bytes);
- upb_MdDecoder_CheckOutOfMemory(&d->base, subs);
- uint32_t i = 0;
- for (; i < sub_counts.submsg_count; i++) {
- subs[i].submsg = &_kUpb_MiniTable_Empty;
- }
- if (sub_counts.subenum_count) {
- upb_MiniTableField* f = d->fields;
- upb_MiniTableField* end_f = f + d->table->field_count;
- for (; f < end_f; f++) {
- if (f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum) {
- f->UPB_PRIVATE(submsg_index) += sub_counts.submsg_count;
- }
- }
- for (; i < sub_counts.submsg_count + sub_counts.subenum_count; i++) {
- subs[i].subenum = NULL;
- }
- }
- d->table->subs = subs;
-}
-
-static const char* upb_MtDecoder_Parse(upb_MtDecoder* d, const char* ptr,
- size_t len, void* fields,
- size_t field_size, uint16_t* field_count,
- upb_SubCounts* sub_counts) {
- uint64_t msg_modifiers = 0;
- uint32_t last_field_number = 0;
- upb_MiniTableField* last_field = NULL;
- bool need_dense_below = d->table != NULL;
-
- d->base.end = UPB_PTRADD(ptr, len);
-
- while (ptr < d->base.end) {
- char ch = *ptr++;
- if (ch <= kUpb_EncodedValue_MaxField) {
- if (!d->table && last_field) {
- // For extensions, consume only a single field and then return.
- return --ptr;
- }
- upb_MiniTableField* field = fields;
- *field_count += 1;
- fields = (char*)fields + field_size;
- field->number = ++last_field_number;
- last_field = field;
- upb_MiniTable_SetField(d, ch, field, msg_modifiers, sub_counts);
- } else if (kUpb_EncodedValue_MinModifier <= ch &&
- ch <= kUpb_EncodedValue_MaxModifier) {
- ptr = upb_MtDecoder_ParseModifier(d, ptr, ch, last_field, &msg_modifiers);
- if (msg_modifiers & kUpb_MessageModifier_IsExtendable) {
- d->table->ext |= kUpb_ExtMode_Extendable;
- }
- } else if (ch == kUpb_EncodedValue_End) {
- if (!d->table) {
- upb_MdDecoder_ErrorJmp(&d->base, "Extensions cannot have oneofs.");
- }
- ptr = upb_MtDecoder_DecodeOneofs(d, ptr);
- } else if (kUpb_EncodedValue_MinSkip <= ch &&
- ch <= kUpb_EncodedValue_MaxSkip) {
- if (need_dense_below) {
- d->table->dense_below = d->table->field_count;
- need_dense_below = false;
- }
- uint32_t skip;
- ptr = upb_MdDecoder_DecodeBase92Varint(&d->base, ptr, ch,
- kUpb_EncodedValue_MinSkip,
- kUpb_EncodedValue_MaxSkip, &skip);
- last_field_number += skip;
- last_field_number--; // Next field seen will increment.
- } else {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid char: %c", ch);
- }
- }
-
- if (need_dense_below) {
- d->table->dense_below = d->table->field_count;
- }
-
- return ptr;
-}
-
-static void upb_MtDecoder_ParseMessage(upb_MtDecoder* d, const char* data,
- size_t len) {
- // Buffer length is an upper bound on the number of fields. We will return
- // what we don't use.
- d->fields = upb_Arena_Malloc(d->arena, sizeof(*d->fields) * len);
- upb_MdDecoder_CheckOutOfMemory(&d->base, d->fields);
-
- upb_SubCounts sub_counts = {0, 0};
- d->table->field_count = 0;
- d->table->fields = d->fields;
- upb_MtDecoder_Parse(d, data, len, d->fields, sizeof(*d->fields),
- &d->table->field_count, &sub_counts);
-
- upb_Arena_ShrinkLast(d->arena, d->fields, sizeof(*d->fields) * len,
- sizeof(*d->fields) * d->table->field_count);
- d->table->fields = d->fields;
- upb_MtDecoder_AllocateSubs(d, sub_counts);
-}
-
-int upb_MtDecoder_CompareFields(const void* _a, const void* _b) {
- const upb_LayoutItem* a = _a;
- const upb_LayoutItem* b = _b;
- // Currently we just sort by:
- // 1. rep (smallest fields first)
- // 2. type (oneof cases first)
- // 2. field_index (smallest numbers first)
- // The main goal of this is to reduce space lost to padding.
- // Later we may have more subtle reasons to prefer a different ordering.
- const int rep_bits = upb_Log2Ceiling(kUpb_FieldRep_Max);
- const int type_bits = upb_Log2Ceiling(kUpb_LayoutItemType_Max);
- const int idx_bits = (sizeof(a->field_index) * 8);
- UPB_ASSERT(idx_bits + rep_bits + type_bits < 32);
-#define UPB_COMBINE(rep, ty, idx) (((rep << type_bits) | ty) << idx_bits) | idx
- uint32_t a_packed = UPB_COMBINE(a->rep, a->type, a->field_index);
- uint32_t b_packed = UPB_COMBINE(b->rep, b->type, b->field_index);
- assert(a_packed != b_packed);
-#undef UPB_COMBINE
- return a_packed < b_packed ? -1 : 1;
-}
-
-static bool upb_MtDecoder_SortLayoutItems(upb_MtDecoder* d) {
- // Add items for all non-oneof fields (oneofs were already added).
- int n = d->table->field_count;
- for (int i = 0; i < n; i++) {
- upb_MiniTableField* f = &d->fields[i];
- if (f->offset >= kOneofBase) continue;
- upb_LayoutItem item = {.field_index = i,
- .rep = f->mode >> kUpb_FieldRep_Shift,
- .type = kUpb_LayoutItemType_Field};
- upb_MtDecoder_PushItem(d, item);
- }
-
- if (d->vec.size) {
- qsort(d->vec.data, d->vec.size, sizeof(*d->vec.data),
- upb_MtDecoder_CompareFields);
- }
-
- return true;
-}
-
-static size_t upb_MiniTable_DivideRoundUp(size_t n, size_t d) {
- return (n + d - 1) / d;
-}
-
-static void upb_MtDecoder_AssignHasbits(upb_MtDecoder* d) {
- upb_MiniTable* ret = d->table;
- int n = ret->field_count;
- int last_hasbit = 0; // 0 cannot be used.
-
- // First assign required fields, which must have the lowest hasbits.
- for (int i = 0; i < n; i++) {
- upb_MiniTableField* field = (upb_MiniTableField*)&ret->fields[i];
- if (field->offset == kRequiredPresence) {
- field->presence = ++last_hasbit;
- } else if (field->offset == kNoPresence) {
- field->presence = 0;
- }
- }
- ret->required_count = last_hasbit;
-
- if (ret->required_count > 63) {
- upb_MdDecoder_ErrorJmp(&d->base, "Too many required fields");
- }
-
- // Next assign non-required hasbit fields.
- for (int i = 0; i < n; i++) {
- upb_MiniTableField* field = (upb_MiniTableField*)&ret->fields[i];
- if (field->offset == kHasbitPresence) {
- field->presence = ++last_hasbit;
- }
- }
-
- ret->size = last_hasbit ? upb_MiniTable_DivideRoundUp(last_hasbit + 1, 8) : 0;
-}
-
-size_t upb_MtDecoder_Place(upb_MtDecoder* d, upb_FieldRep rep) {
- size_t size = upb_MtDecoder_SizeOfRep(rep, d->platform);
- size_t align = upb_MtDecoder_AlignOfRep(rep, d->platform);
- size_t ret = UPB_ALIGN_UP(d->table->size, align);
- static const size_t max = UINT16_MAX;
- size_t new_size = ret + size;
- if (new_size > max) {
- upb_MdDecoder_ErrorJmp(
- &d->base, "Message size exceeded maximum size of %zu bytes", max);
- }
- d->table->size = new_size;
- return ret;
-}
-
-static void upb_MtDecoder_AssignOffsets(upb_MtDecoder* d) {
- upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
-
- // Compute offsets.
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- item->offset = upb_MtDecoder_Place(d, item->rep);
- }
-
- // Assign oneof case offsets. We must do these first, since assigning
- // actual offsets will overwrite the links of the linked list.
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- if (item->type != kUpb_LayoutItemType_OneofCase) continue;
- upb_MiniTableField* f = &d->fields[item->field_index];
- while (true) {
- f->presence = ~item->offset;
- if (f->offset == kUpb_LayoutItem_IndexSentinel) break;
- UPB_ASSERT(f->offset - kOneofBase < d->table->field_count);
- f = &d->fields[f->offset - kOneofBase];
- }
- }
-
- // Assign offsets.
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- upb_MiniTableField* f = &d->fields[item->field_index];
- switch (item->type) {
- case kUpb_LayoutItemType_OneofField:
- while (true) {
- uint16_t next_offset = f->offset;
- f->offset = item->offset;
- if (next_offset == kUpb_LayoutItem_IndexSentinel) break;
- f = &d->fields[next_offset - kOneofBase];
- }
- break;
- case kUpb_LayoutItemType_Field:
- f->offset = item->offset;
- break;
- default:
- break;
- }
- }
-
- // The fasttable parser (supported on 64-bit only) depends on this being a
- // multiple of 8 in order to satisfy UPB_MALLOC_ALIGN, which is also 8.
- //
- // On 32-bit we could potentially make this smaller, but there is no
- // compelling reason to optimize this right now.
- d->table->size = UPB_ALIGN_UP(d->table->size, 8);
-}
-
-static void upb_MtDecoder_ValidateEntryField(upb_MtDecoder* d,
- const upb_MiniTableField* f,
- uint32_t expected_num) {
- const char* name = expected_num == 1 ? "key" : "val";
- if (f->number != expected_num) {
- upb_MdDecoder_ErrorJmp(&d->base,
- "map %s did not have expected number (%d vs %d)",
- name, expected_num, (int)f->number);
- }
-
- if (upb_IsRepeatedOrMap(f)) {
- upb_MdDecoder_ErrorJmp(
- &d->base, "map %s cannot be repeated or map, or be in oneof", name);
- }
-
- uint32_t not_ok_types;
- if (expected_num == 1) {
- not_ok_types = (1 << kUpb_FieldType_Float) | (1 << kUpb_FieldType_Double) |
- (1 << kUpb_FieldType_Message) | (1 << kUpb_FieldType_Group) |
- (1 << kUpb_FieldType_Bytes) | (1 << kUpb_FieldType_Enum);
- } else {
- not_ok_types = 1 << kUpb_FieldType_Group;
- }
-
- if ((1 << upb_MiniTableField_Type(f)) & not_ok_types) {
- upb_MdDecoder_ErrorJmp(&d->base, "map %s cannot have type %d", name,
- (int)f->UPB_PRIVATE(descriptortype));
- }
-}
-
-static void upb_MtDecoder_ParseMap(upb_MtDecoder* d, const char* data,
- size_t len) {
- upb_MtDecoder_ParseMessage(d, data, len);
- upb_MtDecoder_AssignHasbits(d);
-
- if (UPB_UNLIKELY(d->table->field_count != 2)) {
- upb_MdDecoder_ErrorJmp(&d->base, "%hu fields in map",
- d->table->field_count);
- UPB_UNREACHABLE();
- }
-
- upb_LayoutItem* end = UPB_PTRADD(d->vec.data, d->vec.size);
- for (upb_LayoutItem* item = d->vec.data; item < end; item++) {
- if (item->type == kUpb_LayoutItemType_OneofCase) {
- upb_MdDecoder_ErrorJmp(&d->base, "Map entry cannot have oneof");
- }
- }
-
- upb_MtDecoder_ValidateEntryField(d, &d->table->fields[0], 1);
- upb_MtDecoder_ValidateEntryField(d, &d->table->fields[1], 2);
-
- // Map entries have a pre-determined layout, regardless of types.
- // NOTE: sync with mini_table/message_internal.h.
- const size_t kv_size = d->platform == kUpb_MiniTablePlatform_32Bit ? 8 : 16;
- const size_t hasbit_size = 8;
- d->fields[0].offset = hasbit_size;
- d->fields[1].offset = hasbit_size + kv_size;
- d->table->size = UPB_ALIGN_UP(hasbit_size + kv_size + kv_size, 8);
-
- // Map entries have a special bit set to signal it's a map entry, used in
- // upb_MiniTable_SetSubMessage() below.
- d->table->ext |= kUpb_ExtMode_IsMapEntry;
-}
-
-static void upb_MtDecoder_ParseMessageSet(upb_MtDecoder* d, const char* data,
- size_t len) {
- if (len > 0) {
- upb_MdDecoder_ErrorJmp(&d->base, "Invalid message set encode length: %zu",
- len);
- }
-
- upb_MiniTable* ret = d->table;
- ret->size = 0;
- ret->field_count = 0;
- ret->ext = kUpb_ExtMode_IsMessageSet;
- ret->dense_below = 0;
- ret->table_mask = -1;
- ret->required_count = 0;
-}
-
-static upb_MiniTable* upb_MtDecoder_DoBuildMiniTableWithBuf(
- upb_MtDecoder* decoder, const char* data, size_t len, void** buf,
- size_t* buf_size) {
- upb_MdDecoder_CheckOutOfMemory(&decoder->base, decoder->table);
-
- decoder->table->size = 0;
- decoder->table->field_count = 0;
- decoder->table->ext = kUpb_ExtMode_NonExtendable;
- decoder->table->dense_below = 0;
- decoder->table->table_mask = -1;
- decoder->table->required_count = 0;
-
- // Strip off and verify the version tag.
- if (!len--) goto done;
- const char vers = *data++;
-
- switch (vers) {
- case kUpb_EncodedVersion_MapV1:
- upb_MtDecoder_ParseMap(decoder, data, len);
- break;
-
- case kUpb_EncodedVersion_MessageV1:
- upb_MtDecoder_ParseMessage(decoder, data, len);
- upb_MtDecoder_AssignHasbits(decoder);
- upb_MtDecoder_SortLayoutItems(decoder);
- upb_MtDecoder_AssignOffsets(decoder);
- break;
-
- case kUpb_EncodedVersion_MessageSetV1:
- upb_MtDecoder_ParseMessageSet(decoder, data, len);
- break;
-
- default:
- upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid message version: %c",
- vers);
- }
-
-done:
- *buf = decoder->vec.data;
- *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
- return decoder->table;
-}
-
-static upb_MiniTable* upb_MtDecoder_BuildMiniTableWithBuf(
- upb_MtDecoder* const decoder, const char* const data, const size_t len,
- void** const buf, size_t* const buf_size) {
- if (UPB_SETJMP(decoder->base.err) != 0) {
- *buf = decoder->vec.data;
- *buf_size = decoder->vec.capacity * sizeof(*decoder->vec.data);
- return NULL;
- }
-
- return upb_MtDecoder_DoBuildMiniTableWithBuf(decoder, data, len, buf,
- buf_size);
-}
-
-upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
- upb_MiniTablePlatform platform,
- upb_Arena* arena, void** buf,
- size_t* buf_size,
- upb_Status* status) {
- upb_MtDecoder decoder = {
- .base = {.status = status},
- .platform = platform,
- .vec =
- {
- .data = *buf,
- .capacity = *buf_size / sizeof(*decoder.vec.data),
- .size = 0,
- },
- .arena = arena,
- .table = upb_Arena_Malloc(arena, sizeof(*decoder.table)),
- };
-
- return upb_MtDecoder_BuildMiniTableWithBuf(&decoder, data, len, buf,
- buf_size);
-}
-
-static const char* upb_MtDecoder_DoBuildMiniTableExtension(
- upb_MtDecoder* decoder, const char* data, size_t len,
- upb_MiniTableExtension* ext, const upb_MiniTable* extendee,
- upb_MiniTableSub sub) {
- // If the string is non-empty then it must begin with a version tag.
- if (len) {
- if (*data != kUpb_EncodedVersion_ExtensionV1) {
- upb_MdDecoder_ErrorJmp(&decoder->base, "Invalid ext version: %c", *data);
- }
- data++;
- len--;
- }
-
- uint16_t count = 0;
- upb_SubCounts sub_counts = {0, 0};
- const char* ret = upb_MtDecoder_Parse(decoder, data, len, ext, sizeof(*ext),
- &count, &sub_counts);
- if (!ret || count != 1) return NULL;
-
- upb_MiniTableField* f = &ext->field;
-
- f->mode |= kUpb_LabelFlags_IsExtension;
- f->offset = 0;
- f->presence = 0;
-
- if (extendee->ext & kUpb_ExtMode_IsMessageSet) {
- // Extensions of MessageSet must be messages.
- if (!upb_IsSubMessage(f)) return NULL;
-
- // Extensions of MessageSet must be non-repeating.
- if ((f->mode & kUpb_FieldMode_Mask) == kUpb_FieldMode_Array) return NULL;
- }
-
- ext->extendee = extendee;
- ext->sub = sub;
-
- return ret;
-}
-
-static const char* upb_MtDecoder_BuildMiniTableExtension(
- upb_MtDecoder* const decoder, const char* const data, const size_t len,
- upb_MiniTableExtension* const ext, const upb_MiniTable* const extendee,
- const upb_MiniTableSub sub) {
- if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
- return upb_MtDecoder_DoBuildMiniTableExtension(decoder, data, len, ext,
- extendee, sub);
-}
-
-const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
- upb_MiniTableExtension* ext,
- const upb_MiniTable* extendee,
- upb_MiniTableSub sub,
- upb_MiniTablePlatform platform,
- upb_Status* status) {
- upb_MtDecoder decoder = {
- .base = {.status = status},
- .arena = NULL,
- .table = NULL,
- .platform = platform,
- };
-
- return upb_MtDecoder_BuildMiniTableExtension(&decoder, data, len, ext,
- extendee, sub);
-}
-
-upb_MiniTableExtension* _upb_MiniTableExtension_Build(
- const char* data, size_t len, const upb_MiniTable* extendee,
- upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
- upb_Status* status) {
- upb_MiniTableExtension* ext =
- upb_Arena_Malloc(arena, sizeof(upb_MiniTableExtension));
- if (UPB_UNLIKELY(!ext)) return NULL;
-
- const char* ptr = _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
- platform, status);
- if (UPB_UNLIKELY(!ptr)) return NULL;
-
- return ext;
-}
-
-upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
- upb_MiniTablePlatform platform,
- upb_Arena* arena, upb_Status* status) {
- void* buf = NULL;
- size_t size = 0;
- upb_MiniTable* ret = upb_MiniTable_BuildWithBuf(data, len, platform, arena,
- &buf, &size, status);
- free(buf);
- return ret;
-}
-
-
-// Must be last.
-
-bool upb_MiniTable_SetSubMessage(upb_MiniTable* table,
- upb_MiniTableField* field,
- const upb_MiniTable* sub) {
- UPB_ASSERT((uintptr_t)table->fields <= (uintptr_t)field &&
- (uintptr_t)field <
- (uintptr_t)(table->fields + table->field_count));
- UPB_ASSERT(sub);
-
- const bool sub_is_map = sub->ext & kUpb_ExtMode_IsMapEntry;
-
- switch (field->UPB_PRIVATE(descriptortype)) {
- case kUpb_FieldType_Message:
- if (sub_is_map) {
- const bool table_is_map = table->ext & kUpb_ExtMode_IsMapEntry;
- if (UPB_UNLIKELY(table_is_map)) return false;
-
- field->mode = (field->mode & ~kUpb_FieldMode_Mask) | kUpb_FieldMode_Map;
- }
- break;
-
- case kUpb_FieldType_Group:
- if (UPB_UNLIKELY(sub_is_map)) return false;
- break;
-
- default:
- return false;
- }
-
- upb_MiniTableSub* table_sub =
- (void*)&table->subs[field->UPB_PRIVATE(submsg_index)];
- // TODO: Add this assert back once YouTube is updated to not call
- // this function repeatedly.
- // UPB_ASSERT(table_sub->submsg == &_kUpb_MiniTable_Empty);
- table_sub->submsg = sub;
- return true;
-}
-
-bool upb_MiniTable_SetSubEnum(upb_MiniTable* table, upb_MiniTableField* field,
- const upb_MiniTableEnum* sub) {
- UPB_ASSERT((uintptr_t)table->fields <= (uintptr_t)field &&
- (uintptr_t)field <
- (uintptr_t)(table->fields + table->field_count));
- UPB_ASSERT(sub);
-
- upb_MiniTableSub* table_sub =
- (void*)&table->subs[field->UPB_PRIVATE(submsg_index)];
- table_sub->subenum = sub;
- return true;
-}
-
-uint32_t upb_MiniTable_GetSubList(const upb_MiniTable* mt,
- const upb_MiniTableField** subs) {
- uint32_t msg_count = 0;
- uint32_t enum_count = 0;
-
- for (int i = 0; i < mt->field_count; i++) {
- const upb_MiniTableField* f = &mt->fields[i];
- if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
- *subs = f;
- ++subs;
- msg_count++;
- }
- }
-
- for (int i = 0; i < mt->field_count; i++) {
- const upb_MiniTableField* f = &mt->fields[i];
- if (upb_MiniTableField_CType(f) == kUpb_CType_Enum) {
- *subs = f;
- ++subs;
- enum_count++;
- }
- }
-
- return (msg_count << 16) | enum_count;
-}
-
-// The list of sub_tables and sub_enums must exactly match the number and order
-// of sub-message fields and sub-enum fields given by upb_MiniTable_GetSubList()
-// above.
-bool upb_MiniTable_Link(upb_MiniTable* mt, const upb_MiniTable** sub_tables,
- size_t sub_table_count,
- const upb_MiniTableEnum** sub_enums,
- size_t sub_enum_count) {
- uint32_t msg_count = 0;
- uint32_t enum_count = 0;
-
- for (int i = 0; i < mt->field_count; i++) {
- upb_MiniTableField* f = (upb_MiniTableField*)&mt->fields[i];
- if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
- const upb_MiniTable* sub = sub_tables[msg_count++];
- if (msg_count > sub_table_count) return false;
- if (sub != NULL) {
- if (!upb_MiniTable_SetSubMessage(mt, f, sub)) return false;
- }
- }
- }
-
- for (int i = 0; i < mt->field_count; i++) {
- upb_MiniTableField* f = (upb_MiniTableField*)&mt->fields[i];
- if (upb_MiniTableField_IsClosedEnum(f)) {
- const upb_MiniTableEnum* sub = sub_enums[enum_count++];
- if (enum_count > sub_enum_count) return false;
- if (sub != NULL) {
- if (!upb_MiniTable_SetSubEnum(mt, f, sub)) return false;
- }
- }
- }
-
+ UPB_ASSERT(in->ext_begin - in->unknown_end >= need);
return true;
}
@@ -7660,148 +11137,20 @@
}
+#include <stddef.h>
// Must be last.
-#define EXTREG_KEY_SIZE (sizeof(upb_MiniTable*) + sizeof(uint32_t))
-
-struct upb_ExtensionRegistry {
- upb_Arena* arena;
- upb_strtable exts; // Key is upb_MiniTable* concatenated with fieldnum.
-};
-
-static void extreg_key(char* buf, const upb_MiniTable* l, uint32_t fieldnum) {
- memcpy(buf, &l, sizeof(l));
- memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum));
-}
-
-upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena) {
- upb_ExtensionRegistry* r = upb_Arena_Malloc(arena, sizeof(*r));
- if (!r) return NULL;
- r->arena = arena;
- if (!upb_strtable_init(&r->exts, 8, arena)) return NULL;
- return r;
-}
-
-UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension* e) {
- char buf[EXTREG_KEY_SIZE];
- extreg_key(buf, e->extendee, e->field.number);
- if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
- return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
- upb_value_constptr(e), r->arena);
-}
-
-bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension** e,
- size_t count) {
- const upb_MiniTableExtension** start = e;
- const upb_MiniTableExtension** end = UPB_PTRADD(e, count);
- for (; e < end; e++) {
- if (!upb_ExtensionRegistry_Add(r, *e)) goto failure;
- }
- return true;
-
-failure:
- // Back out the entries previously added.
- for (end = e, e = start; e < end; e++) {
- const upb_MiniTableExtension* ext = *e;
- char buf[EXTREG_KEY_SIZE];
- extreg_key(buf, ext->extendee, ext->field.number);
- upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
- }
- return false;
-}
-
-const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
- const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num) {
- char buf[EXTREG_KEY_SIZE];
- upb_value v;
- extreg_key(buf, t, num);
- if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) {
- return upb_value_getconstptr(v);
- } else {
- return NULL;
- }
-}
-
-
-#include <inttypes.h>
-
-
-// Must be last.
-
-const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
- const upb_MiniTable* t, uint32_t number) {
- const size_t i = ((size_t)number) - 1; // 0 wraps to SIZE_MAX
-
- // Ideal case: index into dense fields
- if (i < t->dense_below) {
- UPB_ASSERT(t->fields[i].number == number);
- return &t->fields[i];
- }
-
- // Slow case: binary search
- int lo = t->dense_below;
- int hi = t->field_count - 1;
- while (lo <= hi) {
- int mid = (lo + hi) / 2;
- uint32_t num = t->fields[mid].number;
- if (num < number) {
- lo = mid + 1;
- continue;
- }
- if (num > number) {
- hi = mid - 1;
- continue;
- }
- return &t->fields[mid];
- }
- return NULL;
-}
-
-static bool upb_MiniTable_Is_Oneof(const upb_MiniTableField* f) {
- return f->presence < 0;
-}
-
-const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
- const upb_MiniTableField* f) {
- if (UPB_UNLIKELY(!upb_MiniTable_Is_Oneof(f))) {
- return NULL;
- }
- const upb_MiniTableField* ptr = &m->fields[0];
- const upb_MiniTableField* end = &m->fields[m->field_count];
- for (; ptr < end; ptr++) {
- if (ptr->presence == (*f).presence) {
- return ptr;
- }
- }
- return NULL;
-}
-
-bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
- const upb_MiniTableField** f) {
- const upb_MiniTableField* ptr = *f;
- const upb_MiniTableField* end = &m->fields[m->field_count];
- while (++ptr < end) {
- if (ptr->presence == (*f)->presence) {
- *f = ptr;
- return true;
- }
- }
- return false;
-}
-
-
-const struct upb_MiniTable _kUpb_MiniTable_Empty = {
- .subs = NULL,
- .fields = NULL,
- .size = 0,
- .field_count = 0,
- .ext = kUpb_ExtMode_NonExtendable,
- .dense_below = 0,
- .table_mask = -1,
- .required_count = 0,
+// A MiniTable for an empty message, used for unlinked sub-messages.
+const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty) = {
+ .UPB_PRIVATE(subs) = NULL,
+ .UPB_PRIVATE(fields) = NULL,
+ .UPB_PRIVATE(size) = 0,
+ .UPB_PRIVATE(field_count) = 0,
+ .UPB_PRIVATE(ext) = kUpb_ExtMode_NonExtendable,
+ .UPB_PRIVATE(dense_below) = 0,
+ .UPB_PRIVATE(table_mask) = -1,
+ .UPB_PRIVATE(required_count) = 0,
};
@@ -7848,8 +11197,12 @@
if (!s->extreg) goto err;
s->platform = kUpb_MiniTablePlatform_Native;
- s->feature_set_defaults = UPB_DESC(FeatureSetDefaults_parse)(
- serialized_defaults, sizeof(serialized_defaults) - 1, s->arena);
+
+ upb_Status status;
+ if (!upb_DefPool_SetFeatureSetDefaults(
+ s, serialized_defaults, sizeof(serialized_defaults) - 1, &status)) {
+ goto err;
+ }
if (!s->feature_set_defaults) goto err;
@@ -7865,6 +11218,58 @@
return s->feature_set_defaults;
}
+bool upb_DefPool_SetFeatureSetDefaults(upb_DefPool* s,
+ const char* serialized_defaults,
+ size_t serialized_len,
+ upb_Status* status) {
+ const UPB_DESC(FeatureSetDefaults)* defaults = UPB_DESC(
+ FeatureSetDefaults_parse)(serialized_defaults, serialized_len, s->arena);
+ if (!defaults) {
+ upb_Status_SetErrorFormat(status, "Failed to parse defaults");
+ return false;
+ }
+ if (upb_strtable_count(&s->files) > 0) {
+ upb_Status_SetErrorFormat(status,
+ "Feature set defaults can't be changed once the "
+ "pool has started building");
+ return false;
+ }
+ int min_edition = UPB_DESC(FeatureSetDefaults_minimum_edition(defaults));
+ int max_edition = UPB_DESC(FeatureSetDefaults_maximum_edition(defaults));
+ if (min_edition > max_edition) {
+ upb_Status_SetErrorFormat(status, "Invalid edition range %s to %s",
+ upb_FileDef_EditionName(min_edition),
+ upb_FileDef_EditionName(max_edition));
+ return false;
+ }
+ size_t size;
+ const UPB_DESC(
+ FeatureSetDefaults_FeatureSetEditionDefault)* const* default_list =
+ UPB_DESC(FeatureSetDefaults_defaults(defaults, &size));
+ int prev_edition = UPB_DESC(EDITION_UNKNOWN);
+ for (size_t i = 0; i < size; ++i) {
+ int edition = UPB_DESC(
+ FeatureSetDefaults_FeatureSetEditionDefault_edition(default_list[i]));
+ if (edition == UPB_DESC(EDITION_UNKNOWN)) {
+ upb_Status_SetErrorFormat(status, "Invalid edition UNKNOWN specified");
+ return false;
+ }
+ if (edition <= prev_edition) {
+ upb_Status_SetErrorFormat(status,
+ "Feature set defaults are not strictly "
+ "increasing, %s is greater than or equal to %s",
+ upb_FileDef_EditionName(prev_edition),
+ upb_FileDef_EditionName(edition));
+ return false;
+ }
+ prev_edition = edition;
+ }
+
+ // Copy the defaults into the pool.
+ s->feature_set_defaults = defaults;
+ return true;
+}
+
bool _upb_DefPool_InsertExt(upb_DefPool* s, const upb_MiniTableExtension* ext,
const upb_FieldDef* f) {
return upb_inttable_insert(&s->exts, (uintptr_t)ext, upb_value_constptr(f),
@@ -8232,7 +11637,7 @@
const upb_FieldDef* f = upb_value_getconstptr(val);
if (upb_FieldDef_ContainingType(f) == m) n++;
}
- const upb_FieldDef** exts = malloc(n * sizeof(*exts));
+ const upb_FieldDef** exts = upb_gmalloc(n * sizeof(*exts));
iter = UPB_INTTABLE_BEGIN;
size_t i = 0;
while (upb_inttable_next(&s->exts, &key, &val, &iter)) {
@@ -8295,6 +11700,10 @@
}
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
// Must be last.
@@ -8350,6 +11759,11 @@
return e->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_EnumDef_ResolvedFeatures(const upb_EnumDef* e) {
+ return e->resolved_features;
+}
+
const char* upb_EnumDef_FullName(const upb_EnumDef* e) { return e->full_name; }
const char* upb_EnumDef_Name(const upb_EnumDef* e) {
@@ -8545,8 +11959,7 @@
if (upb_EnumDef_IsClosed(e)) {
if (ctx->layout) {
- UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count);
- e->layout = ctx->layout->enums[ctx->enum_count++];
+ e->layout = upb_MiniTableFile_Enum(ctx->layout, ctx->enum_count++);
} else {
e->layout = create_enumlayout(ctx, e);
}
@@ -8678,6 +12091,11 @@
return v->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_EnumValueDef_ResolvedFeatures(const upb_EnumValueDef* e) {
+ return e->resolved_features;
+}
+
const upb_EnumDef* upb_EnumValueDef_Enum(const upb_EnumValueDef* v) {
return v->parent;
}
@@ -8836,6 +12254,9 @@
#include <ctype.h>
#include <errno.h>
#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
// Must be last.
@@ -8896,43 +12317,17 @@
return f->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_FieldDef_ResolvedFeatures(const upb_FieldDef* f) {
+ return f->resolved_features;
+}
+
const char* upb_FieldDef_FullName(const upb_FieldDef* f) {
return f->full_name;
}
upb_CType upb_FieldDef_CType(const upb_FieldDef* f) {
- switch (f->type_) {
- case kUpb_FieldType_Double:
- return kUpb_CType_Double;
- case kUpb_FieldType_Float:
- return kUpb_CType_Float;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_SInt64:
- case kUpb_FieldType_SFixed64:
- return kUpb_CType_Int64;
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_SFixed32:
- case kUpb_FieldType_SInt32:
- return kUpb_CType_Int32;
- case kUpb_FieldType_UInt64:
- case kUpb_FieldType_Fixed64:
- return kUpb_CType_UInt64;
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Fixed32:
- return kUpb_CType_UInt32;
- case kUpb_FieldType_Enum:
- return kUpb_CType_Enum;
- case kUpb_FieldType_Bool:
- return kUpb_CType_Bool;
- case kUpb_FieldType_String:
- return kUpb_CType_String;
- case kUpb_FieldType_Bytes:
- return kUpb_CType_Bytes;
- case kUpb_FieldType_Group:
- case kUpb_FieldType_Message:
- return kUpb_CType_Message;
- }
- UPB_UNREACHABLE();
+ return upb_FieldType_CType(f->type_);
}
upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f) {
@@ -9058,7 +12453,7 @@
file, f->layout_index);
} else {
const upb_MiniTable* layout = upb_MessageDef_MiniTable(f->msgdef);
- return &layout->fields[f->layout_index];
+ return &layout->UPB_PRIVATE(fields)[f->layout_index];
}
}
@@ -9432,7 +12827,8 @@
bool implicit = false;
if (syntax != kUpb_Syntax_Editions) {
- upb_Message_Clear(ctx->legacy_features, UPB_DESC_MINITABLE(FeatureSet));
+ upb_Message_Clear(UPB_UPCAST(ctx->legacy_features),
+ UPB_DESC_MINITABLE(FeatureSet));
if (_upb_FieldDef_InferLegacyFeatures(ctx, f, field_proto, f->opts, syntax,
ctx->legacy_features)) {
implicit = true;
@@ -9440,6 +12836,25 @@
}
}
+ if (UPB_DESC(FieldDescriptorProto_has_oneof_index)(field_proto)) {
+ int oneof_index = UPB_DESC(FieldDescriptorProto_oneof_index)(field_proto);
+
+ if (!m) {
+ _upb_DefBuilder_Errf(ctx, "oneof field (%s) has no containing msg",
+ f->full_name);
+ }
+
+ if (oneof_index >= upb_MessageDef_OneofCount(m)) {
+ _upb_DefBuilder_Errf(ctx, "oneof_index out of range (%s)", f->full_name);
+ }
+
+ upb_OneofDef* oneof = (upb_OneofDef*)upb_MessageDef_Oneof(m, oneof_index);
+ f->scope.oneof = oneof;
+ parent_features = upb_OneofDef_ResolvedFeatures(oneof);
+
+ _upb_OneofDef_Insert(ctx, oneof, f, name.data, name.size);
+ }
+
f->resolved_features = _upb_DefBuilder_DoResolveFeatures(
ctx, parent_features, unresolved_features, implicit);
@@ -9503,26 +12918,10 @@
f->sub.unresolved = field_proto;
if (UPB_DESC(FieldDescriptorProto_has_oneof_index)(field_proto)) {
- int oneof_index = UPB_DESC(FieldDescriptorProto_oneof_index)(field_proto);
-
if (upb_FieldDef_Label(f) != kUpb_Label_Optional) {
_upb_DefBuilder_Errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
f->full_name);
}
-
- if (!m) {
- _upb_DefBuilder_Errf(ctx, "oneof field (%s) has no containing msg",
- f->full_name);
- }
-
- if (oneof_index >= upb_MessageDef_OneofCount(m)) {
- _upb_DefBuilder_Errf(ctx, "oneof_index out of range (%s)", f->full_name);
- }
-
- upb_OneofDef* oneof = (upb_OneofDef*)upb_MessageDef_Oneof(m, oneof_index);
- f->scope.oneof = oneof;
-
- _upb_OneofDef_Insert(ctx, oneof, f, name.data, name.size);
}
f->has_presence =
@@ -9551,7 +12950,8 @@
f->layout_index = ctx->ext_count++;
if (ctx->layout) {
- UPB_ASSERT(_upb_FieldDef_ExtensionMiniTable(f)->field.number == f->number_);
+ UPB_ASSERT(upb_MiniTableExtension_Number(
+ _upb_FieldDef_ExtensionMiniTable(f)) == f->number_);
}
}
@@ -9746,7 +13146,7 @@
const upb_MiniTableExtension* ext = _upb_FieldDef_ExtensionMiniTable(f);
if (ctx->layout) {
- UPB_ASSERT(upb_FieldDef_Number(f) == ext->field.number);
+ UPB_ASSERT(upb_FieldDef_Number(f) == upb_MiniTableExtension_Number(ext));
} else {
upb_StringView desc;
if (!upb_FieldDef_MiniDescriptorEncode(f, ctx->tmp_arena, &desc)) {
@@ -9756,9 +13156,11 @@
upb_MiniTableExtension* mut_ext = (upb_MiniTableExtension*)ext;
upb_MiniTableSub sub = {NULL};
if (upb_FieldDef_IsSubMessage(f)) {
- sub.submsg = upb_MessageDef_MiniTable(f->sub.msgdef);
+ const upb_MiniTable* submsg = upb_MessageDef_MiniTable(f->sub.msgdef);
+ sub = upb_MiniTableSub_FromMessage(submsg);
} else if (_upb_FieldDef_IsClosedEnum(f)) {
- sub.subenum = _upb_EnumDef_MiniTable(f->sub.enumdef);
+ const upb_MiniTableEnum* subenum = _upb_EnumDef_MiniTable(f->sub.enumdef);
+ sub = upb_MiniTableSub_FromEnum(subenum);
}
bool ok2 = upb_MiniTableExtension_Init(desc.data, desc.size, mut_ext,
upb_MessageDef_MiniTable(f->msgdef),
@@ -9814,6 +13216,8 @@
#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
// Must be last.
@@ -9846,6 +13250,20 @@
upb_Syntax syntax;
};
+UPB_API const char* upb_FileDef_EditionName(int edition) {
+ // TODO Synchronize this with descriptor.proto better.
+ switch (edition) {
+ case UPB_DESC(EDITION_PROTO2):
+ return "PROTO2";
+ case UPB_DESC(EDITION_PROTO3):
+ return "PROTO3";
+ case UPB_DESC(EDITION_2023):
+ return "2023";
+ default:
+ return "UNKNOWN";
+ }
+}
+
const UPB_DESC(FileOptions) * upb_FileDef_Options(const upb_FileDef* f) {
return f->opts;
}
@@ -9978,11 +13396,21 @@
int min = UPB_DESC(FeatureSetDefaults_minimum_edition)(defaults);
int max = UPB_DESC(FeatureSetDefaults_maximum_edition)(defaults);
- if (edition < min || edition > max) {
+ if (edition < min) {
_upb_DefBuilder_Errf(ctx,
- "Edition %d is outside the supported range [%d, %d] "
+ "Edition %s is earlier than the minimum edition %s "
"given in the defaults",
- edition, min, max);
+ upb_FileDef_EditionName(edition),
+ upb_FileDef_EditionName(min));
+ return NULL;
+ }
+ if (edition > max) {
+ _upb_DefBuilder_Errf(ctx,
+ "Edition %s is later than the maximum edition %s "
+ "given in the defaults",
+ upb_FileDef_EditionName(edition),
+ upb_FileDef_EditionName(max));
+ return NULL;
}
size_t n;
@@ -9996,6 +13424,11 @@
}
ret = UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault_features)(d[i]);
}
+ if (ret == NULL) {
+ _upb_DefBuilder_Errf(ctx, "No valid default found for edition %s",
+ upb_FileDef_EditionName(edition));
+ return NULL;
+ }
return ret;
}
@@ -10027,11 +13460,12 @@
if (ctx->layout) {
// We are using the ext layouts that were passed in.
- file->ext_layouts = ctx->layout->exts;
- if (ctx->layout->ext_count != file->ext_count) {
+ file->ext_layouts = ctx->layout->UPB_PRIVATE(exts);
+ const int mt_ext_count = upb_MiniTableFile_ExtensionCount(ctx->layout);
+ if (mt_ext_count != file->ext_count) {
_upb_DefBuilder_Errf(ctx,
"Extension count did not match layout (%d vs %d)",
- ctx->layout->ext_count, file->ext_count);
+ mt_ext_count, file->ext_count);
}
} else {
// We are building ext layouts from scratch.
@@ -10206,7 +13640,8 @@
* initialized to zeroes.
*
* We have to allocate an extra pointer for upb's internal metadata. */
-static const char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
+static UPB_ALIGN_AS(8) const
+ char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
const char* kUpbDefOptDefault = &opt_default_buf[sizeof(void*)];
const char* _upb_DefBuilder_FullToShort(const char* fullname) {
@@ -10296,15 +13731,15 @@
if (sym.size == 0) goto notfound;
upb_value v;
if (sym.data[0] == '.') {
- /* Symbols starting with '.' are absolute, so we do a single lookup.
- * Slice to omit the leading '.' */
+ // Symbols starting with '.' are absolute, so we do a single lookup.
+ // Slice to omit the leading '.'
if (!_upb_DefPool_LookupSym(ctx->symtab, sym.data + 1, sym.size - 1, &v)) {
goto notfound;
}
} else {
- /* Remove components from base until we find an entry or run out. */
+ // Remove components from base until we find an entry or run out.
size_t baselen = base ? strlen(base) : 0;
- char* tmp = malloc(sym.size + baselen + 1);
+ char* tmp = upb_gmalloc(sym.size + baselen + 1);
while (1) {
char* p = tmp;
if (baselen) {
@@ -10318,11 +13753,11 @@
break;
}
if (!remove_component(tmp, &baselen)) {
- free(tmp);
+ upb_gfree(tmp);
goto notfound;
}
}
- free(tmp);
+ upb_gfree(tmp);
}
*type = _upb_DefType_Type(v);
@@ -10547,8 +13982,8 @@
return false;
}
- *set =
- upb_Message_DeepClone(parent, UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
+ *set = (UPB_DESC(FeatureSet*))upb_Message_DeepClone(
+ UPB_UPCAST(parent), UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
if (!*set) _upb_DefBuilder_OomErr(ctx);
v = upb_value_ptr(*set);
@@ -10585,7 +14020,7 @@
}
upb_DecodeStatus dec_status =
- upb_Decode(child_bytes, child_size, resolved,
+ upb_Decode(child_bytes, child_size, UPB_UPCAST(resolved),
UPB_DESC_MINITABLE(FeatureSet), NULL, 0, ctx->arena);
if (dec_status != kUpb_DecodeStatus_Ok) _upb_DefBuilder_OomErr(ctx);
@@ -10617,6 +14052,7 @@
}
+#include <stdint.h>
#include <string.h>
@@ -10645,9 +14081,7 @@
upb_MessageValue upb_Message_GetFieldByDef(const upb_Message* msg,
const upb_FieldDef* f) {
upb_MessageValue default_val = upb_FieldDef_Default(f);
- upb_MessageValue ret;
- _upb_Message_GetField(msg, upb_FieldDef_MiniTable(f), &default_val, &ret);
- return ret;
+ return upb_Message_GetField(msg, upb_FieldDef_MiniTable(f), default_val);
}
upb_MutableMessageValue upb_Message_Mutable(upb_Message* msg,
@@ -10691,7 +14125,7 @@
bool upb_Message_SetFieldByDef(upb_Message* msg, const upb_FieldDef* f,
upb_MessageValue val, upb_Arena* a) {
- return _upb_Message_SetField(msg, upb_FieldDef_MiniTable(f), &val, a);
+ return upb_Message_SetField(msg, upb_FieldDef_MiniTable(f), val, a);
}
void upb_Message_ClearFieldByDef(upb_Message* msg, const upb_FieldDef* f) {
@@ -10719,7 +14153,7 @@
if (upb_MiniTableField_HasPresence(field)) {
if (!upb_Message_HasFieldByDef(msg, f)) continue;
} else {
- switch (upb_FieldMode_Get(field)) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(field)) {
case kUpb_FieldMode_Map:
if (!val.map_val || upb_Map_Size(val.map_val) == 0) continue;
break;
@@ -10727,7 +14161,8 @@
if (!val.array_val || upb_Array_Size(val.array_val) == 0) continue;
break;
case kUpb_FieldMode_Scalar:
- if (!_upb_MiniTable_ValueIsNonZero(&val, field)) continue;
+ if (UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, &val))
+ continue;
break;
}
}
@@ -10741,7 +14176,7 @@
if (ext_pool) {
// Return any extensions that are set.
size_t count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &count);
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
if (i - n < count) {
ext += count - 1 - (i - n);
memcpy(out_val, &ext->data, sizeof(*out_val));
@@ -10811,6 +14246,10 @@
}
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
// Must be last.
@@ -10925,6 +14364,11 @@
return m->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_MessageDef_ResolvedFeatures(const upb_MessageDef* m) {
+ return m->resolved_features;
+}
+
const char* upb_MessageDef_FullName(const upb_MessageDef* m) {
return m->full_name;
}
@@ -11218,9 +14662,8 @@
if (ctx->layout == NULL) {
m->layout = _upb_MessageDef_MakeMiniTable(ctx, m);
} else {
- UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count);
- m->layout = ctx->layout->msgs[ctx->msg_count++];
- UPB_ASSERT(m->field_count == m->layout->field_count);
+ m->layout = upb_MiniTableFile_Message(ctx->layout, ctx->msg_count++);
+ UPB_ASSERT(m->field_count == m->layout->UPB_PRIVATE(field_count));
// We don't need the result of this call, but it will assign layout_index
// for all the fields in O(n lg n) time.
@@ -11256,9 +14699,9 @@
UPB_ASSERT(layout_index < m->field_count);
upb_MiniTableField* mt_f =
- (upb_MiniTableField*)&m->layout->fields[layout_index];
+ (upb_MiniTableField*)&m->layout->UPB_PRIVATE(fields)[layout_index];
if (sub_m) {
- if (!mt->subs) {
+ if (!mt->UPB_PRIVATE(subs)) {
_upb_DefBuilder_Errf(ctx, "unexpected submsg for (%s)", m->full_name);
}
UPB_ASSERT(mt_f);
@@ -11278,8 +14721,9 @@
for (int i = 0; i < m->field_count; i++) {
const upb_FieldDef* f = upb_MessageDef_Field(m, i);
const int layout_index = _upb_FieldDef_LayoutIndex(f);
- UPB_ASSERT(layout_index < m->layout->field_count);
- const upb_MiniTableField* mt_f = &m->layout->fields[layout_index];
+ UPB_ASSERT(layout_index < m->layout->UPB_PRIVATE(field_count));
+ const upb_MiniTableField* mt_f =
+ &m->layout->UPB_PRIVATE(fields)[layout_index];
UPB_ASSERT(upb_FieldDef_Type(f) == upb_MiniTableField_Type(mt_f));
UPB_ASSERT(upb_FieldDef_CType(f) == upb_MiniTableField_CType(mt_f));
UPB_ASSERT(upb_FieldDef_HasPresence(f) ==
@@ -11618,6 +15062,11 @@
return m->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_MethodDef_ResolvedFeatures(const upb_MethodDef* m) {
+ return m->resolved_features;
+}
+
const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
return m->full_name;
}
@@ -11718,6 +15167,11 @@
return o->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_OneofDef_ResolvedFeatures(const upb_OneofDef* o) {
+ return o->resolved_features;
+}
+
const char* upb_OneofDef_FullName(const upb_OneofDef* o) {
return o->full_name;
}
@@ -11914,6 +15368,11 @@
return s->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_ServiceDef_ResolvedFeatures(const upb_ServiceDef* s) {
+ return s->resolved_features;
+}
+
const char* upb_ServiceDef_FullName(const upb_ServiceDef* s) {
return s->full_name;
}
@@ -11988,2977 +15447,6 @@
return s;
}
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-
-
-// Must be last.
-
-// A few fake field types for our tables.
-enum {
- kUpb_FakeFieldType_FieldNotFound = 0,
- kUpb_FakeFieldType_MessageSetItem = 19,
-};
-
-// DecodeOp: an action to be performed for a wire-type/field-type combination.
-enum {
- // Special ops: we don't write data to regular fields for these.
- kUpb_DecodeOp_UnknownField = -1,
- kUpb_DecodeOp_MessageSetItem = -2,
-
- // Scalar-only ops.
- kUpb_DecodeOp_Scalar1Byte = 0,
- kUpb_DecodeOp_Scalar4Byte = 2,
- kUpb_DecodeOp_Scalar8Byte = 3,
- kUpb_DecodeOp_Enum = 1,
-
- // Scalar/repeated ops.
- kUpb_DecodeOp_String = 4,
- kUpb_DecodeOp_Bytes = 5,
- kUpb_DecodeOp_SubMessage = 6,
-
- // Repeated-only ops (also see macros below).
- kUpb_DecodeOp_PackedEnum = 13,
-};
-
-// For packed fields it is helpful to be able to recover the lg2 of the data
-// size from the op.
-#define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
-#define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
-
-typedef union {
- bool bool_val;
- uint32_t uint32_val;
- uint64_t uint64_val;
- uint32_t size;
-} wireval;
-
-static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTable* layout);
-
-UPB_NORETURN static void* _upb_Decoder_ErrorJmp(upb_Decoder* d,
- upb_DecodeStatus status) {
- UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
- d->status = status;
- UPB_LONGJMP(d->err, 1);
-}
-
-const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status) {
- UPB_ASSERT(status != kUpb_DecodeStatus_Ok);
- d->status = status;
- UPB_LONGJMP(d->err, 1);
- return NULL;
-}
-
-static void _upb_Decoder_VerifyUtf8(upb_Decoder* d, const char* buf, int len) {
- if (!_upb_Decoder_VerifyUtf8Inline(buf, len)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
- }
-}
-
-static bool _upb_Decoder_Reserve(upb_Decoder* d, upb_Array* arr, size_t elem) {
- bool need_realloc = arr->capacity - arr->size < elem;
- if (need_realloc && !_upb_array_realloc(arr, arr->size + elem, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- return need_realloc;
-}
-
-typedef struct {
- const char* ptr;
- uint64_t val;
-} _upb_DecodeLongVarintReturn;
-
-UPB_NOINLINE
-static _upb_DecodeLongVarintReturn _upb_Decoder_DecodeLongVarint(
- const char* ptr, uint64_t val) {
- _upb_DecodeLongVarintReturn ret = {NULL, 0};
- uint64_t byte;
- int i;
- for (i = 1; i < 10; i++) {
- byte = (uint8_t)ptr[i];
- val += (byte - 1) << (i * 7);
- if (!(byte & 0x80)) {
- ret.ptr = ptr + i + 1;
- ret.val = val;
- return ret;
- }
- }
- return ret;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeVarint(upb_Decoder* d, const char* ptr,
- uint64_t* val) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = byte;
- return ptr + 1;
- } else {
- _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
- if (!res.ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- *val = res.val;
- return res.ptr;
- }
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeTag(upb_Decoder* d, const char* ptr,
- uint32_t* val) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = byte;
- return ptr + 1;
- } else {
- const char* start = ptr;
- _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongVarint(ptr, byte);
- if (!res.ptr || res.ptr - start > 5 || res.val > UINT32_MAX) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- *val = res.val;
- return res.ptr;
- }
-}
-
-UPB_FORCEINLINE
-static const char* upb_Decoder_DecodeSize(upb_Decoder* d, const char* ptr,
- uint32_t* size) {
- uint64_t size64;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &size64);
- if (size64 >= INT32_MAX ||
- !upb_EpsCopyInputStream_CheckSize(&d->input, ptr, (int)size64)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- *size = size64;
- return ptr;
-}
-
-static void _upb_Decoder_MungeInt32(wireval* val) {
- if (!_upb_IsLittleEndian()) {
- /* The next stage will memcpy(dst, &val, 4) */
- val->uint32_val = val->uint64_val;
- }
-}
-
-static void _upb_Decoder_Munge(int type, wireval* val) {
- switch (type) {
- case kUpb_FieldType_Bool:
- val->bool_val = val->uint64_val != 0;
- break;
- case kUpb_FieldType_SInt32: {
- uint32_t n = val->uint64_val;
- val->uint32_val = (n >> 1) ^ -(int32_t)(n & 1);
- break;
- }
- case kUpb_FieldType_SInt64: {
- uint64_t n = val->uint64_val;
- val->uint64_val = (n >> 1) ^ -(int64_t)(n & 1);
- break;
- }
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Enum:
- _upb_Decoder_MungeInt32(val);
- break;
- }
-}
-
-static upb_Message* _upb_Decoder_NewSubMessage(upb_Decoder* d,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- upb_TaggedMessagePtr* target) {
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- upb_Message* msg = _upb_Message_New(subl, &d->arena);
- if (!msg) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
-
- // Extensions should not be unlinked. A message extension should not be
- // registered until its sub-message type is available to be linked.
- bool is_empty = subl == &_kUpb_MiniTable_Empty;
- bool is_extension = field->mode & kUpb_LabelFlags_IsExtension;
- UPB_ASSERT(!(is_empty && is_extension));
-
- if (is_empty && !(d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_UnlinkedSubMessage);
- }
-
- upb_TaggedMessagePtr tagged = _upb_TaggedMessagePtr_Pack(msg, is_empty);
- memcpy(target, &tagged, sizeof(tagged));
- return msg;
-}
-
-static upb_Message* _upb_Decoder_ReuseSubMessage(
- upb_Decoder* d, const upb_MiniTableSub* subs,
- const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
- upb_TaggedMessagePtr tagged = *target;
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- if (!upb_TaggedMessagePtr_IsEmpty(tagged) || subl == &_kUpb_MiniTable_Empty) {
- return _upb_TaggedMessagePtr_GetMessage(tagged);
- }
-
- // We found an empty message from a previous parse that was performed before
- // this field was linked. But it is linked now, so we want to allocate a new
- // message of the correct type and promote data into it before continuing.
- upb_Message* existing = _upb_TaggedMessagePtr_GetEmptyMessage(tagged);
- upb_Message* promoted = _upb_Decoder_NewSubMessage(d, subs, field, target);
- size_t size;
- const char* unknown = upb_Message_GetUnknown(existing, &size);
- upb_DecodeStatus status = upb_Decode(unknown, size, promoted, subl, d->extreg,
- d->options, &d->arena);
- if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
- return promoted;
-}
-
-static const char* _upb_Decoder_ReadString(upb_Decoder* d, const char* ptr,
- int size, upb_StringView* str) {
- const char* str_ptr = ptr;
- ptr = upb_EpsCopyInputStream_ReadString(&d->input, &str_ptr, size, &d->arena);
- if (!ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- str->data = str_ptr;
- str->size = size;
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_RecurseSubMessage(upb_Decoder* d,
- const char* ptr,
- upb_Message* submsg,
- const upb_MiniTable* subl,
- uint32_t expected_end_group) {
- if (--d->depth < 0) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded);
- }
- ptr = _upb_Decoder_DecodeMessage(d, ptr, submsg, subl);
- d->depth++;
- if (d->end_group != expected_end_group) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeSubMessage(
- upb_Decoder* d, const char* ptr, upb_Message* submsg,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field, int size) {
- int saved_delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, DECODE_NOGROUP);
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_delta);
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeGroup(upb_Decoder* d, const char* ptr,
- upb_Message* submsg,
- const upb_MiniTable* subl,
- uint32_t number) {
- if (_upb_Decoder_IsDone(d, &ptr)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, number);
- d->end_group = DECODE_NOGROUP;
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeUnknownGroup(upb_Decoder* d,
- const char* ptr,
- uint32_t number) {
- return _upb_Decoder_DecodeGroup(d, ptr, NULL, NULL, number);
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeKnownGroup(
- upb_Decoder* d, const char* ptr, upb_Message* submsg,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(subl);
- return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl, field->number);
-}
-
-static char* upb_Decoder_EncodeVarint32(uint32_t val, char* ptr) {
- do {
- uint8_t byte = val & 0x7fU;
- val >>= 7;
- if (val) byte |= 0x80U;
- *(ptr++) = byte;
- } while (val);
- return ptr;
-}
-
-static void _upb_Decoder_AddUnknownVarints(upb_Decoder* d, upb_Message* msg,
- uint32_t val1, uint32_t val2) {
- char buf[20];
- char* end = buf;
- end = upb_Decoder_EncodeVarint32(val1, end);
- end = upb_Decoder_EncodeVarint32(val2, end);
-
- if (!_upb_Message_AddUnknown(msg, buf, end - buf, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
-}
-
-UPB_NOINLINE
-static bool _upb_Decoder_CheckEnumSlow(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableEnum* e,
- const upb_MiniTableField* field,
- uint32_t v) {
- if (_upb_MiniTable_CheckEnumValueSlow(e, v)) return true;
-
- // Unrecognized enum goes into unknown fields.
- // For packed fields the tag could be arbitrarily far in the past, so we
- // just re-encode the tag and value here.
- uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Varint;
- upb_Message* unknown_msg =
- field->mode & kUpb_LabelFlags_IsExtension ? d->unknown_msg : msg;
- _upb_Decoder_AddUnknownVarints(d, unknown_msg, tag, v);
- return false;
-}
-
-UPB_FORCEINLINE
-static bool _upb_Decoder_CheckEnum(upb_Decoder* d, const char* ptr,
- upb_Message* msg, const upb_MiniTableEnum* e,
- const upb_MiniTableField* field,
- wireval* val) {
- uint32_t v = val->uint32_val;
-
- _kUpb_FastEnumCheck_Status status = _upb_MiniTable_CheckEnumValueFast(e, v);
- if (UPB_LIKELY(status == _kUpb_FastEnumCheck_ValueIsInEnum)) return true;
- return _upb_Decoder_CheckEnumSlow(d, ptr, msg, e, field, v);
-}
-
-UPB_NOINLINE
-static const char* _upb_Decoder_DecodeEnumArray(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- upb_Array* arr,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- wireval* val) {
- const upb_MiniTableEnum* e = subs[field->UPB_PRIVATE(submsg_index)].subenum;
- if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, val)) return ptr;
- void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- arr->size++;
- memcpy(mem, val, 4);
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeFixedPacked(
- upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
- const upb_MiniTableField* field, int lg2) {
- int mask = (1 << lg2) - 1;
- size_t count = val->size >> lg2;
- if ((val->size & mask) != 0) {
- // Length isn't a round multiple of elem size.
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
- _upb_Decoder_Reserve(d, arr, count);
- void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- arr->size += count;
- // Note: if/when the decoder supports multi-buffer input, we will need to
- // handle buffer seams here.
- if (_upb_IsLittleEndian()) {
- ptr = upb_EpsCopyInputStream_Copy(&d->input, ptr, mem, val->size);
- } else {
- int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* dst = mem;
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- if (lg2 == 2) {
- ptr = upb_WireReader_ReadFixed32(ptr, dst);
- dst += 4;
- } else {
- UPB_ASSERT(lg2 == 3);
- ptr = upb_WireReader_ReadFixed64(ptr, dst);
- dst += 8;
- }
- }
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
- }
-
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeVarintPacked(
- upb_Decoder* d, const char* ptr, upb_Array* arr, wireval* val,
- const upb_MiniTableField* field, int lg2) {
- int scale = 1 << lg2;
- int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- wireval elem;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
- _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), &elem);
- if (_upb_Decoder_Reserve(d, arr, 1)) {
- out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- }
- arr->size++;
- memcpy(out, &elem, scale);
- out += scale;
- }
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
- return ptr;
-}
-
-UPB_NOINLINE
-static const char* _upb_Decoder_DecodeEnumPacked(
- upb_Decoder* d, const char* ptr, upb_Message* msg, upb_Array* arr,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field,
- wireval* val) {
- const upb_MiniTableEnum* e = subs[field->UPB_PRIVATE(submsg_index)].subenum;
- int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- wireval elem;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
- _upb_Decoder_MungeInt32(&elem);
- if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, &elem)) {
- continue;
- }
- if (_upb_Decoder_Reserve(d, arr, 1)) {
- out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- }
- arr->size++;
- memcpy(out, &elem, 4);
- out += 4;
- }
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
- return ptr;
-}
-
-upb_Array* _upb_Decoder_CreateArray(upb_Decoder* d,
- const upb_MiniTableField* field) {
- /* Maps descriptor type -> elem_size_lg2. */
- static const uint8_t kElemSizeLg2[] = {
- [0] = -1, // invalid descriptor type
- [kUpb_FieldType_Double] = 3,
- [kUpb_FieldType_Float] = 2,
- [kUpb_FieldType_Int64] = 3,
- [kUpb_FieldType_UInt64] = 3,
- [kUpb_FieldType_Int32] = 2,
- [kUpb_FieldType_Fixed64] = 3,
- [kUpb_FieldType_Fixed32] = 2,
- [kUpb_FieldType_Bool] = 0,
- [kUpb_FieldType_String] = UPB_SIZE(3, 4),
- [kUpb_FieldType_Group] = UPB_SIZE(2, 3),
- [kUpb_FieldType_Message] = UPB_SIZE(2, 3),
- [kUpb_FieldType_Bytes] = UPB_SIZE(3, 4),
- [kUpb_FieldType_UInt32] = 2,
- [kUpb_FieldType_Enum] = 2,
- [kUpb_FieldType_SFixed32] = 2,
- [kUpb_FieldType_SFixed64] = 3,
- [kUpb_FieldType_SInt32] = 2,
- [kUpb_FieldType_SInt64] = 3,
- };
-
- size_t lg2 = kElemSizeLg2[field->UPB_PRIVATE(descriptortype)];
- upb_Array* ret = _upb_Array_New(&d->arena, 4, lg2);
- if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- return ret;
-}
-
-static const char* _upb_Decoder_DecodeToArray(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- wireval* val, int op) {
- upb_Array** arrp = UPB_PTR_AT(msg, field->offset, void);
- upb_Array* arr = *arrp;
- void* mem;
-
- if (arr) {
- _upb_Decoder_Reserve(d, arr, 1);
- } else {
- arr = _upb_Decoder_CreateArray(d, field);
- *arrp = arr;
- }
-
- switch (op) {
- case kUpb_DecodeOp_Scalar1Byte:
- case kUpb_DecodeOp_Scalar4Byte:
- case kUpb_DecodeOp_Scalar8Byte:
- /* Append scalar value. */
- mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << op, void);
- arr->size++;
- memcpy(mem, val, 1 << op);
- return ptr;
- case kUpb_DecodeOp_String:
- _upb_Decoder_VerifyUtf8(d, ptr, val->size);
- /* Fallthrough. */
- case kUpb_DecodeOp_Bytes: {
- /* Append bytes. */
- upb_StringView* str = (upb_StringView*)_upb_array_ptr(arr) + arr->size;
- arr->size++;
- return _upb_Decoder_ReadString(d, ptr, val->size, str);
- }
- case kUpb_DecodeOp_SubMessage: {
- /* Append submessage / group. */
- upb_TaggedMessagePtr* target = UPB_PTR_AT(
- _upb_array_ptr(arr), arr->size * sizeof(void*), upb_TaggedMessagePtr);
- upb_Message* submsg = _upb_Decoder_NewSubMessage(d, subs, field, target);
- arr->size++;
- if (UPB_UNLIKELY(field->UPB_PRIVATE(descriptortype) ==
- kUpb_FieldType_Group)) {
- return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
- } else {
- return _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
- val->size);
- }
- }
- case OP_FIXPCK_LG2(2):
- case OP_FIXPCK_LG2(3):
- return _upb_Decoder_DecodeFixedPacked(d, ptr, arr, val, field,
- op - OP_FIXPCK_LG2(0));
- case OP_VARPCK_LG2(0):
- case OP_VARPCK_LG2(2):
- case OP_VARPCK_LG2(3):
- return _upb_Decoder_DecodeVarintPacked(d, ptr, arr, val, field,
- op - OP_VARPCK_LG2(0));
- case kUpb_DecodeOp_Enum:
- return _upb_Decoder_DecodeEnumArray(d, ptr, msg, arr, subs, field, val);
- case kUpb_DecodeOp_PackedEnum:
- return _upb_Decoder_DecodeEnumPacked(d, ptr, msg, arr, subs, field, val);
- default:
- UPB_UNREACHABLE();
- }
-}
-
-upb_Map* _upb_Decoder_CreateMap(upb_Decoder* d, const upb_MiniTable* entry) {
- /* Maps descriptor type -> upb map size. */
- static const uint8_t kSizeInMap[] = {
- [0] = -1, // invalid descriptor type */
- [kUpb_FieldType_Double] = 8,
- [kUpb_FieldType_Float] = 4,
- [kUpb_FieldType_Int64] = 8,
- [kUpb_FieldType_UInt64] = 8,
- [kUpb_FieldType_Int32] = 4,
- [kUpb_FieldType_Fixed64] = 8,
- [kUpb_FieldType_Fixed32] = 4,
- [kUpb_FieldType_Bool] = 1,
- [kUpb_FieldType_String] = UPB_MAPTYPE_STRING,
- [kUpb_FieldType_Group] = sizeof(void*),
- [kUpb_FieldType_Message] = sizeof(void*),
- [kUpb_FieldType_Bytes] = UPB_MAPTYPE_STRING,
- [kUpb_FieldType_UInt32] = 4,
- [kUpb_FieldType_Enum] = 4,
- [kUpb_FieldType_SFixed32] = 4,
- [kUpb_FieldType_SFixed64] = 8,
- [kUpb_FieldType_SInt32] = 4,
- [kUpb_FieldType_SInt64] = 8,
- };
-
- const upb_MiniTableField* key_field = &entry->fields[0];
- const upb_MiniTableField* val_field = &entry->fields[1];
- char key_size = kSizeInMap[key_field->UPB_PRIVATE(descriptortype)];
- char val_size = kSizeInMap[val_field->UPB_PRIVATE(descriptortype)];
- UPB_ASSERT(key_field->offset == offsetof(upb_MapEntryData, k));
- UPB_ASSERT(val_field->offset == offsetof(upb_MapEntryData, v));
- upb_Map* ret = _upb_Map_New(&d->arena, key_size, val_size);
- if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- return ret;
-}
-
-static const char* _upb_Decoder_DecodeToMap(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field,
- wireval* val) {
- upb_Map** map_p = UPB_PTR_AT(msg, field->offset, upb_Map*);
- upb_Map* map = *map_p;
- upb_MapEntry ent;
- UPB_ASSERT(upb_MiniTableField_Type(field) == kUpb_FieldType_Message);
- const upb_MiniTable* entry = subs[field->UPB_PRIVATE(submsg_index)].submsg;
-
- UPB_ASSERT(entry);
- UPB_ASSERT(entry->field_count == 2);
- UPB_ASSERT(!upb_IsRepeatedOrMap(&entry->fields[0]));
- UPB_ASSERT(!upb_IsRepeatedOrMap(&entry->fields[1]));
-
- if (!map) {
- map = _upb_Decoder_CreateMap(d, entry);
- *map_p = map;
- }
-
- // Parse map entry.
- memset(&ent, 0, sizeof(ent));
-
- if (entry->fields[1].UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
- entry->fields[1].UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
- // Create proactively to handle the case where it doesn't appear.
- upb_TaggedMessagePtr msg;
- _upb_Decoder_NewSubMessage(d, entry->subs, &entry->fields[1], &msg);
- ent.data.v.val = upb_value_uintptr(msg);
- }
-
- ptr =
- _upb_Decoder_DecodeSubMessage(d, ptr, &ent.data, subs, field, val->size);
- // check if ent had any unknown fields
- size_t size;
- upb_Message_GetUnknown(&ent.data, &size);
- if (size != 0) {
- char* buf;
- size_t size;
- uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Delimited;
- upb_EncodeStatus status =
- upb_Encode(&ent.data, entry, 0, &d->arena, &buf, &size);
- if (status != kUpb_EncodeStatus_Ok) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- _upb_Decoder_AddUnknownVarints(d, msg, tag, size);
- if (!_upb_Message_AddUnknown(msg, buf, size, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- } else {
- if (_upb_Map_Insert(map, &ent.data.k, map->key_size, &ent.data.v,
- map->val_size,
- &d->arena) == kUpb_MapInsertStatus_OutOfMemory) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- }
- return ptr;
-}
-
-static const char* _upb_Decoder_DecodeToSubMessage(
- upb_Decoder* d, const char* ptr, upb_Message* msg,
- const upb_MiniTableSub* subs, const upb_MiniTableField* field, wireval* val,
- int op) {
- void* mem = UPB_PTR_AT(msg, field->offset, void);
- int type = field->UPB_PRIVATE(descriptortype);
-
- if (UPB_UNLIKELY(op == kUpb_DecodeOp_Enum) &&
- !_upb_Decoder_CheckEnum(d, ptr, msg,
- subs[field->UPB_PRIVATE(submsg_index)].subenum,
- field, val)) {
- return ptr;
- }
-
- /* Set presence if necessary. */
- if (field->presence > 0) {
- _upb_sethas_field(msg, field);
- } else if (field->presence < 0) {
- /* Oneof case */
- uint32_t* oneof_case = _upb_oneofcase_field(msg, field);
- if (op == kUpb_DecodeOp_SubMessage && *oneof_case != field->number) {
- memset(mem, 0, sizeof(void*));
- }
- *oneof_case = field->number;
- }
-
- /* Store into message. */
- switch (op) {
- case kUpb_DecodeOp_SubMessage: {
- upb_TaggedMessagePtr* submsgp = mem;
- upb_Message* submsg;
- if (*submsgp) {
- submsg = _upb_Decoder_ReuseSubMessage(d, subs, field, submsgp);
- } else {
- submsg = _upb_Decoder_NewSubMessage(d, subs, field, submsgp);
- }
- if (UPB_UNLIKELY(type == kUpb_FieldType_Group)) {
- ptr = _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
- } else {
- ptr = _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
- val->size);
- }
- break;
- }
- case kUpb_DecodeOp_String:
- _upb_Decoder_VerifyUtf8(d, ptr, val->size);
- /* Fallthrough. */
- case kUpb_DecodeOp_Bytes:
- return _upb_Decoder_ReadString(d, ptr, val->size, mem);
- case kUpb_DecodeOp_Scalar8Byte:
- memcpy(mem, val, 8);
- break;
- case kUpb_DecodeOp_Enum:
- case kUpb_DecodeOp_Scalar4Byte:
- memcpy(mem, val, 4);
- break;
- case kUpb_DecodeOp_Scalar1Byte:
- memcpy(mem, val, 1);
- break;
- default:
- UPB_UNREACHABLE();
- }
-
- return ptr;
-}
-
-UPB_NOINLINE
-const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
- const upb_Message* msg,
- const upb_MiniTable* l) {
- UPB_ASSERT(l->required_count);
- if (UPB_LIKELY((d->options & kUpb_DecodeOption_CheckRequired) == 0)) {
- return ptr;
- }
- uint64_t msg_head;
- memcpy(&msg_head, msg, 8);
- msg_head = _upb_BigEndian_Swap64(msg_head);
- if (upb_MiniTable_requiredmask(l) & ~msg_head) {
- d->missing_required = true;
- }
- return ptr;
-}
-
-UPB_FORCEINLINE
-static bool _upb_Decoder_TryFastDispatch(upb_Decoder* d, const char** ptr,
- upb_Message* msg,
- const upb_MiniTable* layout) {
-#if UPB_FASTTABLE
- if (layout && layout->table_mask != (unsigned char)-1) {
- uint16_t tag = _upb_FastDecoder_LoadTag(*ptr);
- intptr_t table = decode_totable(layout);
- *ptr = _upb_FastDecoder_TagDispatch(d, *ptr, msg, table, 0, tag);
- return true;
- }
-#endif
- return false;
-}
-
-static const char* upb_Decoder_SkipField(upb_Decoder* d, const char* ptr,
- uint32_t tag) {
- int field_number = tag >> 3;
- int wire_type = tag & 7;
- switch (wire_type) {
- case kUpb_WireType_Varint: {
- uint64_t val;
- return _upb_Decoder_DecodeVarint(d, ptr, &val);
- }
- case kUpb_WireType_64Bit:
- return ptr + 8;
- case kUpb_WireType_32Bit:
- return ptr + 4;
- case kUpb_WireType_Delimited: {
- uint32_t size;
- ptr = upb_Decoder_DecodeSize(d, ptr, &size);
- return ptr + size;
- }
- case kUpb_WireType_StartGroup:
- return _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
- default:
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
- }
-}
-
-enum {
- kStartItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_StartGroup),
- kEndItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_EndGroup),
- kTypeIdTag = ((kUpb_MsgSet_TypeId << 3) | kUpb_WireType_Varint),
- kMessageTag = ((kUpb_MsgSet_Message << 3) | kUpb_WireType_Delimited),
-};
-
-static void upb_Decoder_AddKnownMessageSetItem(
- upb_Decoder* d, upb_Message* msg, const upb_MiniTableExtension* item_mt,
- const char* data, uint32_t size) {
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, item_mt, &d->arena);
- if (UPB_UNLIKELY(!ext)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- upb_Message* submsg = _upb_Decoder_NewSubMessage(
- d, &ext->ext->sub, &ext->ext->field, (upb_TaggedMessagePtr*)&ext->data);
- upb_DecodeStatus status = upb_Decode(data, size, submsg, item_mt->sub.submsg,
- d->extreg, d->options, &d->arena);
- if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
-}
-
-static void upb_Decoder_AddUnknownMessageSetItem(upb_Decoder* d,
- upb_Message* msg,
- uint32_t type_id,
- const char* message_data,
- uint32_t message_size) {
- char buf[60];
- char* ptr = buf;
- ptr = upb_Decoder_EncodeVarint32(kStartItemTag, ptr);
- ptr = upb_Decoder_EncodeVarint32(kTypeIdTag, ptr);
- ptr = upb_Decoder_EncodeVarint32(type_id, ptr);
- ptr = upb_Decoder_EncodeVarint32(kMessageTag, ptr);
- ptr = upb_Decoder_EncodeVarint32(message_size, ptr);
- char* split = ptr;
-
- ptr = upb_Decoder_EncodeVarint32(kEndItemTag, ptr);
- char* end = ptr;
-
- if (!_upb_Message_AddUnknown(msg, buf, split - buf, &d->arena) ||
- !_upb_Message_AddUnknown(msg, message_data, message_size, &d->arena) ||
- !_upb_Message_AddUnknown(msg, split, end - split, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
-}
-
-static void upb_Decoder_AddMessageSetItem(upb_Decoder* d, upb_Message* msg,
- const upb_MiniTable* t,
- uint32_t type_id, const char* data,
- uint32_t size) {
- const upb_MiniTableExtension* item_mt =
- upb_ExtensionRegistry_Lookup(d->extreg, t, type_id);
- if (item_mt) {
- upb_Decoder_AddKnownMessageSetItem(d, msg, item_mt, data, size);
- } else {
- upb_Decoder_AddUnknownMessageSetItem(d, msg, type_id, data, size);
- }
-}
-
-static const char* upb_Decoder_DecodeMessageSetItem(
- upb_Decoder* d, const char* ptr, upb_Message* msg,
- const upb_MiniTable* layout) {
- uint32_t type_id = 0;
- upb_StringView preserved = {NULL, 0};
- typedef enum {
- kUpb_HaveId = 1 << 0,
- kUpb_HavePayload = 1 << 1,
- } StateMask;
- StateMask state_mask = 0;
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- uint32_t tag;
- ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
- switch (tag) {
- case kEndItemTag:
- return ptr;
- case kTypeIdTag: {
- uint64_t tmp;
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &tmp);
- if (state_mask & kUpb_HaveId) break; // Ignore dup.
- state_mask |= kUpb_HaveId;
- type_id = tmp;
- if (state_mask & kUpb_HavePayload) {
- upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, preserved.data,
- preserved.size);
- }
- break;
- }
- case kMessageTag: {
- uint32_t size;
- ptr = upb_Decoder_DecodeSize(d, ptr, &size);
- const char* data = ptr;
- ptr += size;
- if (state_mask & kUpb_HavePayload) break; // Ignore dup.
- state_mask |= kUpb_HavePayload;
- if (state_mask & kUpb_HaveId) {
- upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, data, size);
- } else {
- // Out of order, we must preserve the payload.
- preserved.data = data;
- preserved.size = size;
- }
- break;
- }
- default:
- // We do not preserve unexpected fields inside a message set item.
- ptr = upb_Decoder_SkipField(d, ptr, tag);
- break;
- }
- }
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-}
-
-static const upb_MiniTableField* _upb_Decoder_FindField(upb_Decoder* d,
- const upb_MiniTable* t,
- uint32_t field_number,
- int* last_field_index) {
- static upb_MiniTableField none = {
- 0, 0, 0, 0, kUpb_FakeFieldType_FieldNotFound, 0};
- if (t == NULL) return &none;
-
- size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
- if (idx < t->dense_below) {
- /* Fastest case: index into dense fields. */
- goto found;
- }
-
- if (t->dense_below < t->field_count) {
- /* Linear search non-dense fields. Resume scanning from last_field_index
- * since fields are usually in order. */
- size_t last = *last_field_index;
- for (idx = last; idx < t->field_count; idx++) {
- if (t->fields[idx].number == field_number) {
- goto found;
- }
- }
-
- for (idx = t->dense_below; idx < last; idx++) {
- if (t->fields[idx].number == field_number) {
- goto found;
- }
- }
- }
-
- if (d->extreg) {
- switch (t->ext) {
- case kUpb_ExtMode_Extendable: {
- const upb_MiniTableExtension* ext =
- upb_ExtensionRegistry_Lookup(d->extreg, t, field_number);
- if (ext) return &ext->field;
- break;
- }
- case kUpb_ExtMode_IsMessageSet:
- if (field_number == kUpb_MsgSet_Item) {
- static upb_MiniTableField item = {
- 0, 0, 0, 0, kUpb_FakeFieldType_MessageSetItem, 0};
- return &item;
- }
- break;
- }
- }
-
- return &none; /* Unknown field. */
-
-found:
- UPB_ASSERT(t->fields[idx].number == field_number);
- *last_field_index = idx;
- return &t->fields[idx];
-}
-
-int _upb_Decoder_GetVarintOp(const upb_MiniTableField* field) {
- static const int8_t kVarintOps[] = {
- [kUpb_FakeFieldType_FieldNotFound] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Int64] = kUpb_DecodeOp_Scalar8Byte,
- [kUpb_FieldType_UInt64] = kUpb_DecodeOp_Scalar8Byte,
- [kUpb_FieldType_Int32] = kUpb_DecodeOp_Scalar4Byte,
- [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Bool] = kUpb_DecodeOp_Scalar1Byte,
- [kUpb_FieldType_String] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Message] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Bytes] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_UInt32] = kUpb_DecodeOp_Scalar4Byte,
- [kUpb_FieldType_Enum] = kUpb_DecodeOp_Enum,
- [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SInt32] = kUpb_DecodeOp_Scalar4Byte,
- [kUpb_FieldType_SInt64] = kUpb_DecodeOp_Scalar8Byte,
- [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
- };
-
- return kVarintOps[field->UPB_PRIVATE(descriptortype)];
-}
-
-UPB_FORCEINLINE
-static void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
- const upb_MiniTableField* field,
- int* op) {
- // If sub-message is not linked, treat as unknown.
- if (field->mode & kUpb_LabelFlags_IsExtension) return;
- const upb_MiniTableSub* sub = &mt->subs[field->UPB_PRIVATE(submsg_index)];
- if ((d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked) ||
- sub->submsg != &_kUpb_MiniTable_Empty) {
- return;
- }
-#ifndef NDEBUG
- const upb_MiniTableField* oneof = upb_MiniTable_GetOneof(mt, field);
- if (oneof) {
- // All other members of the oneof must be message fields that are also
- // unlinked.
- do {
- UPB_ASSERT(upb_MiniTableField_CType(oneof) == kUpb_CType_Message);
- const upb_MiniTableSub* oneof_sub =
- &mt->subs[oneof->UPB_PRIVATE(submsg_index)];
- UPB_ASSERT(!oneof_sub);
- } while (upb_MiniTable_NextOneofField(mt, &oneof));
- }
-#endif // NDEBUG
- *op = kUpb_DecodeOp_UnknownField;
-}
-
-int _upb_Decoder_GetDelimitedOp(upb_Decoder* d, const upb_MiniTable* mt,
- const upb_MiniTableField* field) {
- enum { kRepeatedBase = 19 };
-
- static const int8_t kDelimitedOps[] = {
- /* For non-repeated field type. */
- [kUpb_FakeFieldType_FieldNotFound] =
- kUpb_DecodeOp_UnknownField, // Field not found.
- [kUpb_FieldType_Double] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Float] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Int64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_UInt64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Int32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Fixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Fixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Bool] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_String] = kUpb_DecodeOp_String,
- [kUpb_FieldType_Group] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
- [kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
- [kUpb_FieldType_UInt32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_Enum] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SFixed32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SFixed64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SInt32] = kUpb_DecodeOp_UnknownField,
- [kUpb_FieldType_SInt64] = kUpb_DecodeOp_UnknownField,
- [kUpb_FakeFieldType_MessageSetItem] = kUpb_DecodeOp_UnknownField,
- // For repeated field type. */
- [kRepeatedBase + kUpb_FieldType_Double] = OP_FIXPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_Float] = OP_FIXPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Int64] = OP_VARPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_UInt64] = OP_VARPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_Int32] = OP_VARPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Fixed64] = OP_FIXPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_Fixed32] = OP_FIXPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Bool] = OP_VARPCK_LG2(0),
- [kRepeatedBase + kUpb_FieldType_String] = kUpb_DecodeOp_String,
- [kRepeatedBase + kUpb_FieldType_Group] = kUpb_DecodeOp_SubMessage,
- [kRepeatedBase + kUpb_FieldType_Message] = kUpb_DecodeOp_SubMessage,
- [kRepeatedBase + kUpb_FieldType_Bytes] = kUpb_DecodeOp_Bytes,
- [kRepeatedBase + kUpb_FieldType_UInt32] = OP_VARPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_Enum] = kUpb_DecodeOp_PackedEnum,
- [kRepeatedBase + kUpb_FieldType_SFixed32] = OP_FIXPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_SFixed64] = OP_FIXPCK_LG2(3),
- [kRepeatedBase + kUpb_FieldType_SInt32] = OP_VARPCK_LG2(2),
- [kRepeatedBase + kUpb_FieldType_SInt64] = OP_VARPCK_LG2(3),
- // Omitting kUpb_FakeFieldType_MessageSetItem, because we never emit a
- // repeated msgset type
- };
-
- int ndx = field->UPB_PRIVATE(descriptortype);
- if (upb_FieldMode_Get(field) == kUpb_FieldMode_Array) ndx += kRepeatedBase;
- int op = kDelimitedOps[ndx];
-
- if (op == kUpb_DecodeOp_SubMessage) {
- _upb_Decoder_CheckUnlinked(d, mt, field, &op);
- }
-
- return op;
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
- const upb_MiniTable* mt,
- const upb_MiniTableField* field,
- int wire_type, wireval* val,
- int* op) {
- static const unsigned kFixed32OkMask = (1 << kUpb_FieldType_Float) |
- (1 << kUpb_FieldType_Fixed32) |
- (1 << kUpb_FieldType_SFixed32);
-
- static const unsigned kFixed64OkMask = (1 << kUpb_FieldType_Double) |
- (1 << kUpb_FieldType_Fixed64) |
- (1 << kUpb_FieldType_SFixed64);
-
- switch (wire_type) {
- case kUpb_WireType_Varint:
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &val->uint64_val);
- *op = _upb_Decoder_GetVarintOp(field);
- _upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), val);
- return ptr;
- case kUpb_WireType_32Bit:
- *op = kUpb_DecodeOp_Scalar4Byte;
- if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed32OkMask) == 0) {
- *op = kUpb_DecodeOp_UnknownField;
- }
- return upb_WireReader_ReadFixed32(ptr, &val->uint32_val);
- case kUpb_WireType_64Bit:
- *op = kUpb_DecodeOp_Scalar8Byte;
- if (((1 << field->UPB_PRIVATE(descriptortype)) & kFixed64OkMask) == 0) {
- *op = kUpb_DecodeOp_UnknownField;
- }
- return upb_WireReader_ReadFixed64(ptr, &val->uint64_val);
- case kUpb_WireType_Delimited:
- ptr = upb_Decoder_DecodeSize(d, ptr, &val->size);
- *op = _upb_Decoder_GetDelimitedOp(d, mt, field);
- return ptr;
- case kUpb_WireType_StartGroup:
- val->uint32_val = field->number;
- if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
- *op = kUpb_DecodeOp_SubMessage;
- _upb_Decoder_CheckUnlinked(d, mt, field, op);
- } else if (field->UPB_PRIVATE(descriptortype) ==
- kUpb_FakeFieldType_MessageSetItem) {
- *op = kUpb_DecodeOp_MessageSetItem;
- } else {
- *op = kUpb_DecodeOp_UnknownField;
- }
- return ptr;
- default:
- break;
- }
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-}
-
-UPB_FORCEINLINE
-static const char* _upb_Decoder_DecodeKnownField(
- upb_Decoder* d, const char* ptr, upb_Message* msg,
- const upb_MiniTable* layout, const upb_MiniTableField* field, int op,
- wireval* val) {
- const upb_MiniTableSub* subs = layout->subs;
- uint8_t mode = field->mode;
-
- if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
- const upb_MiniTableExtension* ext_layout =
- (const upb_MiniTableExtension*)field;
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, ext_layout, &d->arena);
- if (UPB_UNLIKELY(!ext)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- d->unknown_msg = msg;
- msg = &ext->data;
- subs = &ext->ext->sub;
- }
-
- switch (mode & kUpb_FieldMode_Mask) {
- case kUpb_FieldMode_Array:
- return _upb_Decoder_DecodeToArray(d, ptr, msg, subs, field, val, op);
- case kUpb_FieldMode_Map:
- return _upb_Decoder_DecodeToMap(d, ptr, msg, subs, field, val);
- case kUpb_FieldMode_Scalar:
- return _upb_Decoder_DecodeToSubMessage(d, ptr, msg, subs, field, val, op);
- default:
- UPB_UNREACHABLE();
- }
-}
-
-static const char* _upb_Decoder_ReverseSkipVarint(const char* ptr,
- uint32_t val) {
- uint32_t seen = 0;
- do {
- ptr--;
- seen <<= 7;
- seen |= *ptr & 0x7f;
- } while (seen != val);
- return ptr;
-}
-
-static const char* _upb_Decoder_DecodeUnknownField(upb_Decoder* d,
- const char* ptr,
- upb_Message* msg,
- int field_number,
- int wire_type, wireval val) {
- if (field_number == 0) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-
- // Since unknown fields are the uncommon case, we do a little extra work here
- // to walk backwards through the buffer to find the field start. This frees
- // up a register in the fast paths (when the field is known), which leads to
- // significant speedups in benchmarks.
- const char* start = ptr;
-
- if (wire_type == kUpb_WireType_Delimited) ptr += val.size;
- if (msg) {
- switch (wire_type) {
- case kUpb_WireType_Varint:
- case kUpb_WireType_Delimited:
- start--;
- while (start[-1] & 0x80) start--;
- break;
- case kUpb_WireType_32Bit:
- start -= 4;
- break;
- case kUpb_WireType_64Bit:
- start -= 8;
- break;
- default:
- break;
- }
-
- assert(start == d->debug_valstart);
- uint32_t tag = ((uint32_t)field_number << 3) | wire_type;
- start = _upb_Decoder_ReverseSkipVarint(start, tag);
- assert(start == d->debug_tagstart);
-
- if (wire_type == kUpb_WireType_StartGroup) {
- d->unknown = start;
- d->unknown_msg = msg;
- ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
- start = d->unknown;
- d->unknown = NULL;
- }
- if (!_upb_Message_AddUnknown(msg, start, ptr - start, &d->arena)) {
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- } else if (wire_type == kUpb_WireType_StartGroup) {
- ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
- }
- return ptr;
-}
-
-UPB_NOINLINE
-static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTable* layout) {
- int last_field_index = 0;
-
-#if UPB_FASTTABLE
- // The first time we want to skip fast dispatch, because we may have just been
- // invoked by the fast parser to handle a case that it bailed on.
- if (!_upb_Decoder_IsDone(d, &ptr)) goto nofast;
-#endif
-
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- uint32_t tag;
- const upb_MiniTableField* field;
- int field_number;
- int wire_type;
- wireval val;
- int op;
-
- if (_upb_Decoder_TryFastDispatch(d, &ptr, msg, layout)) break;
-
-#if UPB_FASTTABLE
- nofast:
-#endif
-
-#ifndef NDEBUG
- d->debug_tagstart = ptr;
-#endif
-
- UPB_ASSERT(ptr < d->input.limit_ptr);
- ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
- field_number = tag >> 3;
- wire_type = tag & 7;
-
-#ifndef NDEBUG
- d->debug_valstart = ptr;
-#endif
-
- if (wire_type == kUpb_WireType_EndGroup) {
- d->end_group = field_number;
- return ptr;
- }
-
- field = _upb_Decoder_FindField(d, layout, field_number, &last_field_index);
- ptr = _upb_Decoder_DecodeWireValue(d, ptr, layout, field, wire_type, &val,
- &op);
-
- if (op >= 0) {
- ptr = _upb_Decoder_DecodeKnownField(d, ptr, msg, layout, field, op, &val);
- } else {
- switch (op) {
- case kUpb_DecodeOp_UnknownField:
- ptr = _upb_Decoder_DecodeUnknownField(d, ptr, msg, field_number,
- wire_type, val);
- break;
- case kUpb_DecodeOp_MessageSetItem:
- ptr = upb_Decoder_DecodeMessageSetItem(d, ptr, msg, layout);
- break;
- }
- }
- }
-
- return UPB_UNLIKELY(layout && layout->required_count)
- ? _upb_Decoder_CheckRequired(d, ptr, msg, layout)
- : ptr;
-}
-
-const char* _upb_FastDecoder_DecodeGeneric(struct upb_Decoder* d,
- const char* ptr, upb_Message* msg,
- intptr_t table, uint64_t hasbits,
- uint64_t data) {
- (void)data;
- *(uint32_t*)msg |= hasbits;
- return _upb_Decoder_DecodeMessage(d, ptr, msg, decode_totablep(table));
-}
-
-static upb_DecodeStatus _upb_Decoder_DecodeTop(struct upb_Decoder* d,
- const char* buf, void* msg,
- const upb_MiniTable* l) {
- if (!_upb_Decoder_TryFastDispatch(d, &buf, msg, l)) {
- _upb_Decoder_DecodeMessage(d, buf, msg, l);
- }
- if (d->end_group != DECODE_NOGROUP) return kUpb_DecodeStatus_Malformed;
- if (d->missing_required) return kUpb_DecodeStatus_MissingRequired;
- return kUpb_DecodeStatus_Ok;
-}
-
-UPB_NOINLINE
-const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
- const char* ptr, int overrun) {
- return _upb_EpsCopyInputStream_IsDoneFallbackInline(
- e, ptr, overrun, _upb_Decoder_BufferFlipCallback);
-}
-
-static upb_DecodeStatus upb_Decoder_Decode(upb_Decoder* const decoder,
- const char* const buf,
- void* const msg,
- const upb_MiniTable* const l,
- upb_Arena* const arena) {
- if (UPB_SETJMP(decoder->err) == 0) {
- decoder->status = _upb_Decoder_DecodeTop(decoder, buf, msg, l);
- } else {
- UPB_ASSERT(decoder->status != kUpb_DecodeStatus_Ok);
- }
-
- _upb_MemBlock* blocks =
- upb_Atomic_Load(&decoder->arena.blocks, memory_order_relaxed);
- arena->head = decoder->arena.head;
- upb_Atomic_Store(&arena->blocks, blocks, memory_order_relaxed);
- return decoder->status;
-}
-
-upb_DecodeStatus upb_Decode(const char* buf, size_t size, void* msg,
- const upb_MiniTable* l,
- const upb_ExtensionRegistry* extreg, int options,
- upb_Arena* arena) {
- upb_Decoder decoder;
- unsigned depth = (unsigned)options >> 16;
-
- upb_EpsCopyInputStream_Init(&decoder.input, &buf, size,
- options & kUpb_DecodeOption_AliasString);
-
- decoder.extreg = extreg;
- decoder.unknown = NULL;
- decoder.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
- decoder.end_group = DECODE_NOGROUP;
- decoder.options = (uint16_t)options;
- decoder.missing_required = false;
- decoder.status = kUpb_DecodeStatus_Ok;
-
- // Violating the encapsulation of the arena for performance reasons.
- // This is a temporary arena that we swap into and swap out of when we are
- // done. The temporary arena only needs to be able to handle allocation,
- // not fuse or free, so it does not need many of the members to be initialized
- // (particularly parent_or_count).
- _upb_MemBlock* blocks = upb_Atomic_Load(&arena->blocks, memory_order_relaxed);
- decoder.arena.head = arena->head;
- decoder.arena.block_alloc = arena->block_alloc;
- upb_Atomic_Init(&decoder.arena.blocks, blocks);
-
- return upb_Decoder_Decode(&decoder, buf, msg, l, arena);
-}
-
-#undef OP_FIXPCK_LG2
-#undef OP_VARPCK_LG2
-
-// Fast decoder: ~3x the speed of decode.c, but requires x86-64/ARM64.
-// Also the table size grows by 2x.
-//
-// Could potentially be ported to other 64-bit archs that pass at least six
-// arguments in registers and have 8 unused high bits in pointers.
-//
-// The overall design is to create specialized functions for every possible
-// field type (eg. oneof boolean field with a 1 byte tag) and then dispatch
-// to the specialized function as quickly as possible.
-
-
-
-// Must be last.
-
-#if UPB_FASTTABLE
-
-// The standard set of arguments passed to each parsing function.
-// Thanks to x86-64 calling conventions, these will stay in registers.
-#define UPB_PARSE_PARAMS \
- upb_Decoder *d, const char *ptr, upb_Message *msg, intptr_t table, \
- uint64_t hasbits, uint64_t data
-
-#define UPB_PARSE_ARGS d, ptr, msg, table, hasbits, data
-
-#define RETURN_GENERIC(m) \
- /* Uncomment either of these for debugging purposes. */ \
- /* fprintf(stderr, m); */ \
- /*__builtin_trap(); */ \
- return _upb_FastDecoder_DecodeGeneric(d, ptr, msg, table, hasbits, 0);
-
-typedef enum {
- CARD_s = 0, /* Singular (optional, non-repeated) */
- CARD_o = 1, /* Oneof */
- CARD_r = 2, /* Repeated */
- CARD_p = 3 /* Packed Repeated */
-} upb_card;
-
-UPB_NOINLINE
-static const char* fastdecode_isdonefallback(UPB_PARSE_PARAMS) {
- int overrun = data;
- ptr = _upb_EpsCopyInputStream_IsDoneFallbackInline(
- &d->input, ptr, overrun, _upb_Decoder_BufferFlipCallback);
- data = _upb_FastDecoder_LoadTag(ptr);
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_dispatch(UPB_PARSE_PARAMS) {
- int overrun;
- switch (upb_EpsCopyInputStream_IsDoneStatus(&d->input, ptr, &overrun)) {
- case kUpb_IsDoneStatus_Done:
- *(uint32_t*)msg |= hasbits; // Sync hasbits.
- const upb_MiniTable* l = decode_totablep(table);
- return UPB_UNLIKELY(l->required_count)
- ? _upb_Decoder_CheckRequired(d, ptr, msg, l)
- : ptr;
- case kUpb_IsDoneStatus_NotDone:
- break;
- case kUpb_IsDoneStatus_NeedFallback:
- data = overrun;
- UPB_MUSTTAIL return fastdecode_isdonefallback(UPB_PARSE_ARGS);
- }
-
- // Read two bytes of tag data (for a one-byte tag, the high byte is junk).
- data = _upb_FastDecoder_LoadTag(ptr);
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS);
-}
-
-UPB_FORCEINLINE
-static bool fastdecode_checktag(uint16_t data, int tagbytes) {
- if (tagbytes == 1) {
- return (data & 0xff) == 0;
- } else {
- return data == 0;
- }
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_longsize(const char* ptr, int* size) {
- int i;
- UPB_ASSERT(*size & 0x80);
- *size &= 0xff;
- for (i = 0; i < 3; i++) {
- ptr++;
- size_t byte = (uint8_t)ptr[-1];
- *size += (byte - 1) << (7 + 7 * i);
- if (UPB_LIKELY((byte & 0x80) == 0)) return ptr;
- }
- ptr++;
- size_t byte = (uint8_t)ptr[-1];
- // len is limited by 2gb not 4gb, hence 8 and not 16 as normally expected
- // for a 32 bit varint.
- if (UPB_UNLIKELY(byte >= 8)) return NULL;
- *size += (byte - 1) << 28;
- return ptr;
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_delimited(
- upb_Decoder* d, const char* ptr,
- upb_EpsCopyInputStream_ParseDelimitedFunc* func, void* ctx) {
- ptr++;
-
- // Sign-extend so varint greater than one byte becomes negative, causing
- // fast delimited parse to fail.
- int len = (int8_t)ptr[-1];
-
- if (!upb_EpsCopyInputStream_TryParseDelimitedFast(&d->input, &ptr, len, func,
- ctx)) {
- // Slow case: Sub-message is >=128 bytes and/or exceeds the current buffer.
- // If it exceeds the buffer limit, limit/limit_ptr will change during
- // sub-message parsing, so we need to preserve delta, not limit.
- if (UPB_UNLIKELY(len & 0x80)) {
- // Size varint >1 byte (length >= 128).
- ptr = fastdecode_longsize(ptr, &len);
- if (!ptr) {
- // Corrupt wire format: size exceeded INT_MAX.
- return NULL;
- }
- }
- if (!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, len)) {
- // Corrupt wire format: invalid limit.
- return NULL;
- }
- int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, len);
- ptr = func(&d->input, ptr, ctx);
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
- }
- return ptr;
-}
-
-/* singular, oneof, repeated field handling ***********************************/
-
-typedef struct {
- upb_Array* arr;
- void* end;
-} fastdecode_arr;
-
-typedef enum {
- FD_NEXT_ATLIMIT,
- FD_NEXT_SAMEFIELD,
- FD_NEXT_OTHERFIELD
-} fastdecode_next;
-
-typedef struct {
- void* dst;
- fastdecode_next next;
- uint32_t tag;
-} fastdecode_nextret;
-
-UPB_FORCEINLINE
-static void* fastdecode_resizearr(upb_Decoder* d, void* dst,
- fastdecode_arr* farr, int valbytes) {
- if (UPB_UNLIKELY(dst == farr->end)) {
- size_t old_size = farr->arr->capacity;
- size_t old_bytes = old_size * valbytes;
- size_t new_size = old_size * 2;
- size_t new_bytes = new_size * valbytes;
- char* old_ptr = _upb_array_ptr(farr->arr);
- char* new_ptr = upb_Arena_Realloc(&d->arena, old_ptr, old_bytes, new_bytes);
- uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
- farr->arr->capacity = new_size;
- farr->arr->data = _upb_array_tagptr(new_ptr, elem_size_lg2);
- dst = (void*)(new_ptr + (old_size * valbytes));
- farr->end = (void*)(new_ptr + (new_size * valbytes));
- }
- return dst;
-}
-
-UPB_FORCEINLINE
-static bool fastdecode_tagmatch(uint32_t tag, uint64_t data, int tagbytes) {
- if (tagbytes == 1) {
- return (uint8_t)tag == (uint8_t)data;
- } else {
- return (uint16_t)tag == (uint16_t)data;
- }
-}
-
-UPB_FORCEINLINE
-static void fastdecode_commitarr(void* dst, fastdecode_arr* farr,
- int valbytes) {
- farr->arr->size =
- (size_t)((char*)dst - (char*)_upb_array_ptr(farr->arr)) / valbytes;
-}
-
-UPB_FORCEINLINE
-static fastdecode_nextret fastdecode_nextrepeated(upb_Decoder* d, void* dst,
- const char** ptr,
- fastdecode_arr* farr,
- uint64_t data, int tagbytes,
- int valbytes) {
- fastdecode_nextret ret;
- dst = (char*)dst + valbytes;
-
- if (UPB_LIKELY(!_upb_Decoder_IsDone(d, ptr))) {
- ret.tag = _upb_FastDecoder_LoadTag(*ptr);
- if (fastdecode_tagmatch(ret.tag, data, tagbytes)) {
- ret.next = FD_NEXT_SAMEFIELD;
- } else {
- fastdecode_commitarr(dst, farr, valbytes);
- ret.next = FD_NEXT_OTHERFIELD;
- }
- } else {
- fastdecode_commitarr(dst, farr, valbytes);
- ret.next = FD_NEXT_ATLIMIT;
- }
-
- ret.dst = dst;
- return ret;
-}
-
-UPB_FORCEINLINE
-static void* fastdecode_fieldmem(upb_Message* msg, uint64_t data) {
- size_t ofs = data >> 48;
- return (char*)msg + ofs;
-}
-
-UPB_FORCEINLINE
-static void* fastdecode_getfield(upb_Decoder* d, const char* ptr,
- upb_Message* msg, uint64_t* data,
- uint64_t* hasbits, fastdecode_arr* farr,
- int valbytes, upb_card card) {
- switch (card) {
- case CARD_s: {
- uint8_t hasbit_index = *data >> 24;
- // Set hasbit and return pointer to scalar field.
- *hasbits |= 1ull << hasbit_index;
- return fastdecode_fieldmem(msg, *data);
- }
- case CARD_o: {
- uint16_t case_ofs = *data >> 32;
- uint32_t* oneof_case = UPB_PTR_AT(msg, case_ofs, uint32_t);
- uint8_t field_number = *data >> 24;
- *oneof_case = field_number;
- return fastdecode_fieldmem(msg, *data);
- }
- case CARD_r: {
- // Get pointer to upb_Array and allocate/expand if necessary.
- uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
- upb_Array** arr_p = fastdecode_fieldmem(msg, *data);
- char* begin;
- *(uint32_t*)msg |= *hasbits;
- *hasbits = 0;
- if (UPB_LIKELY(!*arr_p)) {
- farr->arr = _upb_Array_New(&d->arena, 8, elem_size_lg2);
- *arr_p = farr->arr;
- } else {
- farr->arr = *arr_p;
- }
- begin = _upb_array_ptr(farr->arr);
- farr->end = begin + (farr->arr->capacity * valbytes);
- *data = _upb_FastDecoder_LoadTag(ptr);
- return begin + (farr->arr->size * valbytes);
- }
- default:
- UPB_UNREACHABLE();
- }
-}
-
-UPB_FORCEINLINE
-static bool fastdecode_flippacked(uint64_t* data, int tagbytes) {
- *data ^= (0x2 ^ 0x0); // Patch data to match packed wiretype.
- return fastdecode_checktag(*data, tagbytes);
-}
-
-#define FASTDECODE_CHECKPACKED(tagbytes, card, func) \
- if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
- if (card == CARD_r && fastdecode_flippacked(&data, tagbytes)) { \
- UPB_MUSTTAIL return func(UPB_PARSE_ARGS); \
- } \
- RETURN_GENERIC("packed check tag mismatch\n"); \
- }
-
-/* varint fields **************************************************************/
-
-UPB_FORCEINLINE
-static uint64_t fastdecode_munge(uint64_t val, int valbytes, bool zigzag) {
- if (valbytes == 1) {
- return val != 0;
- } else if (zigzag) {
- if (valbytes == 4) {
- uint32_t n = val;
- return (n >> 1) ^ -(int32_t)(n & 1);
- } else if (valbytes == 8) {
- return (val >> 1) ^ -(int64_t)(val & 1);
- }
- UPB_UNREACHABLE();
- }
- return val;
-}
-
-UPB_FORCEINLINE
-static const char* fastdecode_varint64(const char* ptr, uint64_t* val) {
- ptr++;
- *val = (uint8_t)ptr[-1];
- if (UPB_UNLIKELY(*val & 0x80)) {
- int i;
- for (i = 0; i < 8; i++) {
- ptr++;
- uint64_t byte = (uint8_t)ptr[-1];
- *val += (byte - 1) << (7 + 7 * i);
- if (UPB_LIKELY((byte & 0x80) == 0)) goto done;
- }
- ptr++;
- uint64_t byte = (uint8_t)ptr[-1];
- if (byte > 1) {
- return NULL;
- }
- *val += (byte - 1) << 63;
- }
-done:
- UPB_ASSUME(ptr != NULL);
- return ptr;
-}
-
-#define FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, zigzag, packed) \
- uint64_t val; \
- void* dst; \
- fastdecode_arr farr; \
- \
- FASTDECODE_CHECKPACKED(tagbytes, card, packed); \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
- card); \
- if (card == CARD_r) { \
- if (UPB_UNLIKELY(!dst)) { \
- RETURN_GENERIC("need array resize\n"); \
- } \
- } \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
- } \
- \
- ptr += tagbytes; \
- ptr = fastdecode_varint64(ptr, &val); \
- if (ptr == NULL) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- val = fastdecode_munge(val, valbytes, zigzag); \
- memcpy(dst, &val, valbytes); \
- \
- if (card == CARD_r) { \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, valbytes); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-typedef struct {
- uint8_t valbytes;
- bool zigzag;
- void* dst;
- fastdecode_arr farr;
-} fastdecode_varintdata;
-
-UPB_FORCEINLINE
-static const char* fastdecode_topackedvarint(upb_EpsCopyInputStream* e,
- const char* ptr, void* ctx) {
- upb_Decoder* d = (upb_Decoder*)e;
- fastdecode_varintdata* data = ctx;
- void* dst = data->dst;
- uint64_t val;
-
- while (!_upb_Decoder_IsDone(d, &ptr)) {
- dst = fastdecode_resizearr(d, dst, &data->farr, data->valbytes);
- ptr = fastdecode_varint64(ptr, &val);
- if (ptr == NULL) return NULL;
- val = fastdecode_munge(val, data->valbytes, data->zigzag);
- memcpy(dst, &val, data->valbytes);
- dst = (char*)dst + data->valbytes;
- }
-
- fastdecode_commitarr(dst, &data->farr, data->valbytes);
- return ptr;
-}
-
-#define FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, zigzag, unpacked) \
- fastdecode_varintdata ctx = {valbytes, zigzag}; \
- \
- FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked); \
- \
- ctx.dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &ctx.farr, \
- valbytes, CARD_r); \
- if (UPB_UNLIKELY(!ctx.dst)) { \
- RETURN_GENERIC("need array resize\n"); \
- } \
- \
- ptr += tagbytes; \
- ptr = fastdecode_delimited(d, ptr, &fastdecode_topackedvarint, &ctx); \
- \
- if (UPB_UNLIKELY(ptr == NULL)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(d, ptr, msg, table, hasbits, 0);
-
-#define FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, zigzag, unpacked, packed) \
- if (card == CARD_p) { \
- FASTDECODE_PACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, zigzag, unpacked); \
- } else { \
- FASTDECODE_UNPACKEDVARINT(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, zigzag, packed); \
- }
-
-#define z_ZZ true
-#define b_ZZ false
-#define v_ZZ false
-
-/* Generate all combinations:
- * {s,o,r,p} x {b1,v4,z4,v8,z8} x {1bt,2bt} */
-
-#define F(card, type, valbytes, tagbytes) \
- UPB_NOINLINE \
- const char* upb_p##card##type##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_VARINT(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
- CARD_##card, type##_ZZ, \
- upb_pr##type##valbytes##_##tagbytes##bt, \
- upb_pp##type##valbytes##_##tagbytes##bt); \
- }
-
-#define TYPES(card, tagbytes) \
- F(card, b, 1, tagbytes) \
- F(card, v, 4, tagbytes) \
- F(card, v, 8, tagbytes) \
- F(card, z, 4, tagbytes) \
- F(card, z, 8, tagbytes)
-
-#define TAGBYTES(card) \
- TYPES(card, 1) \
- TYPES(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-TAGBYTES(p)
-
-#undef z_ZZ
-#undef b_ZZ
-#undef v_ZZ
-#undef o_ONEOF
-#undef s_ONEOF
-#undef r_ONEOF
-#undef F
-#undef TYPES
-#undef TAGBYTES
-#undef FASTDECODE_UNPACKEDVARINT
-#undef FASTDECODE_PACKEDVARINT
-#undef FASTDECODE_VARINT
-
-/* fixed fields ***************************************************************/
-
-#define FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, packed) \
- void* dst; \
- fastdecode_arr farr; \
- \
- FASTDECODE_CHECKPACKED(tagbytes, card, packed) \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, valbytes, \
- card); \
- if (card == CARD_r) { \
- if (UPB_UNLIKELY(!dst)) { \
- RETURN_GENERIC("couldn't allocate array in arena\n"); \
- } \
- } \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, valbytes); \
- } \
- \
- ptr += tagbytes; \
- memcpy(dst, ptr, valbytes); \
- ptr += valbytes; \
- \
- if (card == CARD_r) { \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, valbytes); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-#define FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, unpacked) \
- FASTDECODE_CHECKPACKED(tagbytes, CARD_r, unpacked) \
- \
- ptr += tagbytes; \
- int size = (uint8_t)ptr[0]; \
- ptr++; \
- if (size & 0x80) { \
- ptr = fastdecode_longsize(ptr, &size); \
- } \
- \
- if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckDataSizeAvailable( \
- &d->input, ptr, size) || \
- (size % valbytes) != 0)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- upb_Array** arr_p = fastdecode_fieldmem(msg, data); \
- upb_Array* arr = *arr_p; \
- uint8_t elem_size_lg2 = __builtin_ctz(valbytes); \
- int elems = size / valbytes; \
- \
- if (UPB_LIKELY(!arr)) { \
- *arr_p = arr = _upb_Array_New(&d->arena, elems, elem_size_lg2); \
- if (!arr) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- } else { \
- _upb_Array_ResizeUninitialized(arr, elems, &d->arena); \
- } \
- \
- char* dst = _upb_array_ptr(arr); \
- memcpy(dst, ptr, size); \
- arr->size = elems; \
- \
- ptr += size; \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-#define FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, unpacked, packed) \
- if (card == CARD_p) { \
- FASTDECODE_PACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, unpacked); \
- } else { \
- FASTDECODE_UNPACKEDFIXED(d, ptr, msg, table, hasbits, data, tagbytes, \
- valbytes, card, packed); \
- }
-
-/* Generate all combinations:
- * {s,o,r,p} x {f4,f8} x {1bt,2bt} */
-
-#define F(card, valbytes, tagbytes) \
- UPB_NOINLINE \
- const char* upb_p##card##f##valbytes##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_FIXED(d, ptr, msg, table, hasbits, data, tagbytes, valbytes, \
- CARD_##card, upb_ppf##valbytes##_##tagbytes##bt, \
- upb_prf##valbytes##_##tagbytes##bt); \
- }
-
-#define TYPES(card, tagbytes) \
- F(card, 4, tagbytes) \
- F(card, 8, tagbytes)
-
-#define TAGBYTES(card) \
- TYPES(card, 1) \
- TYPES(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-TAGBYTES(p)
-
-#undef F
-#undef TYPES
-#undef TAGBYTES
-#undef FASTDECODE_UNPACKEDFIXED
-#undef FASTDECODE_PACKEDFIXED
-
-/* string fields **************************************************************/
-
-typedef const char* fastdecode_copystr_func(struct upb_Decoder* d,
- const char* ptr, upb_Message* msg,
- const upb_MiniTable* table,
- uint64_t hasbits,
- upb_StringView* dst);
-
-UPB_NOINLINE
-static const char* fastdecode_verifyutf8(upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t data) {
- upb_StringView* dst = (upb_StringView*)data;
- if (!_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) {
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
- }
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-}
-
-#define FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, validate_utf8) \
- int size = (uint8_t)ptr[0]; /* Could plumb through hasbits. */ \
- ptr++; \
- if (size & 0x80) { \
- ptr = fastdecode_longsize(ptr, &size); \
- } \
- \
- if (UPB_UNLIKELY(!upb_EpsCopyInputStream_CheckSize(&d->input, ptr, size))) { \
- dst->size = 0; \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- const char* s_ptr = ptr; \
- ptr = upb_EpsCopyInputStream_ReadString(&d->input, &s_ptr, size, &d->arena); \
- if (!ptr) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory); \
- dst->data = s_ptr; \
- dst->size = size; \
- \
- if (validate_utf8) { \
- data = (uint64_t)dst; \
- UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
- } else { \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
- }
-
-UPB_NOINLINE
-static const char* fastdecode_longstring_utf8(struct upb_Decoder* d,
- const char* ptr, upb_Message* msg,
- intptr_t table, uint64_t hasbits,
- uint64_t data) {
- upb_StringView* dst = (upb_StringView*)data;
- FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, true);
-}
-
-UPB_NOINLINE
-static const char* fastdecode_longstring_noutf8(
- struct upb_Decoder* d, const char* ptr, upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t data) {
- upb_StringView* dst = (upb_StringView*)data;
- FASTDECODE_LONGSTRING(d, ptr, msg, table, hasbits, dst, false);
-}
-
-UPB_FORCEINLINE
-static void fastdecode_docopy(upb_Decoder* d, const char* ptr, uint32_t size,
- int copy, char* data, upb_StringView* dst) {
- d->arena.head.ptr += copy;
- dst->data = data;
- UPB_UNPOISON_MEMORY_REGION(data, copy);
- memcpy(data, ptr, copy);
- UPB_POISON_MEMORY_REGION(data + size, copy - size);
-}
-
-#define FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
- card, validate_utf8) \
- upb_StringView* dst; \
- fastdecode_arr farr; \
- int64_t size; \
- size_t arena_has; \
- size_t common_has; \
- char* buf; \
- \
- UPB_ASSERT(!upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0)); \
- UPB_ASSERT(fastdecode_checktag(data, tagbytes)); \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
- sizeof(upb_StringView), card); \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
- } \
- \
- size = (uint8_t)ptr[tagbytes]; \
- ptr += tagbytes + 1; \
- dst->size = size; \
- \
- buf = d->arena.head.ptr; \
- arena_has = _upb_ArenaHas(&d->arena); \
- common_has = UPB_MIN(arena_has, \
- upb_EpsCopyInputStream_BytesAvailable(&d->input, ptr)); \
- \
- if (UPB_LIKELY(size <= 15 - tagbytes)) { \
- if (arena_has < 16) goto longstr; \
- d->arena.head.ptr += 16; \
- memcpy(buf, ptr - tagbytes - 1, 16); \
- dst->data = buf + tagbytes + 1; \
- } else if (UPB_LIKELY(size <= 32)) { \
- if (UPB_UNLIKELY(common_has < 32)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 32, buf, dst); \
- } else if (UPB_LIKELY(size <= 64)) { \
- if (UPB_UNLIKELY(common_has < 64)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 64, buf, dst); \
- } else if (UPB_LIKELY(size < 128)) { \
- if (UPB_UNLIKELY(common_has < 128)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 128, buf, dst); \
- } else { \
- goto longstr; \
- } \
- \
- ptr += size; \
- \
- if (card == CARD_r) { \
- if (validate_utf8 && \
- !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
- } \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- if (card != CARD_r && validate_utf8) { \
- data = (uint64_t)dst; \
- UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS); \
- \
- longstr: \
- if (card == CARD_r) { \
- fastdecode_commitarr(dst + 1, &farr, sizeof(upb_StringView)); \
- } \
- ptr--; \
- if (validate_utf8) { \
- UPB_MUSTTAIL return fastdecode_longstring_utf8(d, ptr, msg, table, \
- hasbits, (uint64_t)dst); \
- } else { \
- UPB_MUSTTAIL return fastdecode_longstring_noutf8(d, ptr, msg, table, \
- hasbits, (uint64_t)dst); \
- }
-
-#define FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, card, \
- copyfunc, validate_utf8) \
- upb_StringView* dst; \
- fastdecode_arr farr; \
- int64_t size; \
- \
- if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
- RETURN_GENERIC("string field tag mismatch\n"); \
- } \
- \
- if (UPB_UNLIKELY( \
- !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, 0))) { \
- UPB_MUSTTAIL return copyfunc(UPB_PARSE_ARGS); \
- } \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
- sizeof(upb_StringView), card); \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_StringView)); \
- } \
- \
- size = (int8_t)ptr[tagbytes]; \
- ptr += tagbytes + 1; \
- \
- if (UPB_UNLIKELY( \
- !upb_EpsCopyInputStream_AliasingAvailable(&d->input, ptr, size))) { \
- ptr--; \
- if (validate_utf8) { \
- return fastdecode_longstring_utf8(d, ptr, msg, table, hasbits, \
- (uint64_t)dst); \
- } else { \
- return fastdecode_longstring_noutf8(d, ptr, msg, table, hasbits, \
- (uint64_t)dst); \
- } \
- } \
- \
- dst->data = ptr; \
- dst->size = size; \
- ptr = upb_EpsCopyInputStream_ReadStringAliased(&d->input, &dst->data, \
- dst->size); \
- \
- if (card == CARD_r) { \
- if (validate_utf8 && \
- !_upb_Decoder_VerifyUtf8Inline(dst->data, dst->size)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8); \
- } \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_StringView)); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- return ptr; \
- } \
- } \
- \
- if (card != CARD_r && validate_utf8) { \
- data = (uint64_t)dst; \
- UPB_MUSTTAIL return fastdecode_verifyutf8(UPB_PARSE_ARGS); \
- } \
- \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-/* Generate all combinations:
- * {p,c} x {s,o,r} x {s, b} x {1bt,2bt} */
-
-#define s_VALIDATE true
-#define b_VALIDATE false
-
-#define F(card, tagbytes, type) \
- UPB_NOINLINE \
- const char* upb_c##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
- CARD_##card, type##_VALIDATE); \
- } \
- const char* upb_p##card##type##_##tagbytes##bt(UPB_PARSE_PARAMS) { \
- FASTDECODE_STRING(d, ptr, msg, table, hasbits, data, tagbytes, \
- CARD_##card, upb_c##card##type##_##tagbytes##bt, \
- type##_VALIDATE); \
- }
-
-#define UTF8(card, tagbytes) \
- F(card, tagbytes, s) \
- F(card, tagbytes, b)
-
-#define TAGBYTES(card) \
- UTF8(card, 1) \
- UTF8(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-
-#undef s_VALIDATE
-#undef b_VALIDATE
-#undef F
-#undef TAGBYTES
-#undef FASTDECODE_LONGSTRING
-#undef FASTDECODE_COPYSTRING
-#undef FASTDECODE_STRING
-
-/* message fields *************************************************************/
-
-UPB_INLINE
-upb_Message* decode_newmsg_ceil(upb_Decoder* d, const upb_MiniTable* l,
- int msg_ceil_bytes) {
- size_t size = l->size + sizeof(upb_Message_Internal);
- char* msg_data;
- if (UPB_LIKELY(msg_ceil_bytes > 0 &&
- _upb_ArenaHas(&d->arena) >= msg_ceil_bytes)) {
- UPB_ASSERT(size <= (size_t)msg_ceil_bytes);
- msg_data = d->arena.head.ptr;
- d->arena.head.ptr += size;
- UPB_UNPOISON_MEMORY_REGION(msg_data, msg_ceil_bytes);
- memset(msg_data, 0, msg_ceil_bytes);
- UPB_POISON_MEMORY_REGION(msg_data + size, msg_ceil_bytes - size);
- } else {
- msg_data = (char*)upb_Arena_Malloc(&d->arena, size);
- memset(msg_data, 0, size);
- }
- return msg_data + sizeof(upb_Message_Internal);
-}
-
-typedef struct {
- intptr_t table;
- upb_Message* msg;
-} fastdecode_submsgdata;
-
-UPB_FORCEINLINE
-static const char* fastdecode_tosubmsg(upb_EpsCopyInputStream* e,
- const char* ptr, void* ctx) {
- upb_Decoder* d = (upb_Decoder*)e;
- fastdecode_submsgdata* submsg = ctx;
- ptr = fastdecode_dispatch(d, ptr, submsg->msg, submsg->table, 0, 0);
- UPB_ASSUME(ptr != NULL);
- return ptr;
-}
-
-#define FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, \
- msg_ceil_bytes, card) \
- \
- if (UPB_UNLIKELY(!fastdecode_checktag(data, tagbytes))) { \
- RETURN_GENERIC("submessage field tag mismatch\n"); \
- } \
- \
- if (--d->depth == 0) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded); \
- } \
- \
- upb_Message** dst; \
- uint32_t submsg_idx = (data >> 16) & 0xff; \
- const upb_MiniTable* tablep = decode_totablep(table); \
- const upb_MiniTable* subtablep = tablep->subs[submsg_idx].submsg; \
- fastdecode_submsgdata submsg = {decode_totable(subtablep)}; \
- fastdecode_arr farr; \
- \
- if (subtablep->table_mask == (uint8_t)-1) { \
- RETURN_GENERIC("submessage doesn't have fast tables."); \
- } \
- \
- dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr, \
- sizeof(upb_Message*), card); \
- \
- if (card == CARD_s) { \
- *(uint32_t*)msg |= hasbits; \
- hasbits = 0; \
- } \
- \
- again: \
- if (card == CARD_r) { \
- dst = fastdecode_resizearr(d, dst, &farr, sizeof(upb_Message*)); \
- } \
- \
- submsg.msg = *dst; \
- \
- if (card == CARD_r || UPB_LIKELY(!submsg.msg)) { \
- *dst = submsg.msg = decode_newmsg_ceil(d, subtablep, msg_ceil_bytes); \
- } \
- \
- ptr += tagbytes; \
- ptr = fastdecode_delimited(d, ptr, fastdecode_tosubmsg, &submsg); \
- \
- if (UPB_UNLIKELY(ptr == NULL || d->end_group != DECODE_NOGROUP)) { \
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
- } \
- \
- if (card == CARD_r) { \
- fastdecode_nextret ret = fastdecode_nextrepeated( \
- d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_Message*)); \
- switch (ret.next) { \
- case FD_NEXT_SAMEFIELD: \
- dst = ret.dst; \
- goto again; \
- case FD_NEXT_OTHERFIELD: \
- d->depth++; \
- data = ret.tag; \
- UPB_MUSTTAIL return _upb_FastDecoder_TagDispatch(UPB_PARSE_ARGS); \
- case FD_NEXT_ATLIMIT: \
- d->depth++; \
- return ptr; \
- } \
- } \
- \
- d->depth++; \
- UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
-
-#define F(card, tagbytes, size_ceil, ceil_arg) \
- const char* upb_p##card##m_##tagbytes##bt_max##size_ceil##b( \
- UPB_PARSE_PARAMS) { \
- FASTDECODE_SUBMSG(d, ptr, msg, table, hasbits, data, tagbytes, ceil_arg, \
- CARD_##card); \
- }
-
-#define SIZES(card, tagbytes) \
- F(card, tagbytes, 64, 64) \
- F(card, tagbytes, 128, 128) \
- F(card, tagbytes, 192, 192) \
- F(card, tagbytes, 256, 256) \
- F(card, tagbytes, max, -1)
-
-#define TAGBYTES(card) \
- SIZES(card, 1) \
- SIZES(card, 2)
-
-TAGBYTES(s)
-TAGBYTES(o)
-TAGBYTES(r)
-
-#undef TAGBYTES
-#undef SIZES
-#undef F
-#undef FASTDECODE_SUBMSG
-
-#endif /* UPB_FASTTABLE */
-
-// We encode backwards, to avoid pre-computing lengths (one-pass encode).
-
-
-#include <setjmp.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-
-// Must be last.
-
-#define UPB_PB_VARINT_MAX_LEN 10
-
-UPB_NOINLINE
-static size_t encode_varint64(uint64_t val, char* buf) {
- size_t i = 0;
- do {
- uint8_t byte = val & 0x7fU;
- val >>= 7;
- if (val) byte |= 0x80U;
- buf[i++] = byte;
- } while (val);
- return i;
-}
-
-static uint32_t encode_zz32(int32_t n) {
- return ((uint32_t)n << 1) ^ (n >> 31);
-}
-static uint64_t encode_zz64(int64_t n) {
- return ((uint64_t)n << 1) ^ (n >> 63);
-}
-
-typedef struct {
- upb_EncodeStatus status;
- jmp_buf err;
- upb_Arena* arena;
- char *buf, *ptr, *limit;
- int options;
- int depth;
- _upb_mapsorter sorter;
-} upb_encstate;
-
-static size_t upb_roundup_pow2(size_t bytes) {
- size_t ret = 128;
- while (ret < bytes) {
- ret *= 2;
- }
- return ret;
-}
-
-UPB_NORETURN static void encode_err(upb_encstate* e, upb_EncodeStatus s) {
- UPB_ASSERT(s != kUpb_EncodeStatus_Ok);
- e->status = s;
- UPB_LONGJMP(e->err, 1);
-}
-
-UPB_NOINLINE
-static void encode_growbuffer(upb_encstate* e, size_t bytes) {
- size_t old_size = e->limit - e->buf;
- size_t new_size = upb_roundup_pow2(bytes + (e->limit - e->ptr));
- char* new_buf = upb_Arena_Realloc(e->arena, e->buf, old_size, new_size);
-
- if (!new_buf) encode_err(e, kUpb_EncodeStatus_OutOfMemory);
-
- // We want previous data at the end, realloc() put it at the beginning.
- // TODO: This is somewhat inefficient since we are copying twice.
- // Maybe create a realloc() that copies to the end of the new buffer?
- if (old_size > 0) {
- memmove(new_buf + new_size - old_size, e->buf, old_size);
- }
-
- e->ptr = new_buf + new_size - (e->limit - e->ptr);
- e->limit = new_buf + new_size;
- e->buf = new_buf;
-
- e->ptr -= bytes;
-}
-
-/* Call to ensure that at least "bytes" bytes are available for writing at
- * e->ptr. Returns false if the bytes could not be allocated. */
-UPB_FORCEINLINE
-static void encode_reserve(upb_encstate* e, size_t bytes) {
- if ((size_t)(e->ptr - e->buf) < bytes) {
- encode_growbuffer(e, bytes);
- return;
- }
-
- e->ptr -= bytes;
-}
-
-/* Writes the given bytes to the buffer, handling reserve/advance. */
-static void encode_bytes(upb_encstate* e, const void* data, size_t len) {
- if (len == 0) return; /* memcpy() with zero size is UB */
- encode_reserve(e, len);
- memcpy(e->ptr, data, len);
-}
-
-static void encode_fixed64(upb_encstate* e, uint64_t val) {
- val = _upb_BigEndian_Swap64(val);
- encode_bytes(e, &val, sizeof(uint64_t));
-}
-
-static void encode_fixed32(upb_encstate* e, uint32_t val) {
- val = _upb_BigEndian_Swap32(val);
- encode_bytes(e, &val, sizeof(uint32_t));
-}
-
-UPB_NOINLINE
-static void encode_longvarint(upb_encstate* e, uint64_t val) {
- size_t len;
- char* start;
-
- encode_reserve(e, UPB_PB_VARINT_MAX_LEN);
- len = encode_varint64(val, e->ptr);
- start = e->ptr + UPB_PB_VARINT_MAX_LEN - len;
- memmove(start, e->ptr, len);
- e->ptr = start;
-}
-
-UPB_FORCEINLINE
-static void encode_varint(upb_encstate* e, uint64_t val) {
- if (val < 128 && e->ptr != e->buf) {
- --e->ptr;
- *e->ptr = val;
- } else {
- encode_longvarint(e, val);
- }
-}
-
-static void encode_double(upb_encstate* e, double d) {
- uint64_t u64;
- UPB_ASSERT(sizeof(double) == sizeof(uint64_t));
- memcpy(&u64, &d, sizeof(uint64_t));
- encode_fixed64(e, u64);
-}
-
-static void encode_float(upb_encstate* e, float d) {
- uint32_t u32;
- UPB_ASSERT(sizeof(float) == sizeof(uint32_t));
- memcpy(&u32, &d, sizeof(uint32_t));
- encode_fixed32(e, u32);
-}
-
-static void encode_tag(upb_encstate* e, uint32_t field_number,
- uint8_t wire_type) {
- encode_varint(e, (field_number << 3) | wire_type);
-}
-
-static void encode_fixedarray(upb_encstate* e, const upb_Array* arr,
- size_t elem_size, uint32_t tag) {
- size_t bytes = arr->size * elem_size;
- const char* data = _upb_array_constptr(arr);
- const char* ptr = data + bytes - elem_size;
-
- if (tag || !_upb_IsLittleEndian()) {
- while (true) {
- if (elem_size == 4) {
- uint32_t val;
- memcpy(&val, ptr, sizeof(val));
- val = _upb_BigEndian_Swap32(val);
- encode_bytes(e, &val, elem_size);
- } else {
- UPB_ASSERT(elem_size == 8);
- uint64_t val;
- memcpy(&val, ptr, sizeof(val));
- val = _upb_BigEndian_Swap64(val);
- encode_bytes(e, &val, elem_size);
- }
-
- if (tag) encode_varint(e, tag);
- if (ptr == data) break;
- ptr -= elem_size;
- }
- } else {
- encode_bytes(e, data, bytes);
- }
-}
-
-static void encode_message(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTable* m, size_t* size);
-
-static void encode_TaggedMessagePtr(upb_encstate* e,
- upb_TaggedMessagePtr tagged,
- const upb_MiniTable* m, size_t* size) {
- if (upb_TaggedMessagePtr_IsEmpty(tagged)) {
- m = &_kUpb_MiniTable_Empty;
- }
- encode_message(e, _upb_TaggedMessagePtr_GetMessage(tagged), m, size);
-}
-
-static void encode_scalar(upb_encstate* e, const void* _field_mem,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- const char* field_mem = _field_mem;
- int wire_type;
-
-#define CASE(ctype, type, wtype, encodeval) \
- { \
- ctype val = *(ctype*)field_mem; \
- encode_##type(e, encodeval); \
- wire_type = wtype; \
- break; \
- }
-
- switch (f->UPB_PRIVATE(descriptortype)) {
- case kUpb_FieldType_Double:
- CASE(double, double, kUpb_WireType_64Bit, val);
- case kUpb_FieldType_Float:
- CASE(float, float, kUpb_WireType_32Bit, val);
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_UInt64:
- CASE(uint64_t, varint, kUpb_WireType_Varint, val);
- case kUpb_FieldType_UInt32:
- CASE(uint32_t, varint, kUpb_WireType_Varint, val);
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_Enum:
- CASE(int32_t, varint, kUpb_WireType_Varint, (int64_t)val);
- case kUpb_FieldType_SFixed64:
- case kUpb_FieldType_Fixed64:
- CASE(uint64_t, fixed64, kUpb_WireType_64Bit, val);
- case kUpb_FieldType_Fixed32:
- case kUpb_FieldType_SFixed32:
- CASE(uint32_t, fixed32, kUpb_WireType_32Bit, val);
- case kUpb_FieldType_Bool:
- CASE(bool, varint, kUpb_WireType_Varint, val);
- case kUpb_FieldType_SInt32:
- CASE(int32_t, varint, kUpb_WireType_Varint, encode_zz32(val));
- case kUpb_FieldType_SInt64:
- CASE(int64_t, varint, kUpb_WireType_Varint, encode_zz64(val));
- case kUpb_FieldType_String:
- case kUpb_FieldType_Bytes: {
- upb_StringView view = *(upb_StringView*)field_mem;
- encode_bytes(e, view.data, view.size);
- encode_varint(e, view.size);
- wire_type = kUpb_WireType_Delimited;
- break;
- }
- case kUpb_FieldType_Group: {
- size_t size;
- upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (submsg == 0) {
- return;
- }
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- encode_tag(e, f->number, kUpb_WireType_EndGroup);
- encode_TaggedMessagePtr(e, submsg, subm, &size);
- wire_type = kUpb_WireType_StartGroup;
- e->depth++;
- break;
- }
- case kUpb_FieldType_Message: {
- size_t size;
- upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (submsg == 0) {
- return;
- }
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- encode_TaggedMessagePtr(e, submsg, subm, &size);
- encode_varint(e, size);
- wire_type = kUpb_WireType_Delimited;
- e->depth++;
- break;
- }
- default:
- UPB_UNREACHABLE();
- }
-#undef CASE
-
- encode_tag(e, f->number, wire_type);
-}
-
-static void encode_array(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- const upb_Array* arr = *UPB_PTR_AT(msg, f->offset, upb_Array*);
- bool packed = f->mode & kUpb_LabelFlags_IsPacked;
- size_t pre_len = e->limit - e->ptr;
-
- if (arr == NULL || arr->size == 0) {
- return;
- }
-
-#define VARINT_CASE(ctype, encode) \
- { \
- const ctype* start = _upb_array_constptr(arr); \
- const ctype* ptr = start + arr->size; \
- uint32_t tag = packed ? 0 : (f->number << 3) | kUpb_WireType_Varint; \
- do { \
- ptr--; \
- encode_varint(e, encode); \
- if (tag) encode_varint(e, tag); \
- } while (ptr != start); \
- } \
- break;
-
-#define TAG(wire_type) (packed ? 0 : (f->number << 3 | wire_type))
-
- switch (f->UPB_PRIVATE(descriptortype)) {
- case kUpb_FieldType_Double:
- encode_fixedarray(e, arr, sizeof(double), TAG(kUpb_WireType_64Bit));
- break;
- case kUpb_FieldType_Float:
- encode_fixedarray(e, arr, sizeof(float), TAG(kUpb_WireType_32Bit));
- break;
- case kUpb_FieldType_SFixed64:
- case kUpb_FieldType_Fixed64:
- encode_fixedarray(e, arr, sizeof(uint64_t), TAG(kUpb_WireType_64Bit));
- break;
- case kUpb_FieldType_Fixed32:
- case kUpb_FieldType_SFixed32:
- encode_fixedarray(e, arr, sizeof(uint32_t), TAG(kUpb_WireType_32Bit));
- break;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_UInt64:
- VARINT_CASE(uint64_t, *ptr);
- case kUpb_FieldType_UInt32:
- VARINT_CASE(uint32_t, *ptr);
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_Enum:
- VARINT_CASE(int32_t, (int64_t)*ptr);
- case kUpb_FieldType_Bool:
- VARINT_CASE(bool, *ptr);
- case kUpb_FieldType_SInt32:
- VARINT_CASE(int32_t, encode_zz32(*ptr));
- case kUpb_FieldType_SInt64:
- VARINT_CASE(int64_t, encode_zz64(*ptr));
- case kUpb_FieldType_String:
- case kUpb_FieldType_Bytes: {
- const upb_StringView* start = _upb_array_constptr(arr);
- const upb_StringView* ptr = start + arr->size;
- do {
- ptr--;
- encode_bytes(e, ptr->data, ptr->size);
- encode_varint(e, ptr->size);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
- } while (ptr != start);
- return;
- }
- case kUpb_FieldType_Group: {
- const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
- const upb_TaggedMessagePtr* ptr = start + arr->size;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- do {
- size_t size;
- ptr--;
- encode_tag(e, f->number, kUpb_WireType_EndGroup);
- encode_TaggedMessagePtr(e, *ptr, subm, &size);
- encode_tag(e, f->number, kUpb_WireType_StartGroup);
- } while (ptr != start);
- e->depth++;
- return;
- }
- case kUpb_FieldType_Message: {
- const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
- const upb_TaggedMessagePtr* ptr = start + arr->size;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- do {
- size_t size;
- ptr--;
- encode_TaggedMessagePtr(e, *ptr, subm, &size);
- encode_varint(e, size);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
- } while (ptr != start);
- e->depth++;
- return;
- }
- }
-#undef VARINT_CASE
-
- if (packed) {
- encode_varint(e, e->limit - e->ptr - pre_len);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
- }
-}
-
-static void encode_mapentry(upb_encstate* e, uint32_t number,
- const upb_MiniTable* layout,
- const upb_MapEntry* ent) {
- const upb_MiniTableField* key_field = &layout->fields[0];
- const upb_MiniTableField* val_field = &layout->fields[1];
- size_t pre_len = e->limit - e->ptr;
- size_t size;
- encode_scalar(e, &ent->data.v, layout->subs, val_field);
- encode_scalar(e, &ent->data.k, layout->subs, key_field);
- size = (e->limit - e->ptr) - pre_len;
- encode_varint(e, size);
- encode_tag(e, number, kUpb_WireType_Delimited);
-}
-
-static void encode_map(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- const upb_Map* map = *UPB_PTR_AT(msg, f->offset, const upb_Map*);
- const upb_MiniTable* layout = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(layout->field_count == 2);
-
- if (map == NULL) return;
-
- if (e->options & kUpb_EncodeOption_Deterministic) {
- _upb_sortedmap sorted;
- _upb_mapsorter_pushmap(&e->sorter,
- layout->fields[0].UPB_PRIVATE(descriptortype), map,
- &sorted);
- upb_MapEntry ent;
- while (_upb_sortedmap_next(&e->sorter, map, &sorted, &ent)) {
- encode_mapentry(e, f->number, layout, &ent);
- }
- _upb_mapsorter_popmap(&e->sorter, &sorted);
- } else {
- intptr_t iter = UPB_STRTABLE_BEGIN;
- upb_StringView key;
- upb_value val;
- while (upb_strtable_next2(&map->table, &key, &val, &iter)) {
- upb_MapEntry ent;
- _upb_map_fromkey(key, &ent.data.k, map->key_size);
- _upb_map_fromvalue(val, &ent.data.v, map->val_size);
- encode_mapentry(e, f->number, layout, &ent);
- }
- }
-}
-
-static bool encode_shouldencode(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* f) {
- if (f->presence == 0) {
- /* Proto3 presence or map/array. */
- const void* mem = UPB_PTR_AT(msg, f->offset, void);
- switch (_upb_MiniTableField_GetRep(f)) {
- case kUpb_FieldRep_1Byte: {
- char ch;
- memcpy(&ch, mem, 1);
- return ch != 0;
- }
- case kUpb_FieldRep_4Byte: {
- uint32_t u32;
- memcpy(&u32, mem, 4);
- return u32 != 0;
- }
- case kUpb_FieldRep_8Byte: {
- uint64_t u64;
- memcpy(&u64, mem, 8);
- return u64 != 0;
- }
- case kUpb_FieldRep_StringView: {
- const upb_StringView* str = (const upb_StringView*)mem;
- return str->size != 0;
- }
- default:
- UPB_UNREACHABLE();
- }
- } else if (f->presence > 0) {
- /* Proto2 presence: hasbit. */
- return _upb_hasbit_field(msg, f);
- } else {
- /* Field is in a oneof. */
- return _upb_getoneofcase_field(msg, f) == f->number;
- }
-}
-
-static void encode_field(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTableSub* subs,
- const upb_MiniTableField* field) {
- switch (upb_FieldMode_Get(field)) {
- case kUpb_FieldMode_Array:
- encode_array(e, msg, subs, field);
- break;
- case kUpb_FieldMode_Map:
- encode_map(e, msg, subs, field);
- break;
- case kUpb_FieldMode_Scalar:
- encode_scalar(e, UPB_PTR_AT(msg, field->offset, void), subs, field);
- break;
- default:
- UPB_UNREACHABLE();
- }
-}
-
-static void encode_msgset_item(upb_encstate* e,
- const upb_Message_Extension* ext) {
- size_t size;
- encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_EndGroup);
- encode_message(e, ext->data.ptr, ext->ext->sub.submsg, &size);
- encode_varint(e, size);
- encode_tag(e, kUpb_MsgSet_Message, kUpb_WireType_Delimited);
- encode_varint(e, ext->ext->field.number);
- encode_tag(e, kUpb_MsgSet_TypeId, kUpb_WireType_Varint);
- encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_StartGroup);
-}
-
-static void encode_ext(upb_encstate* e, const upb_Message_Extension* ext,
- bool is_message_set) {
- if (UPB_UNLIKELY(is_message_set)) {
- encode_msgset_item(e, ext);
- } else {
- encode_field(e, &ext->data, &ext->ext->sub, &ext->ext->field);
- }
-}
-
-static void encode_message(upb_encstate* e, const upb_Message* msg,
- const upb_MiniTable* m, size_t* size) {
- size_t pre_len = e->limit - e->ptr;
-
- if ((e->options & kUpb_EncodeOption_CheckRequired) && m->required_count) {
- uint64_t msg_head;
- memcpy(&msg_head, msg, 8);
- msg_head = _upb_BigEndian_Swap64(msg_head);
- if (upb_MiniTable_requiredmask(m) & ~msg_head) {
- encode_err(e, kUpb_EncodeStatus_MissingRequired);
- }
- }
-
- if ((e->options & kUpb_EncodeOption_SkipUnknown) == 0) {
- size_t unknown_size;
- const char* unknown = upb_Message_GetUnknown(msg, &unknown_size);
-
- if (unknown) {
- encode_bytes(e, unknown, unknown_size);
- }
- }
-
- if (m->ext != kUpb_ExtMode_NonExtendable) {
- /* Encode all extensions together. Unlike C++, we do not attempt to keep
- * these in field number order relative to normal fields or even to each
- * other. */
- size_t ext_count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &ext_count);
- if (ext_count) {
- if (e->options & kUpb_EncodeOption_Deterministic) {
- _upb_sortedmap sorted;
- _upb_mapsorter_pushexts(&e->sorter, ext, ext_count, &sorted);
- while (_upb_sortedmap_nextext(&e->sorter, &sorted, &ext)) {
- encode_ext(e, ext, m->ext == kUpb_ExtMode_IsMessageSet);
- }
- _upb_mapsorter_popmap(&e->sorter, &sorted);
- } else {
- const upb_Message_Extension* end = ext + ext_count;
- for (; ext != end; ext++) {
- encode_ext(e, ext, m->ext == kUpb_ExtMode_IsMessageSet);
- }
- }
- }
- }
-
- if (m->field_count) {
- const upb_MiniTableField* f = &m->fields[m->field_count];
- const upb_MiniTableField* first = &m->fields[0];
- while (f != first) {
- f--;
- if (encode_shouldencode(e, msg, m->subs, f)) {
- encode_field(e, msg, m->subs, f);
- }
- }
- }
-
- *size = (e->limit - e->ptr) - pre_len;
-}
-
-static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
- const void* const msg,
- const upb_MiniTable* const l,
- char** const buf,
- size_t* const size) {
- // Unfortunately we must continue to perform hackery here because there are
- // code paths which blindly copy the returned pointer without bothering to
- // check for errors until much later (b/235839510). So we still set *buf to
- // NULL on error and we still set it to non-NULL on a successful empty result.
- if (UPB_SETJMP(encoder->err) == 0) {
- encode_message(encoder, msg, l, size);
- *size = encoder->limit - encoder->ptr;
- if (*size == 0) {
- static char ch;
- *buf = &ch;
- } else {
- UPB_ASSERT(encoder->ptr);
- *buf = encoder->ptr;
- }
- } else {
- UPB_ASSERT(encoder->status != kUpb_EncodeStatus_Ok);
- *buf = NULL;
- *size = 0;
- }
-
- _upb_mapsorter_destroy(&encoder->sorter);
- return encoder->status;
-}
-
-upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
- int options, upb_Arena* arena, char** buf,
- size_t* size) {
- upb_encstate e;
- unsigned depth = (unsigned)options >> 16;
-
- e.status = kUpb_EncodeStatus_Ok;
- e.arena = arena;
- e.buf = NULL;
- e.limit = NULL;
- e.ptr = NULL;
- e.depth = depth ? depth : kUpb_WireFormat_DefaultDepthLimit;
- e.options = options;
- _upb_mapsorter_init(&e.sorter);
-
- return upb_Encoder_Encode(&e, msg, l, buf, size);
-}
-
-
-
-// Must be last.
-
-UPB_NOINLINE _upb_WireReader_ReadLongVarintRet
-_upb_WireReader_ReadLongVarint(const char* ptr, uint64_t val) {
- _upb_WireReader_ReadLongVarintRet ret = {NULL, 0};
- uint64_t byte;
- int i;
- for (i = 1; i < 10; i++) {
- byte = (uint8_t)ptr[i];
- val += (byte - 1) << (i * 7);
- if (!(byte & 0x80)) {
- ret.ptr = ptr + i + 1;
- ret.val = val;
- return ret;
- }
- }
- return ret;
-}
-
-const char* _upb_WireReader_SkipGroup(const char* ptr, uint32_t tag,
- int depth_limit,
- upb_EpsCopyInputStream* stream) {
- if (--depth_limit == 0) return NULL;
- uint32_t end_group_tag = (tag & ~7ULL) | kUpb_WireType_EndGroup;
- while (!upb_EpsCopyInputStream_IsDone(stream, &ptr)) {
- uint32_t tag;
- ptr = upb_WireReader_ReadTag(ptr, &tag);
- if (!ptr) return NULL;
- if (tag == end_group_tag) return ptr;
- ptr = _upb_WireReader_SkipValue(ptr, tag, depth_limit, stream);
- if (!ptr) return NULL;
- }
- return ptr;
-}
-
// This should #undef all macros #defined in def.inc
#undef UPB_SIZE
@@ -14972,6 +15460,7 @@
#undef UPB_ALIGN_DOWN
#undef UPB_ALIGN_MALLOC
#undef UPB_ALIGN_OF
+#undef UPB_ALIGN_AS
#undef UPB_MALLOC_ALIGN
#undef UPB_LIKELY
#undef UPB_UNLIKELY
@@ -15008,3 +15497,4 @@
#undef UPB_ATOMIC
#undef UPB_USE_C11_ATOMICS
#undef UPB_PRIVATE
+#undef UPB_ONLYBITS
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h
index ba67dfa..5bd47a5 100755
--- a/ruby/ext/google/protobuf_c/ruby-upb.h
+++ b/ruby/ext/google/protobuf_c/ruby-upb.h
@@ -96,6 +96,13 @@
#define UPB_ALIGN_OF(type) offsetof (struct { char c; type member; }, member)
#endif
+#ifdef _MSC_VER
+// Some versions of our Windows compiler don't support the C11 syntax.
+#define UPB_ALIGN_AS(x) __declspec(align(x))
+#else
+#define UPB_ALIGN_AS(x) _Alignas(x)
+#endif
+
// Hints to the compiler about likely/unlikely branches.
#if defined (__GNUC__) || defined(__clang__)
#define UPB_LIKELY(x) __builtin_expect((bool)(x), 1)
@@ -182,6 +189,12 @@
#define UPB_PRIVATE(x) x##_dont_copy_me__upb_internal_use_only
+#ifdef UPB_ALLOW_PRIVATE_ACCESS__FOR_BITS_ONLY
+#define UPB_ONLYBITS(x) x
+#else
+#define UPB_ONLYBITS(x) UPB_PRIVATE(x)
+#endif
+
/* Configure whether fasttable is switched on or not. *************************/
#ifdef __has_attribute
@@ -372,9 +385,34 @@
// IWYU pragma: begin_exports
+#ifndef UPB_BASE_UPCAST_H_
+#define UPB_BASE_UPCAST_H_
+
+// Must be last.
+
+// This macro provides a way to upcast message pointers in a way that is
+// somewhat more bulletproof than blindly casting a pointer. Example:
+//
+// typedef struct {
+// upb_Message UPB_PRIVATE(base);
+// } pkg_FooMessage;
+//
+// void f(pkg_FooMessage* msg) {
+// upb_Decode(UPB_UPCAST(msg), ...);
+// }
+
+#define UPB_UPCAST(x) (&(x)->base##_dont_copy_me__upb_internal_use_only)
+
+
+#endif /* UPB_BASE_UPCAST_H_ */
+
#ifndef UPB_MESSAGE_ACCESSORS_H_
#define UPB_MESSAGE_ACCESSORS_H_
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
#ifndef UPB_BASE_DESCRIPTOR_CONSTANTS_H_
#define UPB_BASE_DESCRIPTOR_CONSTANTS_H_
@@ -434,7 +472,34 @@
extern "C" {
#endif
-UPB_INLINE bool upb_FieldType_IsPackable(upb_FieldType type) {
+// Convert from upb_FieldType to upb_CType
+UPB_INLINE upb_CType upb_FieldType_CType(upb_FieldType field_type) {
+ static const upb_CType c_type[] = {
+ kUpb_CType_Double, // kUpb_FieldType_Double
+ kUpb_CType_Float, // kUpb_FieldType_Float
+ kUpb_CType_Int64, // kUpb_FieldType_Int64
+ kUpb_CType_UInt64, // kUpb_FieldType_UInt64
+ kUpb_CType_Int32, // kUpb_FieldType_Int32
+ kUpb_CType_UInt64, // kUpb_FieldType_Fixed64
+ kUpb_CType_UInt32, // kUpb_FieldType_Fixed32
+ kUpb_CType_Bool, // kUpb_FieldType_Bool
+ kUpb_CType_String, // kUpb_FieldType_String
+ kUpb_CType_Message, // kUpb_FieldType_Group
+ kUpb_CType_Message, // kUpb_FieldType_Message
+ kUpb_CType_Bytes, // kUpb_FieldType_Bytes
+ kUpb_CType_UInt32, // kUpb_FieldType_UInt32
+ kUpb_CType_Enum, // kUpb_FieldType_Enum
+ kUpb_CType_Int32, // kUpb_FieldType_SFixed32
+ kUpb_CType_Int64, // kUpb_FieldType_SFixed64
+ kUpb_CType_Int32, // kUpb_FieldType_SInt32
+ kUpb_CType_Int64, // kUpb_FieldType_SInt64
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return c_type[field_type - 1];
+}
+
+UPB_INLINE bool upb_FieldType_IsPackable(upb_FieldType field_type) {
// clang-format off
const unsigned kUnpackableTypes =
(1 << kUpb_FieldType_String) |
@@ -442,7 +507,7 @@
(1 << kUpb_FieldType_Message) |
(1 << kUpb_FieldType_Group);
// clang-format on
- return (1 << type) & ~kUnpackableTypes;
+ return (1 << field_type) & ~kUnpackableTypes;
}
#ifdef __cplusplus
@@ -451,12 +516,57 @@
#endif /* UPB_BASE_DESCRIPTOR_CONSTANTS_H_ */
+#ifndef UPB_BASE_STRING_VIEW_H_
+#define UPB_BASE_STRING_VIEW_H_
-#ifndef UPB_MESSAGE_ARRAY_H_
-#define UPB_MESSAGE_ARRAY_H_
+#include <string.h>
-#include <stddef.h>
+// Must be last.
+#define UPB_STRINGVIEW_INIT(ptr, len) \
+ { ptr, len }
+
+#define UPB_STRINGVIEW_FORMAT "%.*s"
+#define UPB_STRINGVIEW_ARGS(view) (int)(view).size, (view).data
+
+// LINT.IfChange(struct_definition)
+typedef struct {
+ const char* data;
+ size_t size;
+} upb_StringView;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE upb_StringView upb_StringView_FromDataAndSize(const char* data,
+ size_t size) {
+ upb_StringView ret;
+ ret.data = data;
+ ret.size = size;
+ return ret;
+}
+
+UPB_INLINE upb_StringView upb_StringView_FromString(const char* data) {
+ return upb_StringView_FromDataAndSize(data, strlen(data));
+}
+
+UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b) {
+ return (a.size == b.size) && (!a.size || !memcmp(a.data, b.data, a.size));
+}
+
+// LINT.ThenChange(
+// GoogleInternalName0,
+// //depot/google3/third_party/upb/bits/golang/accessor.go:map_go_string,
+// //depot/google3/third_party/upb/bits/typescript/string_view.ts
+// )
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_BASE_STRING_VIEW_H_ */
/* upb_Arena is a specific allocator implementation that uses arena allocation.
* The user provides an allocator that will be used to allocate the underlying
@@ -475,7 +585,6 @@
#include <stddef.h>
#include <stdint.h>
-#include <string.h>
#ifndef UPB_MEM_ALLOC_H_
@@ -548,14 +657,114 @@
#endif /* UPB_MEM_ALLOC_H_ */
+#ifndef UPB_MEM_INTERNAL_ARENA_H_
+#define UPB_MEM_INTERNAL_ARENA_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+// Must be last.
+
+// This is QUITE an ugly hack, which specifies the number of pointers needed
+// to equal (or exceed) the storage required for one upb_Arena.
+//
+// We need this because the decoder inlines a upb_Arena for performance but
+// the full struct is not visible outside of arena.c. Yes, I know, it's awful.
+#define UPB_ARENA_SIZE_HACK 7
+
+// LINT.IfChange(upb_Arena)
+
+struct upb_Arena {
+ char* UPB_ONLYBITS(ptr);
+ char* UPB_ONLYBITS(end);
+};
+
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/arena.ts:upb_Arena)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void UPB_PRIVATE(_upb_Arena_SwapIn)(struct upb_Arena* des,
+ const struct upb_Arena* src);
+void UPB_PRIVATE(_upb_Arena_SwapOut)(struct upb_Arena* des,
+ const struct upb_Arena* src);
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_ArenaHas)(const struct upb_Arena* a) {
+ return (size_t)(a->UPB_ONLYBITS(end) - a->UPB_ONLYBITS(ptr));
+}
+
+UPB_INLINE void* UPB_PRIVATE(_upb_Arena_Malloc)(struct upb_Arena* a,
+ size_t size) {
+ void* UPB_PRIVATE(_upb_Arena_SlowMalloc)(struct upb_Arena * a, size_t size);
+
+ size = UPB_ALIGN_MALLOC(size);
+ const size_t span = size + UPB_ASAN_GUARD_SIZE;
+ if (UPB_UNLIKELY(UPB_PRIVATE(_upb_ArenaHas)(a) < span)) {
+ return UPB_PRIVATE(_upb_Arena_SlowMalloc)(a, span);
+ }
+
+ // We have enough space to do a fast malloc.
+ void* ret = a->UPB_ONLYBITS(ptr);
+ UPB_ASSERT(UPB_ALIGN_MALLOC((uintptr_t)ret) == (uintptr_t)ret);
+ UPB_ASSERT(UPB_ALIGN_MALLOC(size) == size);
+ UPB_UNPOISON_MEMORY_REGION(ret, size);
+
+ a->UPB_ONLYBITS(ptr) += span;
+
+ return ret;
+}
+
+UPB_INLINE void* UPB_PRIVATE(_upb_Arena_Realloc)(struct upb_Arena* a, void* ptr,
+ size_t oldsize, size_t size) {
+ oldsize = UPB_ALIGN_MALLOC(oldsize);
+ size = UPB_ALIGN_MALLOC(size);
+ bool is_most_recent_alloc =
+ (uintptr_t)ptr + oldsize == (uintptr_t)a->UPB_ONLYBITS(ptr);
+
+ if (is_most_recent_alloc) {
+ ptrdiff_t diff = size - oldsize;
+ if ((ptrdiff_t)UPB_PRIVATE(_upb_ArenaHas)(a) >= diff) {
+ a->UPB_ONLYBITS(ptr) += diff;
+ return ptr;
+ }
+ } else if (size <= oldsize) {
+ return ptr;
+ }
+
+ void* ret = UPB_PRIVATE(_upb_Arena_Malloc)(a, size);
+
+ if (ret && oldsize > 0) {
+ memcpy(ret, ptr, UPB_MIN(oldsize, size));
+ }
+
+ return ret;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Arena_ShrinkLast)(struct upb_Arena* a,
+ void* ptr, size_t oldsize,
+ size_t size) {
+ oldsize = UPB_ALIGN_MALLOC(oldsize);
+ size = UPB_ALIGN_MALLOC(size);
+ // Must be the last alloc.
+ UPB_ASSERT((char*)ptr + oldsize ==
+ a->UPB_ONLYBITS(ptr) - UPB_ASAN_GUARD_SIZE);
+ UPB_ASSERT(size <= oldsize);
+ a->UPB_ONLYBITS(ptr) = (char*)ptr + size;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MEM_INTERNAL_ARENA_H_ */
+
// Must be last.
typedef struct upb_Arena upb_Arena;
-typedef struct {
- char *ptr, *end;
-} _upb_ArenaHead;
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -568,35 +777,23 @@
UPB_API void upb_Arena_Free(upb_Arena* a);
UPB_API bool upb_Arena_Fuse(upb_Arena* a, upb_Arena* b);
-bool upb_Arena_IncRefFor(upb_Arena* arena, const void* owner);
-void upb_Arena_DecRefFor(upb_Arena* arena, const void* owner);
+bool upb_Arena_IncRefFor(upb_Arena* a, const void* owner);
+void upb_Arena_DecRefFor(upb_Arena* a, const void* owner);
-void* _upb_Arena_SlowMalloc(upb_Arena* a, size_t size);
-size_t upb_Arena_SpaceAllocated(upb_Arena* arena);
-uint32_t upb_Arena_DebugRefCount(upb_Arena* arena);
+size_t upb_Arena_SpaceAllocated(upb_Arena* a);
+uint32_t upb_Arena_DebugRefCount(upb_Arena* a);
-UPB_INLINE size_t _upb_ArenaHas(upb_Arena* a) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- return (size_t)(h->end - h->ptr);
+UPB_API_INLINE upb_Arena* upb_Arena_New(void) {
+ return upb_Arena_Init(NULL, 0, &upb_alloc_global);
}
-UPB_API_INLINE void* upb_Arena_Malloc(upb_Arena* a, size_t size) {
- size = UPB_ALIGN_MALLOC(size);
- size_t span = size + UPB_ASAN_GUARD_SIZE;
- if (UPB_UNLIKELY(_upb_ArenaHas(a) < span)) {
- return _upb_Arena_SlowMalloc(a, size);
- }
+UPB_API_INLINE void* upb_Arena_Malloc(struct upb_Arena* a, size_t size) {
+ return UPB_PRIVATE(_upb_Arena_Malloc)(a, size);
+}
- // We have enough space to do a fast malloc.
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- void* ret = h->ptr;
- UPB_ASSERT(UPB_ALIGN_MALLOC((uintptr_t)ret) == (uintptr_t)ret);
- UPB_ASSERT(UPB_ALIGN_MALLOC(size) == size);
- UPB_UNPOISON_MEMORY_REGION(ret, size);
-
- h->ptr += span;
-
- return ret;
+UPB_API_INLINE void* upb_Arena_Realloc(upb_Arena* a, void* ptr, size_t oldsize,
+ size_t size) {
+ return UPB_PRIVATE(_upb_Arena_Realloc)(a, ptr, oldsize, size);
}
// Shrinks the last alloc from arena.
@@ -605,43 +802,7 @@
// this was not the last alloc.
UPB_API_INLINE void upb_Arena_ShrinkLast(upb_Arena* a, void* ptr,
size_t oldsize, size_t size) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- oldsize = UPB_ALIGN_MALLOC(oldsize);
- size = UPB_ALIGN_MALLOC(size);
- // Must be the last alloc.
- UPB_ASSERT((char*)ptr + oldsize == h->ptr - UPB_ASAN_GUARD_SIZE);
- UPB_ASSERT(size <= oldsize);
- h->ptr = (char*)ptr + size;
-}
-
-UPB_API_INLINE void* upb_Arena_Realloc(upb_Arena* a, void* ptr, size_t oldsize,
- size_t size) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- oldsize = UPB_ALIGN_MALLOC(oldsize);
- size = UPB_ALIGN_MALLOC(size);
- bool is_most_recent_alloc = (uintptr_t)ptr + oldsize == (uintptr_t)h->ptr;
-
- if (is_most_recent_alloc) {
- ptrdiff_t diff = size - oldsize;
- if ((ptrdiff_t)_upb_ArenaHas(a) >= diff) {
- h->ptr += diff;
- return ptr;
- }
- } else if (size <= oldsize) {
- return ptr;
- }
-
- void* ret = upb_Arena_Malloc(a, size);
-
- if (ret && oldsize > 0) {
- memcpy(ret, ptr, UPB_MIN(oldsize, size));
- }
-
- return ret;
-}
-
-UPB_API_INLINE upb_Arena* upb_Arena_New(void) {
- return upb_Arena_Init(NULL, 0, &upb_alloc_global);
+ UPB_PRIVATE(_upb_Arena_ShrinkLast)(a, ptr, oldsize, size);
}
#ifdef __cplusplus
@@ -651,6 +812,12 @@
#endif /* UPB_MEM_ARENA_H_ */
+#ifndef UPB_MESSAGE_ARRAY_H_
+#define UPB_MESSAGE_ARRAY_H_
+
+#include <stddef.h>
+
+
// Users should include array.h or map.h instead.
// IWYU pragma: private, include "upb/message/array.h"
@@ -659,768 +826,133 @@
#include <stdint.h>
-#ifndef UPB_BASE_STRING_VIEW_H_
-#define UPB_BASE_STRING_VIEW_H_
+
+#ifndef UPB_MESSAGE_INTERNAL_ARRAY_H_
+#define UPB_MESSAGE_INTERNAL_ARRAY_H_
#include <string.h>
+
// Must be last.
-#define UPB_STRINGVIEW_INIT(ptr, len) \
- { ptr, len }
+#define _UPB_ARRAY_MASK_IMM 0x4 // Frozen/immutable bit.
+#define _UPB_ARRAY_MASK_LG2 0x3 // Encoded elem size.
+#define _UPB_ARRAY_MASK_ALL (_UPB_ARRAY_MASK_IMM | _UPB_ARRAY_MASK_LG2)
-#define UPB_STRINGVIEW_FORMAT "%.*s"
-#define UPB_STRINGVIEW_ARGS(view) (int)(view).size, (view).data
+#ifdef __cplusplus
+extern "C" {
+#endif
// LINT.IfChange(struct_definition)
-typedef struct {
- const char* data;
- size_t size;
-} upb_StringView;
-// LINT.ThenChange(
-// GoogleInternalName0,
-// //depot/google3/third_party/upb/bits/golang/accessor.go:map_go_string
-// )
+// Our internal representation for repeated fields.
+struct upb_Array {
+ // This is a tagged pointer. Bits #0 and #1 encode the elem size as follows:
+ // 0 maps to elem size 1
+ // 1 maps to elem size 4
+ // 2 maps to elem size 8
+ // 3 maps to elem size 16
+ //
+ // Bit #2 contains the frozen/immutable flag (currently unimplemented).
+ uintptr_t data;
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_API_INLINE upb_StringView upb_StringView_FromDataAndSize(const char* data,
- size_t size) {
- upb_StringView ret;
- ret.data = data;
- ret.size = size;
- return ret;
-}
-
-UPB_INLINE upb_StringView upb_StringView_FromString(const char* data) {
- return upb_StringView_FromDataAndSize(data, strlen(data));
-}
-
-UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b) {
- return a.size == b.size && memcmp(a.data, b.data, a.size) == 0;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_BASE_STRING_VIEW_H_ */
-
-#ifndef UPB_MINI_TABLE_TYPES_H_
-#define UPB_MINI_TABLE_TYPES_H_
-
-#include <stdint.h>
-
-
-#ifndef UPB_MESSAGE_TYPES_H_
-#define UPB_MESSAGE_TYPES_H_
-
-// This typedef is in a leaf header to resolve a circular dependency between
-// messages and mini tables.
-typedef void upb_Message;
-
-#endif /* UPB_MESSAGE_TYPES_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// When a upb_Message* is stored in a message, array, or map, it is stored in a
-// tagged form. If the tag bit is set, the referenced upb_Message is of type
-// _kUpb_MiniTable_Empty (a sentinel message type with no fields) instead of
-// that field's true message type. This forms the basis of what we call
-// "dynamic tree shaking."
-//
-// See the documentation for kUpb_DecodeOption_ExperimentalAllowUnlinked for
-// more information.
-typedef uintptr_t upb_TaggedMessagePtr;
-
-// Internal-only because empty messages cannot be created by the user.
-UPB_INLINE upb_TaggedMessagePtr _upb_TaggedMessagePtr_Pack(upb_Message* ptr,
- bool empty) {
- UPB_ASSERT(((uintptr_t)ptr & 1) == 0);
- return (uintptr_t)ptr | (empty ? 1 : 0);
-}
-
-// Users who enable unlinked sub-messages must use this to test whether a
-// message is empty before accessing it. If a message is empty, it must be
-// first promoted using the interfaces in message/promote.h.
-UPB_INLINE bool upb_TaggedMessagePtr_IsEmpty(upb_TaggedMessagePtr ptr) {
- return ptr & 1;
-}
-
-UPB_INLINE upb_Message* _upb_TaggedMessagePtr_GetMessage(
- upb_TaggedMessagePtr ptr) {
- return (upb_Message*)(ptr & ~(uintptr_t)1);
-}
-
-UPB_INLINE upb_Message* upb_TaggedMessagePtr_GetNonEmptyMessage(
- upb_TaggedMessagePtr ptr) {
- UPB_ASSERT(!upb_TaggedMessagePtr_IsEmpty(ptr));
- return _upb_TaggedMessagePtr_GetMessage(ptr);
-}
-
-UPB_INLINE upb_Message* _upb_TaggedMessagePtr_GetEmptyMessage(
- upb_TaggedMessagePtr ptr) {
- UPB_ASSERT(upb_TaggedMessagePtr_IsEmpty(ptr));
- return _upb_TaggedMessagePtr_GetMessage(ptr);
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_TYPES_H_ */
-
-typedef union {
- bool bool_val;
- float float_val;
- double double_val;
- int32_t int32_val;
- int64_t int64_val;
- uint32_t uint32_val;
- uint64_t uint64_val;
- const struct upb_Array* array_val;
- const struct upb_Map* map_val;
- const upb_Message* msg_val;
- upb_StringView str_val;
-
- // EXPERIMENTAL: A tagged upb_Message*. Users must use this instead of
- // msg_val if unlinked sub-messages may possibly be in use. See the
- // documentation in kUpb_DecodeOption_ExperimentalAllowUnlinked for more
- // information.
- upb_TaggedMessagePtr tagged_msg_val;
-} upb_MessageValue;
-
-typedef union {
- struct upb_Array* array;
- struct upb_Map* map;
- upb_Message* msg;
-} upb_MutableMessageValue;
-
-#endif /* UPB_MESSAGE_VALUE_H_ */
-
-// Must be last.
-
-typedef struct upb_Array upb_Array;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Creates a new array on the given arena that holds elements of this type.
-UPB_API upb_Array* upb_Array_New(upb_Arena* a, upb_CType type);
-
-// Returns the number of elements in the array.
-UPB_API size_t upb_Array_Size(const upb_Array* arr);
-
-// Returns the given element, which must be within the array's current size.
-UPB_API upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i);
-
-// Sets the given element, which must be within the array's current size.
-UPB_API void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val);
-
-// Appends an element to the array. Returns false on allocation failure.
-UPB_API bool upb_Array_Append(upb_Array* array, upb_MessageValue val,
- upb_Arena* arena);
-
-// Moves elements within the array using memmove().
-// Like memmove(), the source and destination elements may be overlapping.
-UPB_API void upb_Array_Move(upb_Array* array, size_t dst_idx, size_t src_idx,
- size_t count);
-
-// Inserts one or more empty elements into the array.
-// Existing elements are shifted right.
-// The new elements have undefined state and must be set with `upb_Array_Set()`.
-// REQUIRES: `i <= upb_Array_Size(arr)`
-UPB_API bool upb_Array_Insert(upb_Array* array, size_t i, size_t count,
- upb_Arena* arena);
-
-// Deletes one or more elements from the array.
-// Existing elements are shifted left.
-// REQUIRES: `i + count <= upb_Array_Size(arr)`
-UPB_API void upb_Array_Delete(upb_Array* array, size_t i, size_t count);
-
-// Changes the size of a vector. New elements are initialized to NULL/0.
-// Returns false on allocation failure.
-UPB_API bool upb_Array_Resize(upb_Array* array, size_t size, upb_Arena* arena);
-
-// Returns pointer to array data.
-UPB_API const void* upb_Array_DataPtr(const upb_Array* arr);
-
-// Returns mutable pointer to array data.
-UPB_API void* upb_Array_MutableDataPtr(upb_Array* arr);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MESSAGE_ARRAY_H_ */
-
-#ifndef UPB_MESSAGE_INTERNAL_ACCESSORS_H_
-#define UPB_MESSAGE_INTERNAL_ACCESSORS_H_
-
-
-#ifndef UPB_MESSAGE_INTERNAL_EXTENSION_H_
-#define UPB_MESSAGE_INTERNAL_EXTENSION_H_
-
-
-// Public APIs for message operations that do not depend on the schema.
-//
-// MiniTable-based accessors live in accessors.h.
-
-#ifndef UPB_MESSAGE_MESSAGE_H_
-#define UPB_MESSAGE_MESSAGE_H_
-
-#include <stddef.h>
-
-
-#ifndef UPB_MINI_TABLE_MESSAGE_H_
-#define UPB_MINI_TABLE_MESSAGE_H_
-
-
-#ifndef UPB_MINI_TABLE_ENUM_H_
-#define UPB_MINI_TABLE_ENUM_H_
-
-
-#ifndef UPB_MINI_TABLE_INTERNAL_ENUM_H_
-#define UPB_MINI_TABLE_INTERNAL_ENUM_H_
-
-#include <stdint.h>
-
-// Must be last.
-
-struct upb_MiniTableEnum {
- uint32_t mask_limit; // Limit enum value that can be tested with mask.
- uint32_t value_count; // Number of values after the bitfield.
- uint32_t data[]; // Bitmask + enumerated values follow.
+ size_t UPB_ONLYBITS(size); // The number of elements in the array.
+ size_t UPB_PRIVATE(capacity); // Allocated storage. Measured in elements.
};
-typedef enum {
- _kUpb_FastEnumCheck_ValueIsInEnum = 0,
- _kUpb_FastEnumCheck_ValueIsNotInEnum = 1,
- _kUpb_FastEnumCheck_CannotCheckFast = 2,
-} _kUpb_FastEnumCheck_Status;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE _kUpb_FastEnumCheck_Status _upb_MiniTable_CheckEnumValueFast(
- const struct upb_MiniTableEnum* e, uint32_t val) {
- if (UPB_UNLIKELY(val >= 64)) return _kUpb_FastEnumCheck_CannotCheckFast;
- uint64_t mask = e->data[0] | ((uint64_t)e->data[1] << 32);
- return (mask & (1ULL << val)) ? _kUpb_FastEnumCheck_ValueIsInEnum
- : _kUpb_FastEnumCheck_ValueIsNotInEnum;
+UPB_INLINE void UPB_PRIVATE(_upb_Array_SetTaggedPtr)(struct upb_Array* array,
+ void* data, size_t lg2) {
+ UPB_ASSERT(lg2 != 1);
+ UPB_ASSERT(lg2 <= 4);
+ const size_t bits = lg2 - (lg2 != 0);
+ array->data = (uintptr_t)data | bits;
}
-UPB_INLINE bool _upb_MiniTable_CheckEnumValueSlow(
- const struct upb_MiniTableEnum* e, uint32_t val) {
- if (val < e->mask_limit) return e->data[val / 32] & (1ULL << (val % 32));
- // OPT: binary search long lists?
- const uint32_t* start = &e->data[e->mask_limit / 32];
- const uint32_t* limit = &e->data[(e->mask_limit / 32) + e->value_count];
- for (const uint32_t* p = start; p < limit; p++) {
- if (*p == val) return true;
- }
- return false;
+UPB_INLINE size_t
+UPB_PRIVATE(_upb_Array_ElemSizeLg2)(const struct upb_Array* array) {
+ const size_t bits = array->data & _UPB_ARRAY_MASK_LG2;
+ const size_t lg2 = bits + (bits != 0);
+ return lg2;
}
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_ENUM_H_ */
-
-// Must be last
-
-typedef struct upb_MiniTableEnum upb_MiniTableEnum;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Validates enum value against range defined by enum mini table.
-UPB_INLINE bool upb_MiniTableEnum_CheckValue(const struct upb_MiniTableEnum* e,
- uint32_t val) {
- _kUpb_FastEnumCheck_Status status = _upb_MiniTable_CheckEnumValueFast(e, val);
- if (UPB_UNLIKELY(status == _kUpb_FastEnumCheck_CannotCheckFast)) {
- return _upb_MiniTable_CheckEnumValueSlow(e, val);
- }
- return status == _kUpb_FastEnumCheck_ValueIsInEnum ? true : false;
+UPB_INLINE const void* _upb_array_constptr(const struct upb_Array* array) {
+ UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array); // Check assertions.
+ return (void*)(array->data & ~(uintptr_t)_UPB_ARRAY_MASK_ALL);
}
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_ENUM_H_ */
-
-#ifndef UPB_MINI_TABLE_FIELD_H_
-#define UPB_MINI_TABLE_FIELD_H_
-
-
-#ifndef UPB_MINI_TABLE_INTERNAL_FIELD_H_
-#define UPB_MINI_TABLE_INTERNAL_FIELD_H_
-
-#include <stdint.h>
-
-
-// Must be last.
-
-struct upb_MiniTableField {
- uint32_t number;
- uint16_t offset;
- int16_t presence; // If >0, hasbit_index. If <0, ~oneof_index
-
- // Indexes into `upb_MiniTable.subs`
- // Will be set to `kUpb_NoSub` if `descriptortype` != MESSAGE/GROUP/ENUM
- uint16_t UPB_PRIVATE(submsg_index);
-
- uint8_t UPB_PRIVATE(descriptortype);
-
- // upb_FieldMode | upb_LabelFlags | (upb_FieldRep << kUpb_FieldRep_Shift)
- uint8_t mode;
-};
-
-#define kUpb_NoSub ((uint16_t)-1)
-
-typedef enum {
- kUpb_FieldMode_Map = 0,
- kUpb_FieldMode_Array = 1,
- kUpb_FieldMode_Scalar = 2,
-} upb_FieldMode;
-
-// Mask to isolate the upb_FieldMode from field.mode.
-#define kUpb_FieldMode_Mask 3
-
-// Extra flags on the mode field.
-typedef enum {
- kUpb_LabelFlags_IsPacked = 4,
- kUpb_LabelFlags_IsExtension = 8,
- // Indicates that this descriptor type is an "alternate type":
- // - for Int32, this indicates that the actual type is Enum (but was
- // rewritten to Int32 because it is an open enum that requires no check).
- // - for Bytes, this indicates that the actual type is String (but does
- // not require any UTF-8 check).
- kUpb_LabelFlags_IsAlternate = 16,
-} upb_LabelFlags;
-
-// Note: we sort by this number when calculating layout order.
-typedef enum {
- kUpb_FieldRep_1Byte = 0,
- kUpb_FieldRep_4Byte = 1,
- kUpb_FieldRep_StringView = 2,
- kUpb_FieldRep_8Byte = 3,
-
- kUpb_FieldRep_NativePointer =
- UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte),
- kUpb_FieldRep_Max = kUpb_FieldRep_8Byte,
-} upb_FieldRep;
-
-#define kUpb_FieldRep_Shift 6
-
-UPB_INLINE upb_FieldRep
-_upb_MiniTableField_GetRep(const struct upb_MiniTableField* field) {
- return (upb_FieldRep)(field->mode >> kUpb_FieldRep_Shift);
+UPB_INLINE void* _upb_array_ptr(struct upb_Array* array) {
+ return (void*)_upb_array_constptr(array);
}
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE upb_FieldMode
-upb_FieldMode_Get(const struct upb_MiniTableField* field) {
- return (upb_FieldMode)(field->mode & 3);
+UPB_INLINE struct upb_Array* UPB_PRIVATE(_upb_Array_New)(upb_Arena* arena,
+ size_t init_capacity,
+ int elem_size_lg2) {
+ UPB_ASSERT(elem_size_lg2 != 1);
+ UPB_ASSERT(elem_size_lg2 <= 4);
+ const size_t array_size =
+ UPB_ALIGN_UP(sizeof(struct upb_Array), UPB_MALLOC_ALIGN);
+ const size_t bytes = array_size + (init_capacity << elem_size_lg2);
+ struct upb_Array* array = (struct upb_Array*)upb_Arena_Malloc(arena, bytes);
+ if (!array) return NULL;
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)
+ (array, UPB_PTR_AT(array, array_size, void), elem_size_lg2);
+ array->UPB_ONLYBITS(size) = 0;
+ array->UPB_PRIVATE(capacity) = init_capacity;
+ return array;
}
-UPB_INLINE void _upb_MiniTableField_CheckIsArray(
- const struct upb_MiniTableField* field) {
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_NativePointer);
- UPB_ASSUME(upb_FieldMode_Get(field) == kUpb_FieldMode_Array);
- UPB_ASSUME(field->presence == 0);
-}
-
-UPB_INLINE void _upb_MiniTableField_CheckIsMap(
- const struct upb_MiniTableField* field) {
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_NativePointer);
- UPB_ASSUME(upb_FieldMode_Get(field) == kUpb_FieldMode_Map);
- UPB_ASSUME(field->presence == 0);
-}
-
-UPB_INLINE bool upb_IsRepeatedOrMap(const struct upb_MiniTableField* field) {
- // This works because upb_FieldMode has no value 3.
- return !(field->mode & kUpb_FieldMode_Scalar);
-}
-
-UPB_INLINE bool upb_IsSubMessage(const struct upb_MiniTableField* field) {
- return field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
- field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_FIELD_H_ */
-
-#ifndef UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
-#define UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
-
-
-// Must be last.
-
-struct upb_Decoder;
-typedef const char* _upb_FieldParser(struct upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t data);
-typedef struct {
- uint64_t field_data;
- _upb_FieldParser* field_parser;
-} _upb_FastTable_Entry;
-
-typedef enum {
- kUpb_ExtMode_NonExtendable = 0, // Non-extendable message.
- kUpb_ExtMode_Extendable = 1, // Normal extendable message.
- kUpb_ExtMode_IsMessageSet = 2, // MessageSet message.
- kUpb_ExtMode_IsMessageSet_ITEM =
- 3, // MessageSet item (temporary only, see decode.c)
-
- // During table building we steal a bit to indicate that the message is a map
- // entry. *Only* used during table building!
- kUpb_ExtMode_IsMapEntry = 4,
-} upb_ExtMode;
-
-union upb_MiniTableSub;
-
-// upb_MiniTable represents the memory layout of a given upb_MessageDef.
-// The members are public so generated code can initialize them,
-// but users MUST NOT directly read or write any of its members.
-struct upb_MiniTable {
- const union upb_MiniTableSub* subs;
- const struct upb_MiniTableField* fields;
-
- // Must be aligned to sizeof(void*). Doesn't include internal members like
- // unknown fields, extension dict, pointer to msglayout, etc.
- uint16_t size;
-
- uint16_t field_count;
- uint8_t ext; // upb_ExtMode, declared as uint8_t so sizeof(ext) == 1
- uint8_t dense_below;
- uint8_t table_mask;
- uint8_t required_count; // Required fields have the lowest hasbits.
-
- // To statically initialize the tables of variable length, we need a flexible
- // array member, and we need to compile in gnu99 mode (constant initialization
- // of flexible array members is a GNU extension, not in C99 unfortunately.
- _upb_FastTable_Entry fasttable[];
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// A MiniTable for an empty message, used for unlinked sub-messages.
-extern const struct upb_MiniTable _kUpb_MiniTable_Empty;
-
-// Computes a bitmask in which the |l->required_count| lowest bits are set,
-// except that we skip the lowest bit (because upb never uses hasbit 0).
-//
-// Sample output:
-// requiredmask(1) => 0b10 (0x2)
-// requiredmask(5) => 0b111110 (0x3e)
-UPB_INLINE uint64_t upb_MiniTable_requiredmask(const struct upb_MiniTable* l) {
- int n = l->required_count;
- assert(0 < n && n <= 63);
- return ((1ULL << n) - 1) << 1;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_MESSAGE_H_ */
-#ifndef UPB_MINI_TABLE_INTERNAL_SUB_H_
-#define UPB_MINI_TABLE_INTERNAL_SUB_H_
-
-
-union upb_MiniTableSub {
- const struct upb_MiniTable* submsg;
- const struct upb_MiniTableEnum* subenum;
-};
-
-#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct upb_MiniTableField upb_MiniTableField;
-
-UPB_API_INLINE upb_FieldType
-upb_MiniTableField_Type(const upb_MiniTableField* field) {
- if (field->mode & kUpb_LabelFlags_IsAlternate) {
- if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Int32) {
- return kUpb_FieldType_Enum;
- } else if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bytes) {
- return kUpb_FieldType_String;
- } else {
- UPB_ASSERT(false);
- }
- }
- return (upb_FieldType)field->UPB_PRIVATE(descriptortype);
-}
-
-UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField* f) {
- switch (upb_MiniTableField_Type(f)) {
- case kUpb_FieldType_Double:
- return kUpb_CType_Double;
- case kUpb_FieldType_Float:
- return kUpb_CType_Float;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_SInt64:
- case kUpb_FieldType_SFixed64:
- return kUpb_CType_Int64;
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_SFixed32:
- case kUpb_FieldType_SInt32:
- return kUpb_CType_Int32;
- case kUpb_FieldType_UInt64:
- case kUpb_FieldType_Fixed64:
- return kUpb_CType_UInt64;
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Fixed32:
- return kUpb_CType_UInt32;
- case kUpb_FieldType_Enum:
- return kUpb_CType_Enum;
- case kUpb_FieldType_Bool:
- return kUpb_CType_Bool;
- case kUpb_FieldType_String:
- return kUpb_CType_String;
- case kUpb_FieldType_Bytes:
- return kUpb_CType_Bytes;
- case kUpb_FieldType_Group:
- case kUpb_FieldType_Message:
- return kUpb_CType_Message;
- }
- UPB_UNREACHABLE();
-}
-
-UPB_API_INLINE bool upb_MiniTableField_IsExtension(
- const upb_MiniTableField* field) {
- return field->mode & kUpb_LabelFlags_IsExtension;
-}
-
-UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
- const upb_MiniTableField* field) {
- return field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum;
-}
-
-UPB_API_INLINE bool upb_MiniTableField_HasPresence(
- const upb_MiniTableField* field) {
- if (upb_MiniTableField_IsExtension(field)) {
- return !upb_IsRepeatedOrMap(field);
- } else {
- return field->presence != 0;
- }
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_FIELD_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct upb_MiniTable upb_MiniTable;
-
-UPB_API const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
- const upb_MiniTable* table, uint32_t number);
-
-UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_GetFieldByIndex(
- const upb_MiniTable* t, uint32_t index) {
- return &t->fields[index];
-}
-
-// Returns the MiniTable for this message field. If the field is unlinked,
-// returns NULL.
-UPB_API_INLINE const upb_MiniTable* upb_MiniTable_GetSubMessageTable(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- const upb_MiniTable* ret =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSUME(ret);
- return ret == &_kUpb_MiniTable_Empty ? NULL : ret;
-}
-
-// Returns the MiniTableEnum for this enum field. If the field is unlinked,
-// returns NULL.
-UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTable_GetSubEnumTable(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- return mini_table->subs[field->UPB_PRIVATE(submsg_index)].subenum;
-}
-
-// Returns true if this MiniTable field is linked to a MiniTable for the
-// sub-message.
-UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- return upb_MiniTable_GetSubMessageTable(mini_table, field) != NULL;
-}
-
-// If this field is in a oneof, returns the first field in the oneof.
-//
-// Otherwise returns NULL.
-//
-// Usage:
-// const upb_MiniTableField* field = upb_MiniTable_GetOneof(m, f);
-// do {
-// ..
-// } while (upb_MiniTable_NextOneofField(m, &field);
-//
-const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
- const upb_MiniTableField* f);
-
-// Iterates to the next field in the oneof. If this is the last field in the
-// oneof, returns false. The ordering of fields in the oneof is not
-// guaranteed.
-// REQUIRES: |f| is the field initialized by upb_MiniTable_GetOneof and updated
-// by prior upb_MiniTable_NextOneofField calls.
-bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
- const upb_MiniTableField** f);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_MESSAGE_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Creates a new message with the given mini_table on the given arena.
-UPB_API upb_Message* upb_Message_New(const upb_MiniTable* mini_table,
+// Resizes the capacity of the array to be at least min_size.
+bool UPB_PRIVATE(_upb_Array_Realloc)(struct upb_Array* array, size_t min_size,
upb_Arena* arena);
-// Adds unknown data (serialized protobuf data) to the given message.
-// The data is copied into the message instance.
-void upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena);
+UPB_INLINE bool UPB_PRIVATE(_upb_Array_Reserve)(struct upb_Array* array,
+ size_t size, upb_Arena* arena) {
+ if (array->UPB_PRIVATE(capacity) < size)
+ return UPB_PRIVATE(_upb_Array_Realloc)(array, size, arena);
+ return true;
+}
-// Returns a reference to the message's unknown data.
-const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len);
+// Resize without initializing new elements.
+UPB_INLINE bool _upb_Array_ResizeUninitialized(struct upb_Array* array,
+ size_t size, upb_Arena* arena) {
+ UPB_ASSERT(size <= array->UPB_ONLYBITS(size) ||
+ arena); // Allow NULL arena when shrinking.
+ if (!UPB_PRIVATE(_upb_Array_Reserve)(array, size, arena)) return false;
+ array->UPB_ONLYBITS(size) = size;
+ return true;
+}
-// Removes partial unknown data from message.
-void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len);
+// This function is intended for situations where elem_size is compile-time
+// constant or a known expression of the form (1 << lg2), so that the expression
+// i*elem_size does not result in an actual multiplication.
+UPB_INLINE void UPB_PRIVATE(_upb_Array_Set)(struct upb_Array* array, size_t i,
+ const void* data,
+ size_t elem_size) {
+ UPB_ASSERT(i < array->UPB_ONLYBITS(size));
+ UPB_ASSERT(elem_size == 1U << UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array));
+ char* arr_data = (char*)_upb_array_ptr(array);
+ memcpy(arr_data + (i * elem_size), data, elem_size);
+}
-// Returns the number of extensions present in this message.
-size_t upb_Message_ExtensionCount(const upb_Message* msg);
+// LINT.ThenChange(
+// GoogleInternalName1,
+//)
#ifdef __cplusplus
} /* extern "C" */
#endif
-
-#endif /* UPB_MESSAGE_MESSAGE_H_ */
-
-#ifndef UPB_MINI_TABLE_EXTENSION_H_
-#define UPB_MINI_TABLE_EXTENSION_H_
+#undef _UPB_ARRAY_MASK_IMM
+#undef _UPB_ARRAY_MASK_LG2
+#undef _UPB_ARRAY_MASK_ALL
-#ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
-#define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+#endif /* UPB_MESSAGE_INTERNAL_ARRAY_H_ */
+#ifndef UPB_MESSAGE_INTERNAL_MAP_H_
+#define UPB_MESSAGE_INTERNAL_MAP_H_
-// Must be last.
-
-struct upb_MiniTableExtension {
- // Do not move this field. We need to be able to alias pointers.
- struct upb_MiniTableField field;
-
- const struct upb_MiniTable* extendee;
- union upb_MiniTableSub sub; // NULL unless submessage or proto2 enum
-};
-
-
-#endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */
-
-typedef struct upb_MiniTableExtension upb_MiniTableExtension;
-
-#endif /* UPB_MINI_TABLE_EXTENSION_H_ */
-
-// Must be last.
-
-// The internal representation of an extension is self-describing: it contains
-// enough information that we can serialize it to binary format without needing
-// to look it up in a upb_ExtensionRegistry.
-//
-// This representation allocates 16 bytes to data on 64-bit platforms.
-// This is rather wasteful for scalars (in the extreme case of bool,
-// it wastes 15 bytes). We accept this because we expect messages to be
-// the most common extension type.
-typedef struct {
- const upb_MiniTableExtension* ext;
- union {
- upb_StringView str;
- void* ptr;
- char scalar_data[8];
- } data;
-} upb_Message_Extension;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Adds the given extension data to the given message.
-// |ext| is copied into the message instance.
-// This logically replaces any previously-added extension with this number.
-upb_Message_Extension* _upb_Message_GetOrCreateExtension(
- upb_Message* msg, const upb_MiniTableExtension* ext, upb_Arena* arena);
-
-// Returns an array of extensions for this message.
-// Note: the array is ordered in reverse relative to the order of creation.
-const upb_Message_Extension* _upb_Message_Getexts(const upb_Message* msg,
- size_t* count);
-
-// Returns an extension for the given field number, or NULL if no extension
-// exists for this field number.
-const upb_Message_Extension* _upb_Message_Getext(
- const upb_Message* msg, const upb_MiniTableExtension* ext);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MESSAGE_INTERNAL_EXTENSION_H_ */
-
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_H_
+#include <stddef.h>
+#include <string.h>
#ifndef UPB_HASH_STR_TABLE_H_
@@ -1720,6 +1252,1572 @@
#endif /* UPB_HASH_STR_TABLE_H_ */
+// Must be last.
+
+typedef enum {
+ kUpb_MapInsertStatus_Inserted = 0,
+ kUpb_MapInsertStatus_Replaced = 1,
+ kUpb_MapInsertStatus_OutOfMemory = 2,
+} upb_MapInsertStatus;
+
+// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
+
+struct upb_Map {
+ // Size of key and val, based on the map type.
+ // Strings are represented as '0' because they must be handled specially.
+ char key_size;
+ char val_size;
+
+ upb_strtable table;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Converting between internal table representation and user values.
+//
+// _upb_map_tokey() and _upb_map_fromkey() are inverses.
+// _upb_map_tovalue() and _upb_map_fromvalue() are inverses.
+//
+// These functions account for the fact that strings are treated differently
+// from other types when stored in a map.
+
+UPB_INLINE upb_StringView _upb_map_tokey(const void* key, size_t size) {
+ if (size == UPB_MAPTYPE_STRING) {
+ return *(upb_StringView*)key;
+ } else {
+ return upb_StringView_FromDataAndSize((const char*)key, size);
+ }
+}
+
+UPB_INLINE void _upb_map_fromkey(upb_StringView key, void* out, size_t size) {
+ if (size == UPB_MAPTYPE_STRING) {
+ memcpy(out, &key, sizeof(key));
+ } else {
+ memcpy(out, key.data, size);
+ }
+}
+
+UPB_INLINE bool _upb_map_tovalue(const void* val, size_t size,
+ upb_value* msgval, upb_Arena* a) {
+ if (size == UPB_MAPTYPE_STRING) {
+ upb_StringView* strp = (upb_StringView*)upb_Arena_Malloc(a, sizeof(*strp));
+ if (!strp) return false;
+ *strp = *(upb_StringView*)val;
+ *msgval = upb_value_ptr(strp);
+ } else {
+ memcpy(msgval, val, size);
+ }
+ return true;
+}
+
+UPB_INLINE void _upb_map_fromvalue(upb_value val, void* out, size_t size) {
+ if (size == UPB_MAPTYPE_STRING) {
+ const upb_StringView* strp = (const upb_StringView*)upb_value_getptr(val);
+ memcpy(out, strp, sizeof(upb_StringView));
+ } else {
+ memcpy(out, &val, size);
+ }
+}
+
+UPB_INLINE void* _upb_map_next(const struct upb_Map* map, size_t* iter) {
+ upb_strtable_iter it;
+ it.t = &map->table;
+ it.index = *iter;
+ upb_strtable_next(&it);
+ *iter = it.index;
+ if (upb_strtable_done(&it)) return NULL;
+ return (void*)str_tabent(&it);
+}
+
+UPB_INLINE void _upb_Map_Clear(struct upb_Map* map) {
+ upb_strtable_clear(&map->table);
+}
+
+UPB_INLINE bool _upb_Map_Delete(struct upb_Map* map, const void* key,
+ size_t key_size, upb_value* val) {
+ upb_StringView k = _upb_map_tokey(key, key_size);
+ return upb_strtable_remove2(&map->table, k.data, k.size, val);
+}
+
+UPB_INLINE bool _upb_Map_Get(const struct upb_Map* map, const void* key,
+ size_t key_size, void* val, size_t val_size) {
+ upb_value tabval;
+ upb_StringView k = _upb_map_tokey(key, key_size);
+ bool ret = upb_strtable_lookup2(&map->table, k.data, k.size, &tabval);
+ if (ret && val) {
+ _upb_map_fromvalue(tabval, val, val_size);
+ }
+ return ret;
+}
+
+UPB_INLINE upb_MapInsertStatus _upb_Map_Insert(struct upb_Map* map,
+ const void* key, size_t key_size,
+ void* val, size_t val_size,
+ upb_Arena* a) {
+ upb_StringView strkey = _upb_map_tokey(key, key_size);
+ upb_value tabval = {0};
+ if (!_upb_map_tovalue(val, val_size, &tabval, a)) {
+ return kUpb_MapInsertStatus_OutOfMemory;
+ }
+
+ // TODO: add overwrite operation to minimize number of lookups.
+ bool removed =
+ upb_strtable_remove2(&map->table, strkey.data, strkey.size, NULL);
+ if (!upb_strtable_insert(&map->table, strkey.data, strkey.size, tabval, a)) {
+ return kUpb_MapInsertStatus_OutOfMemory;
+ }
+ return removed ? kUpb_MapInsertStatus_Replaced
+ : kUpb_MapInsertStatus_Inserted;
+}
+
+UPB_INLINE size_t _upb_Map_Size(const struct upb_Map* map) {
+ return map->table.t.count;
+}
+
+// Strings/bytes are special-cased in maps.
+extern char _upb_Map_CTypeSizeTable[12];
+
+UPB_INLINE size_t _upb_Map_CTypeSize(upb_CType ctype) {
+ return _upb_Map_CTypeSizeTable[ctype];
+}
+
+// Creates a new map on the given arena with this key/value type.
+struct upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_INTERNAL_MAP_H_ */
+
+/*
+** Our memory representation for parsing tables and messages themselves.
+** Functions in this file are used by generated code and possibly reflection.
+**
+** The definitions in this file are internal to upb.
+**/
+
+#ifndef UPB_MESSAGE_INTERNAL_MESSAGE_H_
+#define UPB_MESSAGE_INTERNAL_MESSAGE_H_
+
+#include <stdlib.h>
+#include <string.h>
+
+
+#ifndef UPB_MESSAGE_INTERNAL_EXTENSION_H_
+#define UPB_MESSAGE_INTERNAL_EXTENSION_H_
+
+
+#ifndef UPB_MINI_TABLE_EXTENSION_H_
+#define UPB_MINI_TABLE_EXTENSION_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_FIELD_H_
+#define UPB_MINI_TABLE_FIELD_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_FIELD_H_
+#define UPB_MINI_TABLE_INTERNAL_FIELD_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_
+#define UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Return the log2 of the storage size in bytes for a upb_CType
+UPB_INLINE int UPB_PRIVATE(_upb_CType_SizeLg2)(upb_CType c_type) {
+ static const int8_t size[] = {
+ 0, // kUpb_CType_Bool
+ 2, // kUpb_CType_Float
+ 2, // kUpb_CType_Int32
+ 2, // kUpb_CType_UInt32
+ 2, // kUpb_CType_Enum
+ UPB_SIZE(2, 3), // kUpb_CType_Message
+ 3, // kUpb_CType_Double
+ 3, // kUpb_CType_Int64
+ 3, // kUpb_CType_UInt64
+ UPB_SIZE(3, 4), // kUpb_CType_String
+ UPB_SIZE(3, 4), // kUpb_CType_Bytes
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return size[c_type - 1];
+}
+
+// Return the log2 of the storage size in bytes for a upb_FieldType
+UPB_INLINE int UPB_PRIVATE(_upb_FieldType_SizeLg2)(upb_FieldType field_type) {
+ static const int8_t size[] = {
+ 3, // kUpb_FieldType_Double
+ 2, // kUpb_FieldType_Float
+ 3, // kUpb_FieldType_Int64
+ 3, // kUpb_FieldType_UInt64
+ 2, // kUpb_FieldType_Int32
+ 3, // kUpb_FieldType_Fixed64
+ 2, // kUpb_FieldType_Fixed32
+ 0, // kUpb_FieldType_Bool
+ UPB_SIZE(3, 4), // kUpb_FieldType_String
+ UPB_SIZE(2, 3), // kUpb_FieldType_Group
+ UPB_SIZE(2, 3), // kUpb_FieldType_Message
+ UPB_SIZE(3, 4), // kUpb_FieldType_Bytes
+ 2, // kUpb_FieldType_UInt32
+ 2, // kUpb_FieldType_Enum
+ 2, // kUpb_FieldType_SFixed32
+ 3, // kUpb_FieldType_SFixed64
+ 2, // kUpb_FieldType_SInt32
+ 3, // kUpb_FieldType_SInt64
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return size[field_type - 1];
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_ */
+
+// Must be last.
+
+// LINT.IfChange(struct_definition)
+struct upb_MiniTableField {
+ uint32_t UPB_ONLYBITS(number);
+ uint16_t UPB_ONLYBITS(offset);
+ int16_t presence; // If >0, hasbit_index. If <0, ~oneof_index
+
+ // Indexes into `upb_MiniTable.subs`
+ // Will be set to `kUpb_NoSub` if `descriptortype` != MESSAGE/GROUP/ENUM
+ uint16_t UPB_PRIVATE(submsg_index);
+
+ uint8_t UPB_PRIVATE(descriptortype);
+
+ // upb_FieldMode | upb_LabelFlags | (upb_FieldRep << kUpb_FieldRep_Shift)
+ uint8_t UPB_ONLYBITS(mode);
+};
+
+#define kUpb_NoSub ((uint16_t)-1)
+
+typedef enum {
+ kUpb_FieldMode_Map = 0,
+ kUpb_FieldMode_Array = 1,
+ kUpb_FieldMode_Scalar = 2,
+} upb_FieldMode;
+
+// Mask to isolate the upb_FieldMode from field.mode.
+#define kUpb_FieldMode_Mask 3
+
+// Extra flags on the mode field.
+typedef enum {
+ kUpb_LabelFlags_IsPacked = 4,
+ kUpb_LabelFlags_IsExtension = 8,
+ // Indicates that this descriptor type is an "alternate type":
+ // - for Int32, this indicates that the actual type is Enum (but was
+ // rewritten to Int32 because it is an open enum that requires no check).
+ // - for Bytes, this indicates that the actual type is String (but does
+ // not require any UTF-8 check).
+ kUpb_LabelFlags_IsAlternate = 16,
+} upb_LabelFlags;
+
+// Note: we sort by this number when calculating layout order.
+typedef enum {
+ kUpb_FieldRep_1Byte = 0,
+ kUpb_FieldRep_4Byte = 1,
+ kUpb_FieldRep_StringView = 2,
+ kUpb_FieldRep_8Byte = 3,
+
+ kUpb_FieldRep_NativePointer =
+ UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte),
+ kUpb_FieldRep_Max = kUpb_FieldRep_8Byte,
+} upb_FieldRep;
+
+#define kUpb_FieldRep_Shift 6
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE upb_FieldMode
+UPB_PRIVATE(_upb_MiniTableField_Mode)(const struct upb_MiniTableField* f) {
+ return (upb_FieldMode)(f->UPB_ONLYBITS(mode) & kUpb_FieldMode_Mask);
+}
+
+UPB_INLINE upb_FieldRep
+UPB_PRIVATE(_upb_MiniTableField_GetRep)(const struct upb_MiniTableField* f) {
+ return (upb_FieldRep)(f->UPB_ONLYBITS(mode) >> kUpb_FieldRep_Shift);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsArray)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Array;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsMap)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Map;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsScalar)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Scalar;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsAlternate)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsAlternate) != 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsExtension)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsExtension) != 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsPacked)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsPacked) != 0;
+}
+
+UPB_INLINE upb_FieldType
+UPB_PRIVATE(_upb_MiniTableField_Type)(const struct upb_MiniTableField* f) {
+ const upb_FieldType type = (upb_FieldType)f->UPB_PRIVATE(descriptortype);
+ if (UPB_PRIVATE(_upb_MiniTableField_IsAlternate)(f)) {
+ if (type == kUpb_FieldType_Int32) return kUpb_FieldType_Enum;
+ if (type == kUpb_FieldType_Bytes) return kUpb_FieldType_String;
+ UPB_ASSERT(false);
+ }
+ return type;
+}
+
+UPB_INLINE upb_CType
+UPB_PRIVATE(_upb_MiniTableField_CType)(const struct upb_MiniTableField* f) {
+ return upb_FieldType_CType(UPB_PRIVATE(_upb_MiniTableField_Type)(f));
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(
+ const struct upb_MiniTableField* f) {
+ return f->presence > 0;
+}
+
+UPB_INLINE char UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f));
+ const size_t index = f->presence;
+ return 1 << (index % 8);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f));
+ const size_t index = f->presence;
+ return index / 8;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsClosedEnum)(
+ const struct upb_MiniTableField* f) {
+ return f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(
+ const struct upb_MiniTableField* f) {
+ return f->presence < 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsSubMessage)(
+ const struct upb_MiniTableField* f) {
+ return f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
+ f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_HasPresence)(
+ const struct upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_IsExtension)(f)) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsScalar)(f);
+ } else {
+ return f->presence != 0;
+ }
+}
+
+UPB_INLINE uint32_t
+UPB_PRIVATE(_upb_MiniTableField_Number)(const struct upb_MiniTableField* f) {
+ return f->UPB_ONLYBITS(number);
+}
+
+UPB_INLINE uint16_t
+UPB_PRIVATE(_upb_MiniTableField_Offset)(const struct upb_MiniTableField* f) {
+ return f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(f));
+ return ~(ptrdiff_t)f->presence;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(f) ==
+ kUpb_FieldRep_NativePointer);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_IsArray)(f));
+ UPB_ASSUME(f->presence == 0);
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(f) ==
+ kUpb_FieldRep_NativePointer);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_IsMap)(f));
+ UPB_ASSUME(f->presence == 0);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_ElemSizeLg2)(
+ const struct upb_MiniTableField* f) {
+ const upb_FieldType field_type = UPB_PRIVATE(_upb_MiniTableField_Type)(f);
+ return UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
+}
+
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/mini_table_field.ts)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_FIELD_H_ */
+
+// Must be last.
+
+typedef struct upb_MiniTableField upb_MiniTableField;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_CType)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_HasPresence(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_HasPresence)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsArray(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsArray)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsClosedEnum)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsExtension(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsExtension)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsInOneof(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsMap(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsMap)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsPacked(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsPacked)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsScalar(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsScalar)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsSubMessage(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsSubMessage)(f);
+}
+
+UPB_API_INLINE uint32_t upb_MiniTableField_Number(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Number)(f);
+}
+
+UPB_API_INLINE upb_FieldType
+upb_MiniTableField_Type(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Type)(f);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_FIELD_H_ */
+
+#ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+#define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_SUB_H_
+#define UPB_MINI_TABLE_INTERNAL_SUB_H_
+
+// Must be last.
+
+union upb_MiniTableSub {
+ const struct upb_MiniTable* UPB_PRIVATE(submsg);
+ const struct upb_MiniTableEnum* UPB_PRIVATE(subenum);
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE union upb_MiniTableSub UPB_PRIVATE(_upb_MiniTableSub_FromEnum)(
+ const struct upb_MiniTableEnum* subenum) {
+ union upb_MiniTableSub out;
+ out.UPB_PRIVATE(subenum) = subenum;
+ return out;
+}
+
+UPB_INLINE union upb_MiniTableSub UPB_PRIVATE(_upb_MiniTableSub_FromMessage)(
+ const struct upb_MiniTable* submsg) {
+ union upb_MiniTableSub out;
+ out.UPB_PRIVATE(submsg) = submsg;
+ return out;
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableSub_Enum)(
+ const union upb_MiniTableSub sub) {
+ return sub.UPB_PRIVATE(subenum);
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableSub_Message)(
+ const union upb_MiniTableSub sub) {
+ return sub.UPB_PRIVATE(submsg);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
+
+// Must be last.
+
+struct upb_MiniTableExtension {
+ // Do not move this field. We need to be able to alias pointers.
+ struct upb_MiniTableField UPB_PRIVATE(field);
+
+ const struct upb_MiniTable* UPB_PRIVATE(extendee);
+ union upb_MiniTableSub UPB_PRIVATE(sub); // NULL unless submsg or proto2 enum
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTableExtension_AsField)(const struct upb_MiniTableExtension* e) {
+ return (const struct upb_MiniTableField*)&e->UPB_PRIVATE(field);
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_MiniTableExtension_Number)(
+ const struct upb_MiniTableExtension* e) {
+ return e->UPB_PRIVATE(field).UPB_ONLYBITS(number);
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+ _upb_MiniTableExtension_GetSubMessage)(
+ const struct upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Message)(e->UPB_PRIVATE(sub));
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(
+ struct upb_MiniTableExtension* e, const struct upb_MiniTable* m) {
+ e->UPB_PRIVATE(sub).UPB_PRIVATE(submsg) = m;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */
+
+#ifndef UPB_MINI_TABLE_MESSAGE_H_
+#define UPB_MINI_TABLE_MESSAGE_H_
+
+
+#ifndef UPB_MINI_TABLE_ENUM_H_
+#define UPB_MINI_TABLE_ENUM_H_
+
+#include <stdint.h>
+
+
+#ifndef UPB_MINI_TABLE_INTERNAL_ENUM_H_
+#define UPB_MINI_TABLE_INTERNAL_ENUM_H_
+
+#include <stdint.h>
+
+// Must be last.
+
+struct upb_MiniTableEnum {
+ uint32_t UPB_PRIVATE(mask_limit); // Highest that can be tested with mask.
+ uint32_t UPB_PRIVATE(value_count); // Number of values after the bitfield.
+ uint32_t UPB_PRIVATE(data)[]; // Bitmask + enumerated values follow.
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)(
+ const struct upb_MiniTableEnum* e, uint32_t val) {
+ if (UPB_LIKELY(val < 64)) {
+ const uint64_t mask =
+ e->UPB_PRIVATE(data)[0] | ((uint64_t)e->UPB_PRIVATE(data)[1] << 32);
+ const uint64_t bit = 1ULL << val;
+ return (mask & bit) != 0;
+ }
+ if (UPB_LIKELY(val < e->UPB_PRIVATE(mask_limit))) {
+ const uint32_t mask = e->UPB_PRIVATE(data)[val / 32];
+ const uint32_t bit = 1ULL << (val % 32);
+ return (mask & bit) != 0;
+ }
+
+ // OPT: binary search long lists?
+ const uint32_t* start =
+ &e->UPB_PRIVATE(data)[e->UPB_PRIVATE(mask_limit) / 32];
+ const uint32_t* limit = &e->UPB_PRIVATE(
+ data)[e->UPB_PRIVATE(mask_limit) / 32 + e->UPB_PRIVATE(value_count)];
+ for (const uint32_t* p = start; p < limit; p++) {
+ if (*p == val) return true;
+ }
+ return false;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_ENUM_H_ */
+
+// Must be last
+
+typedef struct upb_MiniTableEnum upb_MiniTableEnum;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Validates enum value against range defined by enum mini table.
+UPB_INLINE bool upb_MiniTableEnum_CheckValue(const upb_MiniTableEnum* e,
+ uint32_t val) {
+ return UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)(e, val);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_ENUM_H_ */
+
+#ifndef UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
+#define UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
+
+#include <stdint.h>
+
+
+// Must be last.
+
+struct upb_Decoder;
+struct upb_Message;
+typedef const char* _upb_FieldParser(struct upb_Decoder* d, const char* ptr,
+ struct upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t data);
+typedef struct {
+ uint64_t field_data;
+ _upb_FieldParser* field_parser;
+} _upb_FastTable_Entry;
+
+typedef enum {
+ kUpb_ExtMode_NonExtendable = 0, // Non-extendable message.
+ kUpb_ExtMode_Extendable = 1, // Normal extendable message.
+ kUpb_ExtMode_IsMessageSet = 2, // MessageSet message.
+ kUpb_ExtMode_IsMessageSet_ITEM =
+ 3, // MessageSet item (temporary only, see decode.c)
+
+ // During table building we steal a bit to indicate that the message is a map
+ // entry. *Only* used during table building!
+ kUpb_ExtMode_IsMapEntry = 4,
+} upb_ExtMode;
+
+// upb_MiniTable represents the memory layout of a given upb_MessageDef.
+// The members are public so generated code can initialize them,
+// but users MUST NOT directly read or write any of its members.
+
+// LINT.IfChange(minitable_struct_definition)
+struct upb_MiniTable {
+ const union upb_MiniTableSub* UPB_PRIVATE(subs);
+ const struct upb_MiniTableField* UPB_ONLYBITS(fields);
+
+ // Must be aligned to sizeof(void*). Doesn't include internal members like
+ // unknown fields, extension dict, pointer to msglayout, etc.
+ uint16_t UPB_PRIVATE(size);
+
+ uint16_t UPB_ONLYBITS(field_count);
+
+ uint8_t UPB_PRIVATE(ext); // upb_ExtMode, uint8_t here so sizeof(ext) == 1
+ uint8_t UPB_PRIVATE(dense_below);
+ uint8_t UPB_PRIVATE(table_mask);
+ uint8_t UPB_PRIVATE(required_count); // Required fields have the low hasbits.
+
+ // To statically initialize the tables of variable length, we need a flexible
+ // array member, and we need to compile in gnu99 mode (constant initialization
+ // of flexible array members is a GNU extension, not in C99 unfortunately.
+ _upb_FastTable_Entry UPB_PRIVATE(fasttable)[];
+};
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/mini_table.ts)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTable_Empty)(void) {
+ extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty);
+
+ return &UPB_PRIVATE(_kUpb_MiniTable_Empty);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTable_FieldCount)(
+ const struct upb_MiniTable* m) {
+ return m->UPB_ONLYBITS(field_count);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_IsEmpty)(
+ const struct upb_MiniTable* m) {
+ extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty);
+
+ return m == &UPB_PRIVATE(_kUpb_MiniTable_Empty);
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTable_GetFieldByIndex)(const struct upb_MiniTable* m, uint32_t i) {
+ return &m->UPB_ONLYBITS(fields)[i];
+}
+
+UPB_INLINE const union upb_MiniTableSub* UPB_PRIVATE(
+ _upb_MiniTable_GetSubByIndex)(const struct upb_MiniTable* m, uint32_t i) {
+ return &m->UPB_PRIVATE(subs)[i];
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+ _upb_MiniTable_GetSubMessageTable)(const struct upb_MiniTable* m,
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_CType)(f) == kUpb_CType_Message);
+ const struct upb_MiniTable* ret = UPB_PRIVATE(_upb_MiniTableSub_Message)(
+ m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSUME(ret);
+ return UPB_PRIVATE(_upb_MiniTable_IsEmpty)(ret) ? NULL : ret;
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(
+ _upb_MiniTable_GetSubEnumTable)(const struct upb_MiniTable* m,
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_CType)(f) == kUpb_CType_Enum);
+ return UPB_PRIVATE(_upb_MiniTableSub_Enum)(
+ m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(_upb_MiniTable_MapKey)(
+ const struct upb_MiniTable* m) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
+ const struct upb_MiniTableField* f =
+ UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 0);
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 1);
+ return f;
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTable_MapValue)(const struct upb_MiniTable* m) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
+ const struct upb_MiniTableField* f =
+ UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 1);
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 2);
+ return f;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(
+ const struct upb_MiniTable* m, const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f) != NULL;
+}
+
+// Computes a bitmask in which the |m->required_count| lowest bits are set,
+// except that we skip the lowest bit (because upb never uses hasbit 0).
+//
+// Sample output:
+// RequiredMask(1) => 0b10 (0x2)
+// RequiredMask(5) => 0b111110 (0x3e)
+UPB_INLINE uint64_t
+UPB_PRIVATE(_upb_MiniTable_RequiredMask)(const struct upb_MiniTable* m) {
+ int n = m->UPB_PRIVATE(required_count);
+ UPB_ASSERT(0 < n && n <= 63);
+ return ((1ULL << n) - 1) << 1;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_MESSAGE_H_ */
+
+// Must be last.
+
+typedef struct upb_MiniTable upb_MiniTable;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
+ const upb_MiniTable* m, uint32_t number);
+
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_GetFieldByIndex(
+ const upb_MiniTable* m, uint32_t index) {
+ return UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, index);
+}
+
+UPB_API_INLINE int upb_MiniTable_FieldCount(const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_FieldCount)(m);
+}
+
+// Returns the MiniTable for a message field, NULL if the field is unlinked.
+UPB_API_INLINE const upb_MiniTable* upb_MiniTable_GetSubMessageTable(
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f);
+}
+
+// Returns the MiniTableEnum for a message field, NULL if the field is unlinked.
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTable_GetSubEnumTable(
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubEnumTable)(m, f);
+}
+
+// Returns the MiniTableField for the key of a map.
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapKey(
+ const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_MapKey)(m);
+}
+
+// Returns the MiniTableField for the value of a map.
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapValue(
+ const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_MapValue)(m);
+}
+
+// Returns true if this MiniTable field is linked to a MiniTable for the
+// sub-message.
+UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(m, f);
+}
+
+// If this field is in a oneof, returns the first field in the oneof.
+//
+// Otherwise returns NULL.
+//
+// Usage:
+// const upb_MiniTableField* field = upb_MiniTable_GetOneof(m, f);
+// do {
+// ..
+// } while (upb_MiniTable_NextOneofField(m, &field);
+//
+const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
+ const upb_MiniTableField* f);
+
+// Iterates to the next field in the oneof. If this is the last field in the
+// oneof, returns false. The ordering of fields in the oneof is not
+// guaranteed.
+// REQUIRES: |f| is the field initialized by upb_MiniTable_GetOneof and updated
+// by prior upb_MiniTable_NextOneofField calls.
+bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
+ const upb_MiniTableField** f);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_MESSAGE_H_ */
+
+// Must be last.
+
+typedef struct upb_MiniTableExtension upb_MiniTableExtension;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTableExtension_AsField(
+ const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_AsField)(e);
+}
+
+UPB_API_INLINE uint32_t
+upb_MiniTableExtension_Number(const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_Number)(e);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableExtension_GetSubMessage(
+ const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_GetSubMessage)(e);
+}
+
+UPB_API_INLINE void upb_MiniTableExtension_SetSubMessage(
+ upb_MiniTableExtension* e, const upb_MiniTable* m) {
+ UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(e, m);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_EXTENSION_H_ */
+
+// Must be last.
+
+// The internal representation of an extension is self-describing: it contains
+// enough information that we can serialize it to binary format without needing
+// to look it up in a upb_ExtensionRegistry.
+//
+// This representation allocates 16 bytes to data on 64-bit platforms.
+// This is rather wasteful for scalars (in the extreme case of bool,
+// it wastes 15 bytes). We accept this because we expect messages to be
+// the most common extension type.
+struct upb_Extension {
+ const upb_MiniTableExtension* ext;
+ union {
+ upb_StringView str;
+ void* ptr;
+ char scalar_data[8];
+ } data;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Adds the given extension data to the given message.
+// |ext| is copied into the message instance.
+// This logically replaces any previously-added extension with this number.
+struct upb_Extension* _upb_Message_GetOrCreateExtension(
+ struct upb_Message* msg, const upb_MiniTableExtension* ext,
+ upb_Arena* arena);
+
+// Returns an array of extensions for this message.
+// Note: the array is ordered in reverse relative to the order of creation.
+const struct upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(
+ const struct upb_Message* msg, size_t* count);
+
+// Returns an extension for a message with a given mini table,
+// or NULL if no extension exists with this mini table.
+const struct upb_Extension* _upb_Message_Getext(
+ const struct upb_Message* msg, const upb_MiniTableExtension* ext);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_INTERNAL_EXTENSION_H_ */
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const float kUpb_FltInfinity;
+extern const double kUpb_Infinity;
+extern const double kUpb_NaN;
+
+/* Internal members of a upb_Message that track unknown fields and/or
+ * extensions. We can change this without breaking binary compatibility. We put
+ * these before the user's data. The user's upb_Message* points after the
+ * upb_Message_Internal. */
+
+typedef struct {
+ /* Total size of this structure, including the data that follows.
+ * Must be aligned to 8, which is alignof(upb_Extension) */
+ uint32_t size;
+
+ /* Offsets relative to the beginning of this structure.
+ *
+ * Unknown data grows forward from the beginning to unknown_end.
+ * Extension data grows backward from size to ext_begin.
+ * When the two meet, we're out of data and have to realloc.
+ *
+ * If we imagine that the final member of this struct is:
+ * char data[size - overhead]; // overhead =
+ * sizeof(upb_Message_InternalData)
+ *
+ * Then we have:
+ * unknown data: data[0 .. (unknown_end - overhead)]
+ * extensions data: data[(ext_begin - overhead) .. (size - overhead)] */
+ uint32_t unknown_end;
+ uint32_t ext_begin;
+ /* Data follows, as if there were an array:
+ * char data[size - sizeof(upb_Message_InternalData)]; */
+} upb_Message_InternalData;
+
+typedef struct {
+ union {
+ upb_Message_InternalData* internal;
+
+ // Force 8-byte alignment, since the data members may contain members that
+ // require 8-byte alignment.
+ double d;
+ };
+} upb_Message_Internal;
+
+struct upb_Message {
+ int unused; // Placeholder cuz Windows won't compile an empty struct.
+};
+
+UPB_INLINE size_t upb_msg_sizeof(const upb_MiniTable* m) {
+ return m->UPB_PRIVATE(size) + sizeof(upb_Message_Internal);
+}
+
+// Inline version upb_Message_New(), for internal use.
+UPB_INLINE struct upb_Message* _upb_Message_New(const upb_MiniTable* mini_table,
+ upb_Arena* arena) {
+ size_t size = upb_msg_sizeof(mini_table);
+ void* mem = upb_Arena_Malloc(arena, size + sizeof(upb_Message_Internal));
+ if (UPB_UNLIKELY(!mem)) return NULL;
+ struct upb_Message* msg =
+ UPB_PTR_AT(mem, sizeof(upb_Message_Internal), struct upb_Message);
+ memset(mem, 0, size);
+ return msg;
+}
+
+UPB_INLINE upb_Message_Internal* upb_Message_Getinternal(
+ const struct upb_Message* msg) {
+ ptrdiff_t size = sizeof(upb_Message_Internal);
+ return (upb_Message_Internal*)((char*)msg - size);
+}
+
+UPB_INLINE upb_Message_InternalData* upb_Message_GetInternalData(
+ const struct upb_Message* msg) {
+ return upb_Message_Getinternal(msg)->internal;
+}
+
+// Discards the unknown fields for this message only.
+void _upb_Message_DiscardUnknown_shallow(struct upb_Message* msg);
+
+// Adds unknown data (serialized protobuf data) to the given message.
+// The data is copied into the message instance.
+bool UPB_PRIVATE(_upb_Message_AddUnknown)(struct upb_Message* msg,
+ const char* data, size_t len,
+ upb_Arena* arena);
+
+bool UPB_PRIVATE(_upb_Message_Realloc)(struct upb_Message* msg, size_t need,
+ upb_Arena* arena);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_INTERNAL_MESSAGE_H_ */
+
+#ifndef UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_
+#define UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_
+
+#include <stdint.h>
+
+
+// Must be last.
+
+typedef uintptr_t upb_TaggedMessagePtr;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Internal-only because empty messages cannot be created by the user.
+UPB_INLINE upb_TaggedMessagePtr
+UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(struct upb_Message* ptr, bool empty) {
+ UPB_ASSERT(((uintptr_t)ptr & 1) == 0);
+ return (uintptr_t)ptr | (empty ? 1 : 0);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(
+ upb_TaggedMessagePtr ptr) {
+ return ptr & 1;
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(
+ upb_TaggedMessagePtr ptr) {
+ return (struct upb_Message*)(ptr & ~(uintptr_t)1);
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(
+ _upb_TaggedMessagePtr_GetNonEmptyMessage)(upb_TaggedMessagePtr ptr) {
+ UPB_ASSERT(!UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr));
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(ptr);
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(
+ _upb_TaggedMessagePtr_GetEmptyMessage)(upb_TaggedMessagePtr ptr) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr));
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(ptr);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_ */
+
+typedef union {
+ bool bool_val;
+ float float_val;
+ double double_val;
+ int32_t int32_val;
+ int64_t int64_val;
+ uint32_t uint32_val;
+ uint64_t uint64_val;
+ const struct upb_Array* array_val;
+ const struct upb_Map* map_val;
+ const struct upb_Message* msg_val;
+ upb_StringView str_val;
+
+ // EXPERIMENTAL: A tagged upb_Message*. Users must use this instead of
+ // msg_val if unlinked sub-messages may possibly be in use. See the
+ // documentation in kUpb_DecodeOption_ExperimentalAllowUnlinked for more
+ // information.
+ upb_TaggedMessagePtr tagged_msg_val;
+} upb_MessageValue;
+
+typedef union {
+ struct upb_Array* array;
+ struct upb_Map* map;
+ struct upb_Message* msg;
+} upb_MutableMessageValue;
+
+#endif /* UPB_MESSAGE_VALUE_H_ */
+
+// Must be last.
+
+typedef struct upb_Array upb_Array;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Creates a new array on the given arena that holds elements of this type.
+UPB_API upb_Array* upb_Array_New(upb_Arena* a, upb_CType type);
+
+// Returns the number of elements in the array.
+UPB_API size_t upb_Array_Size(const upb_Array* arr);
+
+// Returns the given element, which must be within the array's current size.
+UPB_API upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i);
+
+// Sets the given element, which must be within the array's current size.
+UPB_API void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val);
+
+// Appends an element to the array. Returns false on allocation failure.
+UPB_API bool upb_Array_Append(upb_Array* array, upb_MessageValue val,
+ upb_Arena* arena);
+
+// Moves elements within the array using memmove().
+// Like memmove(), the source and destination elements may be overlapping.
+UPB_API void upb_Array_Move(upb_Array* array, size_t dst_idx, size_t src_idx,
+ size_t count);
+
+// Inserts one or more empty elements into the array.
+// Existing elements are shifted right.
+// The new elements have undefined state and must be set with `upb_Array_Set()`.
+// REQUIRES: `i <= upb_Array_Size(arr)`
+UPB_API bool upb_Array_Insert(upb_Array* array, size_t i, size_t count,
+ upb_Arena* arena);
+
+// Deletes one or more elements from the array.
+// Existing elements are shifted left.
+// REQUIRES: `i + count <= upb_Array_Size(arr)`
+UPB_API void upb_Array_Delete(upb_Array* array, size_t i, size_t count);
+
+// Changes the size of a vector. New elements are initialized to NULL/0.
+// Returns false on allocation failure.
+UPB_API bool upb_Array_Resize(upb_Array* array, size_t size, upb_Arena* arena);
+
+// Returns pointer to array data.
+UPB_API const void* upb_Array_DataPtr(const upb_Array* arr);
+
+// Returns mutable pointer to array data.
+UPB_API void* upb_Array_MutableDataPtr(upb_Array* arr);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MESSAGE_ARRAY_H_ */
+
+#ifndef UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+#define UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+
+// Must be last.
+
+#if defined(__GNUC__) && !defined(__clang__)
+// GCC raises incorrect warnings in these functions. It thinks that we are
+// overrunning buffers, but we carefully write the functions in this file to
+// guarantee that this is impossible. GCC gets this wrong due it its failure
+// to perform constant propagation as we expect:
+// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108217
+// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226
+//
+// Unfortunately this also indicates that GCC is not optimizing away the
+// switch() in cases where it should be, compromising the performance.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#pragma GCC diagnostic ignored "-Wstringop-overflow"
+#if __GNUC__ >= 11
+#pragma GCC diagnostic ignored "-Wstringop-overread"
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// LINT.IfChange(presence_logic)
+
+// Hasbit access ///////////////////////////////////////////////////////////////
+
+UPB_INLINE bool UPB_PRIVATE(_upb_Message_GetHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ return (*UPB_PTR_AT(msg, offset, const char) & mask) != 0;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ (*UPB_PTR_AT(msg, offset, char)) |= mask;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_ClearHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ (*UPB_PTR_AT(msg, offset, char)) &= ~mask;
+}
+
+// Oneof case access ///////////////////////////////////////////////////////////
+
+UPB_INLINE uint32_t* UPB_PRIVATE(_upb_Message_OneofCasePtr)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ return UPB_PTR_AT(msg, UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(f),
+ uint32_t);
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_Message_GetOneofCase)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const uint32_t* ptr =
+ UPB_PRIVATE(_upb_Message_OneofCasePtr)((struct upb_Message*)msg, f);
+
+ return *ptr;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetOneofCase)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
+
+ *ptr = upb_MiniTableField_Number(f);
+}
+
+// Returns true if the given field is the current oneof case.
+// Does nothing if it is not the current oneof case.
+UPB_INLINE bool UPB_PRIVATE(_upb_Message_ClearOneofCase)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
+
+ if (*ptr != upb_MiniTableField_Number(f)) return false;
+ *ptr = 0;
+ return true;
+}
+
+// LINT.ThenChange(GoogleInternalName2)
+
+UPB_INLINE void* UPB_PRIVATE(_upb_Message_DataPtr)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ return (char*)msg + f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE const void* UPB_PRIVATE(_upb_Message_ConstDataPtr)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ return (const char*)msg + f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetPresence)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ UPB_PRIVATE(_upb_Message_SetHasbit)(msg, f);
+ } else if (upb_MiniTableField_IsInOneof(f)) {
+ UPB_PRIVATE(_upb_Message_SetOneofCase)(msg, f);
+ }
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_DataCopy)(
+ const upb_MiniTableField* f, void* to, const void* from) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte:
+ memcpy(to, from, 1);
+ return;
+ case kUpb_FieldRep_4Byte:
+ memcpy(to, from, 4);
+ return;
+ case kUpb_FieldRep_8Byte:
+ memcpy(to, from, 8);
+ return;
+ case kUpb_FieldRep_StringView: {
+ memcpy(to, from, sizeof(upb_StringView));
+ return;
+ }
+ }
+ UPB_UNREACHABLE();
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_DataEquals)(
+ const upb_MiniTableField* f, const void* a, const void* b) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte:
+ return memcmp(a, b, 1) == 0;
+ case kUpb_FieldRep_4Byte:
+ return memcmp(a, b, 4) == 0;
+ case kUpb_FieldRep_8Byte:
+ return memcmp(a, b, 8) == 0;
+ case kUpb_FieldRep_StringView: {
+ const upb_StringView sa = *(const upb_StringView*)a;
+ const upb_StringView sb = *(const upb_StringView*)b;
+ return upb_StringView_IsEqual(sa, sb);
+ }
+ }
+ UPB_UNREACHABLE();
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_DataClear)(
+ const upb_MiniTableField* f, void* val) {
+ const char zero[16] = {0};
+ return UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, zero);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(
+ const upb_MiniTableField* f, const void* val) {
+ const char zero[16] = {0};
+ return UPB_PRIVATE(_upb_MiniTableField_DataEquals)(f, val, zero);
+}
+
+// Here we define universal getter/setter functions for message fields.
+// These look very branchy and inefficient, but as long as the MiniTableField
+// values are known at compile time, all the branches are optimized away and
+// we are left with ideal code. This can happen either through through
+// literals or UPB_ASSUME():
+//
+// // Via struct literals.
+// bool FooMessage_set_bool_field(const upb_Message* msg, bool val) {
+// const upb_MiniTableField field = {1, 0, 0, /* etc... */};
+// // All value in "field" are compile-time known.
+// _upb_Message_SetNonExtensionField(msg, &field, &value);
+// }
+//
+// // Via UPB_ASSUME().
+// UPB_INLINE bool upb_Message_SetBool(upb_Message* msg,
+// const upb_MiniTableField* field,
+// bool value, upb_Arena* a) {
+// UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bool);
+// UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+// UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+// kUpb_FieldRep_1Byte);
+// upb_Message_SetField(msg, field, &value, a);
+// }
+//
+// As a result, we can use these universal getters/setters for *all* message
+// accessors: generated code, MiniTable accessors, and reflection. The only
+// exception is the binary encoder/decoder, which need to be a bit more clever
+// about how they read/write the message data, for efficiency.
+//
+// These functions work on both extensions and non-extensions. If the field
+// of a setter is known to be a non-extension, the arena may be NULL and the
+// returned bool value may be ignored since it will always succeed.
+
+UPB_INLINE bool _upb_Message_HasExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableExtension* ext) {
+ UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->UPB_PRIVATE(field)));
+ return _upb_Message_Getext(msg, ext) != NULL;
+}
+
+UPB_INLINE bool _upb_Message_HasNonExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableField* field) {
+ UPB_ASSERT(upb_MiniTableField_HasPresence(field));
+ UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
+ if (upb_MiniTableField_IsInOneof(field)) {
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, field) ==
+ upb_MiniTableField_Number(field);
+ } else {
+ return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, field);
+ }
+}
+
+static UPB_FORCEINLINE void _upb_Message_GetNonExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableField* field,
+ const void* default_val, void* val) {
+ UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
+ if ((upb_MiniTableField_IsInOneof(field) ||
+ !UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, default_val)) &&
+ !_upb_Message_HasNonExtensionField(msg, field)) {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(field, val, default_val);
+ return;
+ }
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (field, val, UPB_PRIVATE(_upb_Message_ConstDataPtr)(msg, field));
+}
+
+UPB_INLINE void _upb_Message_GetExtensionField(
+ const struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
+ const void* default_val, void* val) {
+ const struct upb_Extension* ext = _upb_Message_Getext(msg, mt_ext);
+ const upb_MiniTableField* f = &mt_ext->UPB_PRIVATE(field);
+ UPB_ASSUME(upb_MiniTableField_IsExtension(f));
+
+ if (ext) {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, &ext->data);
+ } else {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, default_val);
+ }
+}
+
+UPB_INLINE void _upb_Message_SetNonExtensionField(
+ struct upb_Message* msg, const upb_MiniTableField* field, const void* val) {
+ UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
+ UPB_PRIVATE(_upb_Message_SetPresence)(msg, field);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (field, UPB_PRIVATE(_upb_Message_DataPtr)(msg, field), val);
+}
+
+UPB_INLINE bool _upb_Message_SetExtensionField(
+ struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
+ const void* val, upb_Arena* a) {
+ UPB_ASSERT(a);
+ struct upb_Extension* ext = _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
+ if (!ext) return false;
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (&mt_ext->UPB_PRIVATE(field), &ext->data, val);
+ return true;
+}
+
+UPB_INLINE void _upb_Message_ClearExtensionField(
+ struct upb_Message* msg, const upb_MiniTableExtension* ext_l) {
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ if (!in) return;
+ const struct upb_Extension* base =
+ UPB_PTR_AT(in, in->ext_begin, struct upb_Extension);
+ struct upb_Extension* ext =
+ (struct upb_Extension*)_upb_Message_Getext(msg, ext_l);
+ if (ext) {
+ *ext = *base;
+ in->ext_begin += sizeof(struct upb_Extension);
+ }
+}
+
+UPB_INLINE void _upb_Message_ClearNonExtensionField(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ UPB_PRIVATE(_upb_Message_ClearHasbit)(msg, f);
+ } else if (upb_MiniTableField_IsInOneof(f)) {
+ if (!UPB_PRIVATE(_upb_Message_ClearOneofCase)(msg, f)) return;
+ }
+ void* data = UPB_PRIVATE(_upb_Message_DataPtr)(msg, f);
+ UPB_PRIVATE(_upb_MiniTableField_DataClear)(f, data);
+}
+
+UPB_INLINE void _upb_Message_AssertMapIsUntagged(
+ const struct upb_Message* msg, const upb_MiniTableField* field) {
+ UPB_UNUSED(msg);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
+#ifndef NDEBUG
+ upb_TaggedMessagePtr default_val = 0;
+ upb_TaggedMessagePtr tagged;
+ _upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
+ UPB_ASSERT(!UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(tagged));
+#endif
+}
+
+UPB_INLINE struct upb_Map* _upb_Message_GetOrCreateMutableMap(
+ struct upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
+ size_t val_size, upb_Arena* arena) {
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
+ _upb_Message_AssertMapIsUntagged(msg, field);
+ struct upb_Map* map = NULL;
+ struct upb_Map* default_map_value = NULL;
+ _upb_Message_GetNonExtensionField(msg, field, &default_map_value, &map);
+ if (!map) {
+ map = _upb_Map_New(arena, key_size, val_size);
+ // Check again due to: https://godbolt.org/z/7WfaoKG1r
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
+ _upb_Message_SetNonExtensionField(msg, field, &map);
+ }
+ return map;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
+
+#endif // UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+
#ifndef UPB_MESSAGE_MAP_H_
#define UPB_MESSAGE_MAP_H_
@@ -1750,12 +2848,6 @@
// Removes all entries in the map.
UPB_API void upb_Map_Clear(upb_Map* map);
-typedef enum {
- kUpb_MapInsertStatus_Inserted = 0,
- kUpb_MapInsertStatus_Replaced = 1,
- kUpb_MapInsertStatus_OutOfMemory = 2,
-} upb_MapInsertStatus;
-
// Sets the given key to the given value, returning whether the key was inserted
// or replaced. If the key was inserted, then any existing iterators will be
// invalidated.
@@ -1833,769 +2925,77 @@
#endif /* UPB_MESSAGE_MAP_H_ */
+#ifndef UPB_MINI_TABLE_TAGGED_PTR_H_
+#define UPB_MINI_TABLE_TAGGED_PTR_H_
+
+#include <stdint.h>
+
+
+// Public APIs for message operations that do not depend on the schema.
+//
+// MiniTable-based accessors live in accessors.h.
+
+#ifndef UPB_MESSAGE_MESSAGE_H_
+#define UPB_MESSAGE_MESSAGE_H_
+
+#include <stddef.h>
+
+
// Must be last.
-struct upb_Map {
- // Size of key and val, based on the map type.
- // Strings are represented as '0' because they must be handled specially.
- char key_size;
- char val_size;
-
- upb_strtable table;
-};
+typedef struct upb_Extension upb_Extension;
+typedef struct upb_Message upb_Message;
#ifdef __cplusplus
extern "C" {
#endif
-// Converting between internal table representation and user values.
-//
-// _upb_map_tokey() and _upb_map_fromkey() are inverses.
-// _upb_map_tovalue() and _upb_map_fromvalue() are inverses.
-//
-// These functions account for the fact that strings are treated differently
-// from other types when stored in a map.
+// Creates a new message with the given mini_table on the given arena.
+UPB_API upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* arena);
-UPB_INLINE upb_StringView _upb_map_tokey(const void* key, size_t size) {
- if (size == UPB_MAPTYPE_STRING) {
- return *(upb_StringView*)key;
- } else {
- return upb_StringView_FromDataAndSize((const char*)key, size);
- }
-}
+// Returns a reference to the message's unknown data.
+const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len);
-UPB_INLINE void _upb_map_fromkey(upb_StringView key, void* out, size_t size) {
- if (size == UPB_MAPTYPE_STRING) {
- memcpy(out, &key, sizeof(key));
- } else {
- memcpy(out, key.data, size);
- }
-}
+// Removes partial unknown data from message.
+void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len);
-UPB_INLINE bool _upb_map_tovalue(const void* val, size_t size,
- upb_value* msgval, upb_Arena* a) {
- if (size == UPB_MAPTYPE_STRING) {
- upb_StringView* strp = (upb_StringView*)upb_Arena_Malloc(a, sizeof(*strp));
- if (!strp) return false;
- *strp = *(upb_StringView*)val;
- *msgval = upb_value_ptr(strp);
- } else {
- memcpy(msgval, val, size);
- }
- return true;
-}
-
-UPB_INLINE void _upb_map_fromvalue(upb_value val, void* out, size_t size) {
- if (size == UPB_MAPTYPE_STRING) {
- const upb_StringView* strp = (const upb_StringView*)upb_value_getptr(val);
- memcpy(out, strp, sizeof(upb_StringView));
- } else {
- memcpy(out, &val, size);
- }
-}
-
-UPB_INLINE void* _upb_map_next(const upb_Map* map, size_t* iter) {
- upb_strtable_iter it;
- it.t = &map->table;
- it.index = *iter;
- upb_strtable_next(&it);
- *iter = it.index;
- if (upb_strtable_done(&it)) return NULL;
- return (void*)str_tabent(&it);
-}
-
-UPB_INLINE void _upb_Map_Clear(upb_Map* map) {
- upb_strtable_clear(&map->table);
-}
-
-UPB_INLINE bool _upb_Map_Delete(upb_Map* map, const void* key, size_t key_size,
- upb_value* val) {
- upb_StringView k = _upb_map_tokey(key, key_size);
- return upb_strtable_remove2(&map->table, k.data, k.size, val);
-}
-
-UPB_INLINE bool _upb_Map_Get(const upb_Map* map, const void* key,
- size_t key_size, void* val, size_t val_size) {
- upb_value tabval;
- upb_StringView k = _upb_map_tokey(key, key_size);
- bool ret = upb_strtable_lookup2(&map->table, k.data, k.size, &tabval);
- if (ret && val) {
- _upb_map_fromvalue(tabval, val, val_size);
- }
- return ret;
-}
-
-UPB_INLINE upb_MapInsertStatus _upb_Map_Insert(upb_Map* map, const void* key,
- size_t key_size, void* val,
- size_t val_size, upb_Arena* a) {
- upb_StringView strkey = _upb_map_tokey(key, key_size);
- upb_value tabval = {0};
- if (!_upb_map_tovalue(val, val_size, &tabval, a)) {
- return kUpb_MapInsertStatus_OutOfMemory;
- }
-
- // TODO: add overwrite operation to minimize number of lookups.
- bool removed =
- upb_strtable_remove2(&map->table, strkey.data, strkey.size, NULL);
- if (!upb_strtable_insert(&map->table, strkey.data, strkey.size, tabval, a)) {
- return kUpb_MapInsertStatus_OutOfMemory;
- }
- return removed ? kUpb_MapInsertStatus_Replaced
- : kUpb_MapInsertStatus_Inserted;
-}
-
-UPB_INLINE size_t _upb_Map_Size(const upb_Map* map) {
- return map->table.t.count;
-}
-
-// Strings/bytes are special-cased in maps.
-extern char _upb_Map_CTypeSizeTable[12];
-
-UPB_INLINE size_t _upb_Map_CTypeSize(upb_CType ctype) {
- return _upb_Map_CTypeSizeTable[ctype];
-}
-
-// Creates a new map on the given arena with this key/value type.
-upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size);
+// Returns the number of extensions present in this message.
+size_t upb_Message_ExtensionCount(const upb_Message* msg);
#ifdef __cplusplus
} /* extern "C" */
#endif
-#endif /* UPB_COLLECTIONS_INTERNAL_MAP_H_ */
-
-/*
-** Our memory representation for parsing tables and messages themselves.
-** Functions in this file are used by generated code and possibly reflection.
-**
-** The definitions in this file are internal to upb.
-**/
-
-#ifndef UPB_MESSAGE_INTERNAL_H_
-#define UPB_MESSAGE_INTERNAL_H_
-
-#include <stdlib.h>
-#include <string.h>
-
-
-#ifndef UPB_MINI_TABLE_INTERNAL_TYPES_H_
-#define UPB_MINI_TABLE_INTERNAL_TYPES_H_
-
-typedef struct upb_Message_InternalData upb_Message_InternalData;
-
-typedef struct {
- union {
- upb_Message_InternalData* internal;
-
- // Force 8-byte alignment, since the data members may contain members that
- // require 8-byte alignment.
- double d;
- };
-} upb_Message_Internal;
-
-#endif // UPB_MINI_TABLE_INTERNAL_TYPES_H_
-
-#ifndef UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
-#define UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
-
+#endif /* UPB_MESSAGE_MESSAGE_H_ */
// Must be last.
+// When a upb_Message* is stored in a message, array, or map, it is stored in a
+// tagged form. If the tag bit is set, the referenced upb_Message is of type
+// _kUpb_MiniTable_Empty (a sentinel message type with no fields) instead of
+// that field's true message type. This forms the basis of what we call
+// "dynamic tree shaking."
+//
+// See the documentation for kUpb_DecodeOption_ExperimentalAllowUnlinked for
+// more information.
+
+typedef uintptr_t upb_TaggedMessagePtr;
+
#ifdef __cplusplus
extern "C" {
#endif
-/* Extension registry: a dynamic data structure that stores a map of:
- * (upb_MiniTable, number) -> extension info
- *
- * upb_decode() uses upb_ExtensionRegistry to look up extensions while parsing
- * binary format.
- *
- * upb_ExtensionRegistry is part of the mini-table (msglayout) family of
- * objects. Like all mini-table objects, it is suitable for reflection-less
- * builds that do not want to expose names into the binary.
- *
- * Unlike most mini-table types, upb_ExtensionRegistry requires dynamic memory
- * allocation and dynamic initialization:
- * * If reflection is being used, then upb_DefPool will construct an appropriate
- * upb_ExtensionRegistry automatically.
- * * For a mini-table only build, the user must manually construct the
- * upb_ExtensionRegistry and populate it with all of the extensions the user
- * cares about.
- * * A third alternative is to manually unpack relevant extensions after the
- * main parse is complete, similar to how Any works. This is perhaps the
- * nicest solution from the perspective of reducing dependencies, avoiding
- * dynamic memory allocation, and avoiding the need to parse uninteresting
- * extensions. The downsides are:
- * (1) parse errors are not caught during the main parse
- * (2) the CPU hit of parsing comes during access, which could cause an
- * undesirable stutter in application performance.
- *
- * Users cannot directly get or put into this map. Users can only add the
- * extensions from a generated module and pass the extension registry to the
- * binary decoder.
- *
- * A upb_DefPool provides a upb_ExtensionRegistry, so any users who use
- * reflection do not need to populate a upb_ExtensionRegistry directly.
- */
-
-typedef struct upb_ExtensionRegistry upb_ExtensionRegistry;
-
-// Creates a upb_ExtensionRegistry in the given arena.
-// The arena must outlive any use of the extreg.
-UPB_API upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
-
-UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension* e);
-
-// Adds the given extension info for the array |e| of size |count| into the
-// registry. If there are any errors, the entire array is backed out.
-// The extensions must outlive the registry.
-// Possible errors include OOM or an extension number that already exists.
-// TODO: There is currently no way to know the exact reason for failure.
-bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
- const upb_MiniTableExtension** e,
- size_t count);
-
-// Looks up the extension (if any) defined for message type |t| and field
-// number |num|. Returns the extension if found, otherwise NULL.
-UPB_API const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
- const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MINI_TABLE_EXTENSION_REGISTRY_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern const float kUpb_FltInfinity;
-extern const double kUpb_Infinity;
-extern const double kUpb_NaN;
-
-/* Internal members of a upb_Message that track unknown fields and/or
- * extensions. We can change this without breaking binary compatibility. We put
- * these before the user's data. The user's upb_Message* points after the
- * upb_Message_Internal. */
-
-struct upb_Message_InternalData {
- /* Total size of this structure, including the data that follows.
- * Must be aligned to 8, which is alignof(upb_Message_Extension) */
- uint32_t size;
-
- /* Offsets relative to the beginning of this structure.
- *
- * Unknown data grows forward from the beginning to unknown_end.
- * Extension data grows backward from size to ext_begin.
- * When the two meet, we're out of data and have to realloc.
- *
- * If we imagine that the final member of this struct is:
- * char data[size - overhead]; // overhead =
- * sizeof(upb_Message_InternalData)
- *
- * Then we have:
- * unknown data: data[0 .. (unknown_end - overhead)]
- * extensions data: data[(ext_begin - overhead) .. (size - overhead)] */
- uint32_t unknown_end;
- uint32_t ext_begin;
- /* Data follows, as if there were an array:
- * char data[size - sizeof(upb_Message_InternalData)]; */
-};
-
-/* Maps upb_CType -> memory size. */
-extern char _upb_CTypeo_size[12];
-
-UPB_INLINE size_t upb_msg_sizeof(const upb_MiniTable* t) {
- return t->size + sizeof(upb_Message_Internal);
+// Users who enable unlinked sub-messages must use this to test whether a
+// message is empty before accessing it. If a message is empty, it must be
+// first promoted using the interfaces in message/promote.h.
+UPB_INLINE bool upb_TaggedMessagePtr_IsEmpty(upb_TaggedMessagePtr ptr) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr);
}
-// Inline version upb_Message_New(), for internal use.
-UPB_INLINE upb_Message* _upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- size_t size = upb_msg_sizeof(mini_table);
- void* mem = upb_Arena_Malloc(arena, size + sizeof(upb_Message_Internal));
- if (UPB_UNLIKELY(!mem)) return NULL;
- upb_Message* msg = UPB_PTR_AT(mem, sizeof(upb_Message_Internal), upb_Message);
- memset(mem, 0, size);
- return msg;
-}
-
-UPB_INLINE upb_Message_Internal* upb_Message_Getinternal(
- const upb_Message* msg) {
- ptrdiff_t size = sizeof(upb_Message_Internal);
- return (upb_Message_Internal*)((char*)msg - size);
-}
-
-// Discards the unknown fields for this message only.
-void _upb_Message_DiscardUnknown_shallow(upb_Message* msg);
-
-// Adds unknown data (serialized protobuf data) to the given message.
-// The data is copied into the message instance.
-bool _upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_MESSAGE_INTERNAL_H_ */
-
-// Must be last.
-
-#if defined(__GNUC__) && !defined(__clang__)
-// GCC raises incorrect warnings in these functions. It thinks that we are
-// overrunning buffers, but we carefully write the functions in this file to
-// guarantee that this is impossible. GCC gets this wrong due it its failure
-// to perform constant propagation as we expect:
-// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108217
-// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226
-//
-// Unfortunately this also indicates that GCC is not optimizing away the
-// switch() in cases where it should be, compromising the performance.
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Warray-bounds"
-#pragma GCC diagnostic ignored "-Wstringop-overflow"
-#if __GNUC__ >= 11
-#pragma GCC diagnostic ignored "-Wstringop-overread"
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// LINT.IfChange(presence_logic)
-
-// Hasbit access ///////////////////////////////////////////////////////////////
-
-UPB_INLINE size_t _upb_hasbit_ofs(size_t idx) { return idx / 8; }
-
-UPB_INLINE char _upb_hasbit_mask(size_t idx) { return 1 << (idx % 8); }
-
-UPB_INLINE bool _upb_hasbit(const upb_Message* msg, size_t idx) {
- return (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), const char) &
- _upb_hasbit_mask(idx)) != 0;
-}
-
-UPB_INLINE void _upb_sethas(const upb_Message* msg, size_t idx) {
- (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), char)) |= _upb_hasbit_mask(idx);
-}
-
-UPB_INLINE void _upb_clearhas(const upb_Message* msg, size_t idx) {
- (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), char)) &= ~_upb_hasbit_mask(idx);
-}
-
-UPB_INLINE size_t _upb_Message_Hasidx(const upb_MiniTableField* f) {
- UPB_ASSERT(f->presence > 0);
- return f->presence;
-}
-
-UPB_INLINE bool _upb_hasbit_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- return _upb_hasbit(msg, _upb_Message_Hasidx(f));
-}
-
-UPB_INLINE void _upb_sethas_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- _upb_sethas(msg, _upb_Message_Hasidx(f));
-}
-
-// Oneof case access ///////////////////////////////////////////////////////////
-
-UPB_INLINE size_t _upb_oneofcase_ofs(const upb_MiniTableField* f) {
- UPB_ASSERT(f->presence < 0);
- return ~(ptrdiff_t)f->presence;
-}
-
-UPB_INLINE uint32_t* _upb_oneofcase_field(upb_Message* msg,
- const upb_MiniTableField* f) {
- return UPB_PTR_AT(msg, _upb_oneofcase_ofs(f), uint32_t);
-}
-
-UPB_INLINE uint32_t _upb_getoneofcase_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- return *_upb_oneofcase_field((upb_Message*)msg, f);
-}
-
-// LINT.ThenChange(GoogleInternalName2)
-
-UPB_INLINE bool _upb_MiniTableField_InOneOf(const upb_MiniTableField* field) {
- return field->presence < 0;
-}
-
-UPB_INLINE void* _upb_MiniTableField_GetPtr(upb_Message* msg,
- const upb_MiniTableField* field) {
- return (char*)msg + field->offset;
-}
-
-UPB_INLINE const void* _upb_MiniTableField_GetConstPtr(
- const upb_Message* msg, const upb_MiniTableField* field) {
- return (char*)msg + field->offset;
-}
-
-UPB_INLINE void _upb_Message_SetPresence(upb_Message* msg,
- const upb_MiniTableField* field) {
- if (field->presence > 0) {
- _upb_sethas_field(msg, field);
- } else if (_upb_MiniTableField_InOneOf(field)) {
- *_upb_oneofcase_field(msg, field) = field->number;
- }
-}
-
-UPB_INLINE bool _upb_MiniTable_ValueIsNonZero(const void* default_val,
- const upb_MiniTableField* field) {
- char zero[16] = {0};
- switch (_upb_MiniTableField_GetRep(field)) {
- case kUpb_FieldRep_1Byte:
- return memcmp(&zero, default_val, 1) != 0;
- case kUpb_FieldRep_4Byte:
- return memcmp(&zero, default_val, 4) != 0;
- case kUpb_FieldRep_8Byte:
- return memcmp(&zero, default_val, 8) != 0;
- case kUpb_FieldRep_StringView: {
- const upb_StringView* sv = (const upb_StringView*)default_val;
- return sv->size != 0;
- }
- }
- UPB_UNREACHABLE();
-}
-
-UPB_INLINE void _upb_MiniTable_CopyFieldData(void* to, const void* from,
- const upb_MiniTableField* field) {
- switch (_upb_MiniTableField_GetRep(field)) {
- case kUpb_FieldRep_1Byte:
- memcpy(to, from, 1);
- return;
- case kUpb_FieldRep_4Byte:
- memcpy(to, from, 4);
- return;
- case kUpb_FieldRep_8Byte:
- memcpy(to, from, 8);
- return;
- case kUpb_FieldRep_StringView: {
- memcpy(to, from, sizeof(upb_StringView));
- return;
- }
- }
- UPB_UNREACHABLE();
-}
-
-UPB_INLINE size_t
-_upb_MiniTable_ElementSizeLg2(const upb_MiniTableField* field) {
- const unsigned char table[] = {
- 0,
- 3, // kUpb_FieldType_Double = 1,
- 2, // kUpb_FieldType_Float = 2,
- 3, // kUpb_FieldType_Int64 = 3,
- 3, // kUpb_FieldType_UInt64 = 4,
- 2, // kUpb_FieldType_Int32 = 5,
- 3, // kUpb_FieldType_Fixed64 = 6,
- 2, // kUpb_FieldType_Fixed32 = 7,
- 0, // kUpb_FieldType_Bool = 8,
- UPB_SIZE(3, 4), // kUpb_FieldType_String = 9,
- UPB_SIZE(2, 3), // kUpb_FieldType_Group = 10,
- UPB_SIZE(2, 3), // kUpb_FieldType_Message = 11,
- UPB_SIZE(3, 4), // kUpb_FieldType_Bytes = 12,
- 2, // kUpb_FieldType_UInt32 = 13,
- 2, // kUpb_FieldType_Enum = 14,
- 2, // kUpb_FieldType_SFixed32 = 15,
- 3, // kUpb_FieldType_SFixed64 = 16,
- 2, // kUpb_FieldType_SInt32 = 17,
- 3, // kUpb_FieldType_SInt64 = 18,
- };
- return table[field->UPB_PRIVATE(descriptortype)];
-}
-
-// Here we define universal getter/setter functions for message fields.
-// These look very branchy and inefficient, but as long as the MiniTableField
-// values are known at compile time, all the branches are optimized away and
-// we are left with ideal code. This can happen either through through
-// literals or UPB_ASSUME():
-//
-// // Via struct literals.
-// bool FooMessage_set_bool_field(const upb_Message* msg, bool val) {
-// const upb_MiniTableField field = {1, 0, 0, /* etc... */};
-// // All value in "field" are compile-time known.
-// _upb_Message_SetNonExtensionField(msg, &field, &value);
-// }
-//
-// // Via UPB_ASSUME().
-// UPB_INLINE bool upb_Message_SetBool(upb_Message* msg,
-// const upb_MiniTableField* field,
-// bool value, upb_Arena* a) {
-// UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bool);
-// UPB_ASSUME(!upb_IsRepeatedOrMap(field));
-// UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
-// _upb_Message_SetField(msg, field, &value, a);
-// }
-//
-// As a result, we can use these universal getters/setters for *all* message
-// accessors: generated code, MiniTable accessors, and reflection. The only
-// exception is the binary encoder/decoder, which need to be a bit more clever
-// about how they read/write the message data, for efficiency.
-//
-// These functions work on both extensions and non-extensions. If the field
-// of a setter is known to be a non-extension, the arena may be NULL and the
-// returned bool value may be ignored since it will always succeed.
-
-UPB_INLINE bool _upb_Message_HasExtensionField(
- const upb_Message* msg, const upb_MiniTableExtension* ext) {
- UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->field));
- return _upb_Message_Getext(msg, ext) != NULL;
-}
-
-UPB_INLINE bool _upb_Message_HasNonExtensionField(
- const upb_Message* msg, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_HasPresence(field));
- UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- if (_upb_MiniTableField_InOneOf(field)) {
- return _upb_getoneofcase_field(msg, field) == field->number;
- } else {
- return _upb_hasbit_field(msg, field);
- }
-}
-
-static UPB_FORCEINLINE void _upb_Message_GetNonExtensionField(
- const upb_Message* msg, const upb_MiniTableField* field,
- const void* default_val, void* val) {
- UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- if ((_upb_MiniTableField_InOneOf(field) ||
- _upb_MiniTable_ValueIsNonZero(default_val, field)) &&
- !_upb_Message_HasNonExtensionField(msg, field)) {
- _upb_MiniTable_CopyFieldData(val, default_val, field);
- return;
- }
- _upb_MiniTable_CopyFieldData(val, _upb_MiniTableField_GetConstPtr(msg, field),
- field);
-}
-
-UPB_INLINE void _upb_Message_GetExtensionField(
- const upb_Message* msg, const upb_MiniTableExtension* mt_ext,
- const void* default_val, void* val) {
- UPB_ASSUME(upb_MiniTableField_IsExtension(&mt_ext->field));
- const upb_Message_Extension* ext = _upb_Message_Getext(msg, mt_ext);
- if (ext) {
- _upb_MiniTable_CopyFieldData(val, &ext->data, &mt_ext->field);
- } else {
- _upb_MiniTable_CopyFieldData(val, default_val, &mt_ext->field);
- }
-}
-
-UPB_INLINE void _upb_Message_GetField(const upb_Message* msg,
- const upb_MiniTableField* field,
- const void* default_val, void* val) {
- if (upb_MiniTableField_IsExtension(field)) {
- _upb_Message_GetExtensionField(msg, (upb_MiniTableExtension*)field,
- default_val, val);
- } else {
- _upb_Message_GetNonExtensionField(msg, field, default_val, val);
- }
-}
-
-UPB_INLINE void _upb_Message_SetNonExtensionField(
- upb_Message* msg, const upb_MiniTableField* field, const void* val) {
- UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- _upb_Message_SetPresence(msg, field);
- _upb_MiniTable_CopyFieldData(_upb_MiniTableField_GetPtr(msg, field), val,
- field);
-}
-
-UPB_INLINE bool _upb_Message_SetExtensionField(
- upb_Message* msg, const upb_MiniTableExtension* mt_ext, const void* val,
- upb_Arena* a) {
- UPB_ASSERT(a);
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
- if (!ext) return false;
- _upb_MiniTable_CopyFieldData(&ext->data, val, &mt_ext->field);
- return true;
-}
-
-UPB_INLINE bool _upb_Message_SetField(upb_Message* msg,
- const upb_MiniTableField* field,
- const void* val, upb_Arena* a) {
- if (upb_MiniTableField_IsExtension(field)) {
- const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)field;
- return _upb_Message_SetExtensionField(msg, ext, val, a);
- } else {
- _upb_Message_SetNonExtensionField(msg, field, val);
- return true;
- }
-}
-
-UPB_INLINE void _upb_Message_ClearExtensionField(
- upb_Message* msg, const upb_MiniTableExtension* ext_l) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (!in->internal) return;
- const upb_Message_Extension* base =
- UPB_PTR_AT(in->internal, in->internal->ext_begin, upb_Message_Extension);
- upb_Message_Extension* ext =
- (upb_Message_Extension*)_upb_Message_Getext(msg, ext_l);
- if (ext) {
- *ext = *base;
- in->internal->ext_begin += sizeof(upb_Message_Extension);
- }
-}
-
-UPB_INLINE void _upb_Message_ClearNonExtensionField(
- upb_Message* msg, const upb_MiniTableField* field) {
- if (field->presence > 0) {
- _upb_clearhas(msg, _upb_Message_Hasidx(field));
- } else if (_upb_MiniTableField_InOneOf(field)) {
- uint32_t* oneof_case = _upb_oneofcase_field(msg, field);
- if (*oneof_case != field->number) return;
- *oneof_case = 0;
- }
- const char zeros[16] = {0};
- _upb_MiniTable_CopyFieldData(_upb_MiniTableField_GetPtr(msg, field), zeros,
- field);
-}
-
-UPB_INLINE void _upb_Message_AssertMapIsUntagged(
- const upb_Message* msg, const upb_MiniTableField* field) {
- UPB_UNUSED(msg);
- _upb_MiniTableField_CheckIsMap(field);
-#ifndef NDEBUG
- upb_TaggedMessagePtr default_val = 0;
- upb_TaggedMessagePtr tagged;
- _upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
- UPB_ASSERT(!upb_TaggedMessagePtr_IsEmpty(tagged));
-#endif
-}
-
-UPB_INLINE upb_Map* _upb_Message_GetOrCreateMutableMap(
- upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
- size_t val_size, upb_Arena* arena) {
- _upb_MiniTableField_CheckIsMap(field);
- _upb_Message_AssertMapIsUntagged(msg, field);
- upb_Map* map = NULL;
- upb_Map* default_map_value = NULL;
- _upb_Message_GetNonExtensionField(msg, field, &default_map_value, &map);
- if (!map) {
- map = _upb_Map_New(arena, key_size, val_size);
- // Check again due to: https://godbolt.org/z/7WfaoKG1r
- _upb_MiniTableField_CheckIsMap(field);
- _upb_Message_SetNonExtensionField(msg, field, &map);
- }
- return map;
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#if defined(__GNUC__) && !defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
-
-#endif // UPB_MESSAGE_INTERNAL_ACCESSORS_H_
-
-#ifndef UPB_MESSAGE_INTERNAL_ARRAY_H_
-#define UPB_MESSAGE_INTERNAL_ARRAY_H_
-
-#include <string.h>
-
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// LINT.IfChange(struct_definition)
-// Our internal representation for repeated fields.
-struct upb_Array {
- uintptr_t data; /* Tagged ptr: low 3 bits of ptr are lg2(elem size). */
- size_t size; /* The number of elements in the array. */
- size_t capacity; /* Allocated storage. Measured in elements. */
-};
-// LINT.ThenChange(GoogleInternalName1)
-
-UPB_INLINE size_t _upb_Array_ElementSizeLg2(const upb_Array* arr) {
- size_t ret = arr->data & 7;
- UPB_ASSERT(ret <= 4);
- return ret;
-}
-
-UPB_INLINE const void* _upb_array_constptr(const upb_Array* arr) {
- _upb_Array_ElementSizeLg2(arr); // Check assertion.
- return (void*)(arr->data & ~(uintptr_t)7);
-}
-
-UPB_INLINE uintptr_t _upb_array_tagptr(void* ptr, int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- return (uintptr_t)ptr | elem_size_lg2;
-}
-
-UPB_INLINE void* _upb_array_ptr(upb_Array* arr) {
- return (void*)_upb_array_constptr(arr);
-}
-
-UPB_INLINE uintptr_t _upb_tag_arrptr(void* ptr, int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- UPB_ASSERT(((uintptr_t)ptr & 7) == 0);
- return (uintptr_t)ptr | (unsigned)elem_size_lg2;
-}
-
-extern const char _upb_Array_CTypeSizeLg2Table[];
-
-UPB_INLINE size_t _upb_Array_CTypeSizeLg2(upb_CType ctype) {
- return _upb_Array_CTypeSizeLg2Table[ctype];
-}
-
-UPB_INLINE upb_Array* _upb_Array_New(upb_Arena* a, size_t init_capacity,
- int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- const size_t arr_size = UPB_ALIGN_UP(sizeof(upb_Array), UPB_MALLOC_ALIGN);
- const size_t bytes = arr_size + (init_capacity << elem_size_lg2);
- upb_Array* arr = (upb_Array*)upb_Arena_Malloc(a, bytes);
- if (!arr) return NULL;
- arr->data = _upb_tag_arrptr(UPB_PTR_AT(arr, arr_size, void), elem_size_lg2);
- arr->size = 0;
- arr->capacity = init_capacity;
- return arr;
-}
-
-// Resizes the capacity of the array to be at least min_size.
-bool _upb_array_realloc(upb_Array* arr, size_t min_size, upb_Arena* arena);
-
-UPB_INLINE bool _upb_array_reserve(upb_Array* arr, size_t size,
- upb_Arena* arena) {
- if (arr->capacity < size) return _upb_array_realloc(arr, size, arena);
- return true;
-}
-
-// Resize without initializing new elements.
-UPB_INLINE bool _upb_Array_ResizeUninitialized(upb_Array* arr, size_t size,
- upb_Arena* arena) {
- UPB_ASSERT(size <= arr->size || arena); // Allow NULL arena when shrinking.
- if (!_upb_array_reserve(arr, size, arena)) return false;
- arr->size = size;
- return true;
-}
-
-// This function is intended for situations where elem_size is compile-time
-// constant or a known expression of the form (1 << lg2), so that the expression
-// i*elem_size does not result in an actual multiplication.
-UPB_INLINE void _upb_Array_Set(upb_Array* arr, size_t i, const void* data,
- size_t elem_size) {
- UPB_ASSERT(i < arr->size);
- UPB_ASSERT(elem_size == 1U << _upb_Array_ElementSizeLg2(arr));
- char* arr_data = (char*)_upb_array_ptr(arr);
- memcpy(arr_data + (i * elem_size), data, elem_size);
-}
-
-UPB_INLINE void _upb_array_detach(const void* msg, size_t ofs) {
- *UPB_PTR_AT(msg, ofs, upb_Array*) = NULL;
+UPB_INLINE upb_Message* upb_TaggedMessagePtr_GetNonEmptyMessage(
+ upb_TaggedMessagePtr ptr) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetNonEmptyMessage)(ptr);
}
#ifdef __cplusplus
@@ -2603,7 +3003,50 @@
#endif
-#endif /* UPB_MESSAGE_INTERNAL_ARRAY_H_ */
+#endif /* UPB_MINI_TABLE_TAGGED_PTR_H_ */
+
+#ifndef UPB_MINI_TABLE_SUB_H_
+#define UPB_MINI_TABLE_SUB_H_
+
+
+// Must be last.
+
+typedef union upb_MiniTableSub upb_MiniTableSub;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Constructors
+
+UPB_API_INLINE upb_MiniTableSub
+upb_MiniTableSub_FromEnum(const upb_MiniTableEnum* subenum) {
+ return UPB_PRIVATE(_upb_MiniTableSub_FromEnum)(subenum);
+}
+
+UPB_API_INLINE upb_MiniTableSub
+upb_MiniTableSub_FromMessage(const upb_MiniTable* submsg) {
+ return UPB_PRIVATE(_upb_MiniTableSub_FromMessage)(submsg);
+}
+
+// Getters
+
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTableSub_Enum(
+ upb_MiniTableSub sub) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Enum)(sub);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableSub_Message(
+ upb_MiniTableSub sub) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Message)(sub);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_SUB_H_ */
// Must be last.
@@ -2640,28 +3083,62 @@
UPB_API_INLINE uint32_t upb_Message_WhichOneofFieldNumber(
const upb_Message* message, const upb_MiniTableField* oneof_field) {
- UPB_ASSUME(_upb_MiniTableField_InOneOf(oneof_field));
- return _upb_getoneofcase_field(message, oneof_field);
+ UPB_ASSUME(upb_MiniTableField_IsInOneof(oneof_field));
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(message, oneof_field);
+}
+
+// NOTE: The default_val is only used for fields that support presence.
+// For repeated/map fields, the resulting upb_Array*/upb_Map* can be NULL if a
+// upb_Array/upb_Map has not been allocated yet. Array/map fields do not have
+// presence, so this is semantically identical to a pointer to an empty
+// array/map, and must be treated the same for all semantic purposes.
+UPB_INLINE upb_MessageValue
+upb_Message_GetField(const upb_Message* msg, const upb_MiniTableField* field,
+ upb_MessageValue default_val) {
+ upb_MessageValue ret;
+ if (upb_MiniTableField_IsExtension(field)) {
+ _upb_Message_GetExtensionField(msg, (upb_MiniTableExtension*)field,
+ &default_val, &ret);
+ } else {
+ _upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
+ }
+ return ret;
+}
+
+UPB_INLINE bool upb_Message_SetField(upb_Message* msg,
+ const upb_MiniTableField* field,
+ upb_MessageValue val, upb_Arena* a) {
+ if (upb_MiniTableField_IsExtension(field)) {
+ const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)field;
+ return _upb_Message_SetExtensionField(msg, ext, &val, a);
+ } else {
+ _upb_Message_SetNonExtensionField(msg, field, &val);
+ return true;
+ }
}
UPB_API_INLINE bool upb_Message_GetBool(const upb_Message* msg,
const upb_MiniTableField* field,
bool default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Bool);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- bool ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_1Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue def;
+ def.bool_val = default_val;
+ return upb_Message_GetField(msg, field, def).bool_val;
}
UPB_API_INLINE bool upb_Message_SetBool(upb_Message* msg,
const upb_MiniTableField* field,
bool value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Bool);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_1Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.bool_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE int32_t upb_Message_GetInt32(const upb_Message* msg,
@@ -2669,11 +3146,13 @@
int32_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int32 ||
upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- int32_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.int32_val = default_val;
+ return upb_Message_GetField(msg, field, def).int32_val;
}
UPB_API_INLINE bool upb_Message_SetInt32(upb_Message* msg,
@@ -2681,37 +3160,46 @@
int32_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int32 ||
upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.int32_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE uint32_t upb_Message_GetUInt32(const upb_Message* msg,
const upb_MiniTableField* field,
uint32_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt32);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- uint32_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.uint32_val = default_val;
+ return upb_Message_GetField(msg, field, def).uint32_val;
}
UPB_API_INLINE bool upb_Message_SetUInt32(upb_Message* msg,
const upb_MiniTableField* field,
uint32_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt32);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.uint32_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE void upb_Message_SetClosedEnum(
upb_Message* msg, const upb_MiniTable* msg_mini_table,
const upb_MiniTableField* field, int32_t value) {
UPB_ASSERT(upb_MiniTableField_IsClosedEnum(field));
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
UPB_ASSERT(upb_MiniTableEnum_CheckValue(
upb_MiniTable_GetSubEnumTable(msg_mini_table, field), value));
_upb_Message_SetNonExtensionField(msg, field, &value);
@@ -2719,94 +3207,116 @@
UPB_API_INLINE int64_t upb_Message_GetInt64(const upb_Message* msg,
const upb_MiniTableField* field,
- uint64_t default_val) {
+ int64_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- int64_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.int64_val = default_val;
+ return upb_Message_GetField(msg, field, def).int64_val;
}
UPB_API_INLINE bool upb_Message_SetInt64(upb_Message* msg,
const upb_MiniTableField* field,
int64_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.int64_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE uint64_t upb_Message_GetUInt64(const upb_Message* msg,
const upb_MiniTableField* field,
uint64_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- uint64_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.uint64_val = default_val;
+ return upb_Message_GetField(msg, field, def).uint64_val;
}
UPB_API_INLINE bool upb_Message_SetUInt64(upb_Message* msg,
const upb_MiniTableField* field,
uint64_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.uint64_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE float upb_Message_GetFloat(const upb_Message* msg,
const upb_MiniTableField* field,
float default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Float);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- float ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.float_val = default_val;
+ return upb_Message_GetField(msg, field, def).float_val;
}
UPB_API_INLINE bool upb_Message_SetFloat(upb_Message* msg,
const upb_MiniTableField* field,
float value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Float);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.float_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE double upb_Message_GetDouble(const upb_Message* msg,
const upb_MiniTableField* field,
double default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Double);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- double ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.double_val = default_val;
+ return upb_Message_GetField(msg, field, def).double_val;
}
UPB_API_INLINE bool upb_Message_SetDouble(upb_Message* msg,
const upb_MiniTableField* field,
double value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Double);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.double_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE upb_StringView
upb_Message_GetString(const upb_Message* msg, const upb_MiniTableField* field,
- upb_StringView def_val) {
+ upb_StringView default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_String ||
upb_MiniTableField_CType(field) == kUpb_CType_Bytes);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_StringView);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- upb_StringView ret;
- _upb_Message_GetField(msg, field, &def_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_StringView);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.str_val = default_val;
+ return upb_Message_GetField(msg, field, def).str_val;
}
UPB_API_INLINE bool upb_Message_SetString(upb_Message* msg,
@@ -2814,18 +3324,21 @@
upb_StringView value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_String ||
upb_MiniTableField_CType(field) == kUpb_CType_Bytes);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_StringView);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_StringView);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.str_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE upb_TaggedMessagePtr upb_Message_GetTaggedMessagePtr(
const upb_Message* msg, const upb_MiniTableField* field,
upb_Message* default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) ==
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte));
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
upb_TaggedMessagePtr tagged;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
return tagged;
@@ -2846,10 +3359,11 @@
upb_Message* msg, const upb_MiniTable* mini_table,
const upb_MiniTableField* field, upb_TaggedMessagePtr sub_message) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) ==
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte));
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- UPB_ASSERT(mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ UPB_ASSERT(upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]));
_upb_Message_SetNonExtensionField(msg, field, &sub_message);
}
@@ -2858,7 +3372,8 @@
const upb_MiniTableField* field,
upb_Message* sub_message) {
_upb_Message_SetTaggedMessagePtr(
- msg, mini_table, field, _upb_TaggedMessagePtr_Pack(sub_message, false));
+ msg, mini_table, field,
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(sub_message, false));
}
UPB_API_INLINE upb_Message* upb_Message_GetOrCreateMutableMessage(
@@ -2866,21 +3381,22 @@
const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSERT(arena);
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- upb_Message* sub_message = *UPB_PTR_AT(msg, field->offset, upb_Message*);
+ upb_Message* sub_message =
+ *UPB_PTR_AT(msg, field->UPB_ONLYBITS(offset), upb_Message*);
if (!sub_message) {
- const upb_MiniTable* sub_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* sub_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]);
UPB_ASSERT(sub_mini_table);
sub_message = _upb_Message_New(sub_mini_table, arena);
- *UPB_PTR_AT(msg, field->offset, upb_Message*) = sub_message;
- _upb_Message_SetPresence(msg, field);
+ *UPB_PTR_AT(msg, field->UPB_ONLYBITS(offset), upb_Message*) = sub_message;
+ UPB_PRIVATE(_upb_Message_SetPresence)(msg, field);
}
return sub_message;
}
UPB_API_INLINE const upb_Array* upb_Message_GetArray(
const upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* ret;
const upb_Array* default_val = NULL;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
@@ -2889,20 +3405,23 @@
UPB_API_INLINE upb_Array* upb_Message_GetMutableArray(
upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
return (upb_Array*)upb_Message_GetArray(msg, field);
}
UPB_API_INLINE upb_Array* upb_Message_GetOrCreateMutableArray(
upb_Message* msg, const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSERT(arena);
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* array = upb_Message_GetMutableArray(msg, field);
if (!array) {
- array = _upb_Array_New(arena, 4, _upb_MiniTable_ElementSizeLg2(field));
+ array = UPB_PRIVATE(_upb_Array_New)(
+ arena, 4, UPB_PRIVATE(_upb_MiniTableField_ElemSizeLg2)(field));
// Check again due to: https://godbolt.org/z/7WfaoKG1r
- _upb_MiniTableField_CheckIsArray(field);
- _upb_Message_SetField(msg, field, &array, arena);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
+ upb_MessageValue val;
+ val.array_val = array;
+ upb_Message_SetField(msg, field, val, arena);
}
return array;
}
@@ -2910,7 +3429,7 @@
UPB_API_INLINE void* upb_Message_ResizeArrayUninitialized(
upb_Message* msg, const upb_MiniTableField* field, size_t size,
upb_Arena* arena) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(arr, size, arena)) return NULL;
return _upb_array_ptr(arr);
@@ -2918,7 +3437,7 @@
UPB_API_INLINE const upb_Map* upb_Message_GetMap(
const upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsMap(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
_upb_Message_AssertMapIsUntagged(msg, field);
upb_Map* ret;
const upb_Map* default_val = NULL;
@@ -2936,9 +3455,9 @@
const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
const upb_MiniTableField* map_entry_key_field =
- &map_entry_mini_table->fields[0];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[0];
const upb_MiniTableField* map_entry_value_field =
- &map_entry_mini_table->fields[1];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[1];
return _upb_Message_GetOrCreateMutableMap(
msg, field,
_upb_Map_CTypeSize(upb_MiniTableField_CType(map_entry_key_field)),
@@ -2947,15 +3466,9 @@
}
// Updates a map entry given an entry message.
-upb_MapInsertStatus upb_Message_InsertMapEntry(upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* map_entry_message,
- upb_Arena* arena);
-
-// Compares two messages by serializing them and calling memcmp().
-bool upb_Message_IsExactlyEqual(const upb_Message* m1, const upb_Message* m2,
- const upb_MiniTable* layout);
+bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
+ const upb_MiniTableField* field,
+ upb_Message* map_entry_message, upb_Arena* arena);
#ifdef __cplusplus
} /* extern "C" */
@@ -3017,14 +3530,6 @@
#define UPB_MINI_TABLE_DECODE_H_
-#ifndef UPB_MINI_TABLE_SUB_H_
-#define UPB_MINI_TABLE_SUB_H_
-
-
-typedef union upb_MiniTableSub upb_MiniTableSub;
-
-#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
-
// Export the newer headers, for legacy users. New users should include the
// more specific headers directly.
// IWYU pragma: begin_exports
@@ -3184,8 +3689,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_Build(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.submsg = NULL;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(NULL);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -3193,8 +3697,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildMessage(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTable* submsg, upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.submsg = submsg;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(submsg);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -3202,8 +3705,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildEnum(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTableEnum* subenum, upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.subenum = subenum;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromEnum(subenum);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -3226,6 +3728,80 @@
#endif /* UPB_MINI_TABLE_DECODE_H_ */
+#ifndef UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
+#define UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Extension registry: a dynamic data structure that stores a map of:
+ * (upb_MiniTable, number) -> extension info
+ *
+ * upb_decode() uses upb_ExtensionRegistry to look up extensions while parsing
+ * binary format.
+ *
+ * upb_ExtensionRegistry is part of the mini-table (msglayout) family of
+ * objects. Like all mini-table objects, it is suitable for reflection-less
+ * builds that do not want to expose names into the binary.
+ *
+ * Unlike most mini-table types, upb_ExtensionRegistry requires dynamic memory
+ * allocation and dynamic initialization:
+ * * If reflection is being used, then upb_DefPool will construct an appropriate
+ * upb_ExtensionRegistry automatically.
+ * * For a mini-table only build, the user must manually construct the
+ * upb_ExtensionRegistry and populate it with all of the extensions the user
+ * cares about.
+ * * A third alternative is to manually unpack relevant extensions after the
+ * main parse is complete, similar to how Any works. This is perhaps the
+ * nicest solution from the perspective of reducing dependencies, avoiding
+ * dynamic memory allocation, and avoiding the need to parse uninteresting
+ * extensions. The downsides are:
+ * (1) parse errors are not caught during the main parse
+ * (2) the CPU hit of parsing comes during access, which could cause an
+ * undesirable stutter in application performance.
+ *
+ * Users cannot directly get or put into this map. Users can only add the
+ * extensions from a generated module and pass the extension registry to the
+ * binary decoder.
+ *
+ * A upb_DefPool provides a upb_ExtensionRegistry, so any users who use
+ * reflection do not need to populate a upb_ExtensionRegistry directly.
+ */
+
+typedef struct upb_ExtensionRegistry upb_ExtensionRegistry;
+
+// Creates a upb_ExtensionRegistry in the given arena.
+// The arena must outlive any use of the extreg.
+UPB_API upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
+
+UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension* e);
+
+// Adds the given extension info for the array |e| of size |count| into the
+// registry. If there are any errors, the entire array is backed out.
+// The extensions must outlive the registry.
+// Possible errors include OOM or an extension number that already exists.
+// TODO: There is currently no way to know the exact reason for failure.
+bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
+ const upb_MiniTableExtension** e,
+ size_t count);
+
+// Looks up the extension (if any) defined for message type |t| and field
+// number |num|. Returns the extension if found, otherwise NULL.
+UPB_API const upb_MiniTableExtension* upb_ExtensionRegistry_Lookup(
+ const upb_ExtensionRegistry* r, const upb_MiniTable* t, uint32_t num);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_EXTENSION_REGISTRY_H_ */
+
#ifndef UPB_MINI_TABLE_FILE_H_
#define UPB_MINI_TABLE_FILE_H_
@@ -3233,23 +3809,102 @@
#ifndef UPB_MINI_TABLE_INTERNAL_FILE_H_
#define UPB_MINI_TABLE_INTERNAL_FILE_H_
-
// Must be last.
struct upb_MiniTableFile {
- const struct upb_MiniTable** msgs;
- const struct upb_MiniTableEnum** enums;
- const struct upb_MiniTableExtension** exts;
- int msg_count;
- int enum_count;
- int ext_count;
+ const struct upb_MiniTable** UPB_PRIVATE(msgs);
+ const struct upb_MiniTableEnum** UPB_PRIVATE(enums);
+ const struct upb_MiniTableExtension** UPB_PRIVATE(exts);
+ int UPB_PRIVATE(msg_count);
+ int UPB_PRIVATE(enum_count);
+ int UPB_PRIVATE(ext_count);
};
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(enum_count);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(ext_count);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(msg_count);
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableFile_Enum)(
+ const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(enum_count));
+ return f->UPB_PRIVATE(enums)[i];
+}
+
+UPB_INLINE const struct upb_MiniTableExtension* UPB_PRIVATE(
+ _upb_MiniTableFile_Extension)(const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(ext_count));
+ return f->UPB_PRIVATE(exts)[i];
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableFile_Message)(
+ const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(msg_count));
+ return f->UPB_PRIVATE(msgs)[i];
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
#endif /* UPB_MINI_TABLE_INTERNAL_FILE_H_ */
+// Must be last.
+
typedef struct upb_MiniTableFile upb_MiniTableFile;
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTableFile_Enum(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Enum)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_EnumCount(const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(f);
+}
+
+UPB_API_INLINE const upb_MiniTableExtension* upb_MiniTableFile_Extension(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Extension)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_ExtensionCount(
+ const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(f);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableFile_Message(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Message)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_MessageCount(const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(f);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
#endif /* UPB_MINI_TABLE_FILE_H_ */
// upb_decode: parsing into a upb_Message using a upb_MiniTable.
@@ -3372,6 +4027,72 @@
#endif /* UPB_WIRE_DECODE_H_ */
+// upb_Encode: parsing from a upb_Message using a upb_MiniTable.
+
+#ifndef UPB_WIRE_ENCODE_H_
+#define UPB_WIRE_ENCODE_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+ /* If set, the results of serializing will be deterministic across all
+ * instances of this binary. There are no guarantees across different
+ * binary builds.
+ *
+ * If your proto contains maps, the encoder will need to malloc()/free()
+ * memory during encode. */
+ kUpb_EncodeOption_Deterministic = 1,
+
+ // When set, unknown fields are not printed.
+ kUpb_EncodeOption_SkipUnknown = 2,
+
+ // When set, the encode will fail if any required fields are missing.
+ kUpb_EncodeOption_CheckRequired = 4,
+};
+
+typedef enum {
+ kUpb_EncodeStatus_Ok = 0,
+ kUpb_EncodeStatus_OutOfMemory = 1, // Arena alloc failed
+ kUpb_EncodeStatus_MaxDepthExceeded = 2,
+
+ // kUpb_EncodeOption_CheckRequired failed but the parse otherwise succeeded.
+ kUpb_EncodeStatus_MissingRequired = 3,
+} upb_EncodeStatus;
+
+UPB_INLINE uint32_t upb_EncodeOptions_MaxDepth(uint16_t depth) {
+ return (uint32_t)depth << 16;
+}
+
+UPB_INLINE uint16_t upb_EncodeOptions_GetMaxDepth(uint32_t options) {
+ return options >> 16;
+}
+
+// Enforce an upper bound on recursion depth.
+UPB_INLINE int upb_Encode_LimitDepth(uint32_t encode_options, uint32_t limit) {
+ uint32_t max_depth = upb_EncodeOptions_GetMaxDepth(encode_options);
+ if (max_depth > limit) max_depth = limit;
+ return upb_EncodeOptions_MaxDepth(max_depth) | (encode_options & 0xffff);
+}
+
+UPB_API upb_EncodeStatus upb_Encode(const upb_Message* msg,
+ const upb_MiniTable* l, int options,
+ upb_Arena* arena, char** buf, size_t* size);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_WIRE_ENCODE_H_ */
+
// These are the specialized field parser functions for the fast parser.
// Generated tables will refer to these by name.
//
@@ -3406,8 +4127,8 @@
// - '1' for one-byte tags (field numbers 1-15)
// - '2' for two-byte tags (field numbers 16-2048)
-#ifndef UPB_WIRE_DECODE_FAST_H_
-#define UPB_WIRE_DECODE_FAST_H_
+#ifndef UPB_WIRE_INTERNAL_DECODE_FAST_H_
+#define UPB_WIRE_INTERNAL_DECODE_FAST_H_
// Must be last.
@@ -3475,6 +4196,7 @@
TAGBYTES(r)
#undef F
+#undef UTF8
#undef TAGBYTES
/* sub-message fields *********************************************************/
@@ -3497,9 +4219,9 @@
TAGBYTES(o)
TAGBYTES(r)
-#undef TAGBYTES
-#undef SIZES
#undef F
+#undef SIZES
+#undef TAGBYTES
#undef UPB_PARSE_PARAMS
@@ -3508,73 +4230,7 @@
#endif
-#endif /* UPB_WIRE_DECODE_FAST_H_ */
-
-// upb_Encode: parsing from a upb_Message using a upb_MiniTable.
-
-#ifndef UPB_WIRE_ENCODE_H_
-#define UPB_WIRE_ENCODE_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
- /* If set, the results of serializing will be deterministic across all
- * instances of this binary. There are no guarantees across different
- * binary builds.
- *
- * If your proto contains maps, the encoder will need to malloc()/free()
- * memory during encode. */
- kUpb_EncodeOption_Deterministic = 1,
-
- // When set, unknown fields are not printed.
- kUpb_EncodeOption_SkipUnknown = 2,
-
- // When set, the encode will fail if any required fields are missing.
- kUpb_EncodeOption_CheckRequired = 4,
-};
-
-typedef enum {
- kUpb_EncodeStatus_Ok = 0,
- kUpb_EncodeStatus_OutOfMemory = 1, // Arena alloc failed
- kUpb_EncodeStatus_MaxDepthExceeded = 2,
-
- // kUpb_EncodeOption_CheckRequired failed but the parse otherwise succeeded.
- kUpb_EncodeStatus_MissingRequired = 3,
-} upb_EncodeStatus;
-
-UPB_INLINE uint32_t upb_EncodeOptions_MaxDepth(uint16_t depth) {
- return (uint32_t)depth << 16;
-}
-
-UPB_INLINE uint16_t upb_EncodeOptions_GetMaxDepth(uint32_t options) {
- return options >> 16;
-}
-
-// Enforce an upper bound on recursion depth.
-UPB_INLINE int upb_Encode_LimitDepth(uint32_t encode_options, uint32_t limit) {
- uint32_t max_depth = upb_EncodeOptions_GetMaxDepth(encode_options);
- if (max_depth > limit) max_depth = limit;
- return upb_EncodeOptions_MaxDepth(max_depth) | (encode_options & 0xffff);
-}
-
-UPB_API upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
- int options, upb_Arena* arena, char** buf,
- size_t* size);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_WIRE_ENCODE_H_ */
+#endif /* UPB_WIRE_INTERNAL_DECODE_FAST_H_ */
// IWYU pragma: end_exports
#endif // UPB_GENERATED_CODE_SUPPORT_H_
@@ -4050,108 +4706,6 @@
#endif // UPB_WIRE_EPS_COPY_INPUT_STREAM_H_
-#ifndef UPB_BASE_INTERNAL_LOG2_H_
-#define UPB_BASE_INTERNAL_LOG2_H_
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE int upb_Log2Ceiling(int x) {
- if (x <= 1) return 0;
-#ifdef __GNUC__
- return 32 - __builtin_clz(x - 1);
-#else
- int lg2 = 0;
- while ((1 << lg2) < x) lg2++;
- return lg2;
-#endif
-}
-
-UPB_INLINE int upb_Log2CeilingSize(int x) { return 1 << upb_Log2Ceiling(x); }
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_BASE_INTERNAL_LOG2_H_ */
-
-#ifndef UPB_HASH_INT_TABLE_H_
-#define UPB_HASH_INT_TABLE_H_
-
-
-// Must be last.
-
-typedef struct {
- upb_table t; // For entries that don't fit in the array part.
- const upb_tabval* array; // Array part of the table. See const note above.
- size_t array_size; // Array part size.
- size_t array_count; // Array part number of elements.
-} upb_inttable;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Initialize a table. If memory allocation failed, false is returned and
-// the table is uninitialized.
-bool upb_inttable_init(upb_inttable* table, upb_Arena* a);
-
-// Returns the number of values in the table.
-size_t upb_inttable_count(const upb_inttable* t);
-
-// Inserts the given key into the hashtable with the given value.
-// The key must not already exist in the hash table.
-// The value must not be UINTPTR_MAX.
-//
-// If a table resize was required but memory allocation failed, false is
-// returned and the table is unchanged.
-bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
- upb_Arena* a);
-
-// Looks up key in this table, returning "true" if the key was found.
-// If v is non-NULL, copies the value for this key into *v.
-bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v);
-
-// Removes an item from the table. Returns true if the remove was successful,
-// and stores the removed item in *val if non-NULL.
-bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val);
-
-// Updates an existing entry in an inttable.
-// If the entry does not exist, returns false and does nothing.
-// Unlike insert/remove, this does not invalidate iterators.
-bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val);
-
-// Optimizes the table for the current set of entries, for both memory use and
-// lookup time. Client should call this after all entries have been inserted;
-// inserting more entries is legal, but will likely require a table resize.
-void upb_inttable_compact(upb_inttable* t, upb_Arena* a);
-
-// Iteration over inttable:
-//
-// intptr_t iter = UPB_INTTABLE_BEGIN;
-// uintptr_t key;
-// upb_value val;
-// while (upb_inttable_next(t, &key, &val, &iter)) {
-// // ...
-// }
-
-#define UPB_INTTABLE_BEGIN -1
-
-bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
- intptr_t* iter);
-void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_HASH_INT_TABLE_H_ */
-
#ifndef UPB_JSON_DECODE_H_
#define UPB_JSON_DECODE_H_
@@ -4201,38 +4755,38 @@
extern "C" {
#endif
-typedef struct google_protobuf_FileDescriptorSet google_protobuf_FileDescriptorSet;
-typedef struct google_protobuf_FileDescriptorProto google_protobuf_FileDescriptorProto;
-typedef struct google_protobuf_DescriptorProto google_protobuf_DescriptorProto;
-typedef struct google_protobuf_DescriptorProto_ExtensionRange google_protobuf_DescriptorProto_ExtensionRange;
-typedef struct google_protobuf_DescriptorProto_ReservedRange google_protobuf_DescriptorProto_ReservedRange;
-typedef struct google_protobuf_ExtensionRangeOptions google_protobuf_ExtensionRangeOptions;
-typedef struct google_protobuf_ExtensionRangeOptions_Declaration google_protobuf_ExtensionRangeOptions_Declaration;
-typedef struct google_protobuf_FieldDescriptorProto google_protobuf_FieldDescriptorProto;
-typedef struct google_protobuf_OneofDescriptorProto google_protobuf_OneofDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto google_protobuf_EnumDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange google_protobuf_EnumDescriptorProto_EnumReservedRange;
-typedef struct google_protobuf_EnumValueDescriptorProto google_protobuf_EnumValueDescriptorProto;
-typedef struct google_protobuf_ServiceDescriptorProto google_protobuf_ServiceDescriptorProto;
-typedef struct google_protobuf_MethodDescriptorProto google_protobuf_MethodDescriptorProto;
-typedef struct google_protobuf_FileOptions google_protobuf_FileOptions;
-typedef struct google_protobuf_MessageOptions google_protobuf_MessageOptions;
-typedef struct google_protobuf_FieldOptions google_protobuf_FieldOptions;
-typedef struct google_protobuf_FieldOptions_EditionDefault google_protobuf_FieldOptions_EditionDefault;
-typedef struct google_protobuf_OneofOptions google_protobuf_OneofOptions;
-typedef struct google_protobuf_EnumOptions google_protobuf_EnumOptions;
-typedef struct google_protobuf_EnumValueOptions google_protobuf_EnumValueOptions;
-typedef struct google_protobuf_ServiceOptions google_protobuf_ServiceOptions;
-typedef struct google_protobuf_MethodOptions google_protobuf_MethodOptions;
-typedef struct google_protobuf_UninterpretedOption google_protobuf_UninterpretedOption;
-typedef struct google_protobuf_UninterpretedOption_NamePart google_protobuf_UninterpretedOption_NamePart;
-typedef struct google_protobuf_FeatureSet google_protobuf_FeatureSet;
-typedef struct google_protobuf_FeatureSetDefaults google_protobuf_FeatureSetDefaults;
-typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
-typedef struct google_protobuf_SourceCodeInfo google_protobuf_SourceCodeInfo;
-typedef struct google_protobuf_SourceCodeInfo_Location google_protobuf_SourceCodeInfo_Location;
-typedef struct google_protobuf_GeneratedCodeInfo google_protobuf_GeneratedCodeInfo;
-typedef struct google_protobuf_GeneratedCodeInfo_Annotation google_protobuf_GeneratedCodeInfo_Annotation;
+typedef struct google_protobuf_FileDescriptorSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorSet;
+typedef struct google_protobuf_FileDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorProto;
+typedef struct google_protobuf_DescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto;
+typedef struct google_protobuf_DescriptorProto_ExtensionRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ExtensionRange;
+typedef struct google_protobuf_DescriptorProto_ReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ReservedRange;
+typedef struct google_protobuf_ExtensionRangeOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions;
+typedef struct google_protobuf_ExtensionRangeOptions_Declaration { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions_Declaration;
+typedef struct google_protobuf_FieldDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldDescriptorProto;
+typedef struct google_protobuf_OneofDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto_EnumReservedRange;
+typedef struct google_protobuf_EnumValueDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueDescriptorProto;
+typedef struct google_protobuf_ServiceDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceDescriptorProto;
+typedef struct google_protobuf_MethodDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodDescriptorProto;
+typedef struct google_protobuf_FileOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FileOptions;
+typedef struct google_protobuf_MessageOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MessageOptions;
+typedef struct google_protobuf_FieldOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions;
+typedef struct google_protobuf_FieldOptions_EditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions_EditionDefault;
+typedef struct google_protobuf_OneofOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofOptions;
+typedef struct google_protobuf_EnumOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumOptions;
+typedef struct google_protobuf_EnumValueOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueOptions;
+typedef struct google_protobuf_ServiceOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceOptions;
+typedef struct google_protobuf_MethodOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodOptions;
+typedef struct google_protobuf_UninterpretedOption { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption;
+typedef struct google_protobuf_UninterpretedOption_NamePart { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption_NamePart;
+typedef struct google_protobuf_FeatureSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSet;
+typedef struct google_protobuf_FeatureSetDefaults { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults;
+typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
+typedef struct google_protobuf_SourceCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo;
+typedef struct google_protobuf_SourceCodeInfo_Location { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo_Location;
+typedef struct google_protobuf_GeneratedCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo;
+typedef struct google_protobuf_GeneratedCodeInfo_Annotation { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo_Annotation;
typedef enum {
google_protobuf_EDITION_UNKNOWN = 0,
@@ -4243,7 +4797,8 @@
google_protobuf_EDITION_2023 = 1000,
google_protobuf_EDITION_99997_TEST_ONLY = 99997,
google_protobuf_EDITION_99998_TEST_ONLY = 99998,
- google_protobuf_EDITION_99999_TEST_ONLY = 99999
+ google_protobuf_EDITION_99999_TEST_ONLY = 99999,
+ google_protobuf_EDITION_MAX = 2147483647
} google_protobuf_Edition;
typedef enum {
@@ -4284,8 +4839,8 @@
typedef enum {
google_protobuf_FeatureSet_UTF8_VALIDATION_UNKNOWN = 0,
- google_protobuf_FeatureSet_NONE = 1,
- google_protobuf_FeatureSet_VERIFY = 2
+ google_protobuf_FeatureSet_VERIFY = 2,
+ google_protobuf_FeatureSet_NONE = 3
} google_protobuf_FeatureSet_Utf8Validation;
typedef enum {
@@ -4374,7 +4929,8 @@
UPB_INLINE google_protobuf_FileDescriptorSet* google_protobuf_FileDescriptorSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorSet_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorSet_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4384,32 +4940,32 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorSet_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorSet_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize(const google_protobuf_FileDescriptorSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorSet_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorSet_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize_ex(const google_protobuf_FileDescriptorSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorSet_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorSet_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorSet_clear_file(google_protobuf_FileDescriptorSet* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileDescriptorProto* const* google_protobuf_FileDescriptorSet_file(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4418,32 +4974,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorSet_file_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorSet_has_file(const google_protobuf_FileDescriptorSet* msg) {
- size_t size;
- google_protobuf_FileDescriptorSet_file(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_mutable_file(google_protobuf_FileDescriptorSet* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4452,17 +5003,21 @@
}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_resize_file(google_protobuf_FileDescriptorSet* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorSet_add_file(google_protobuf_FileDescriptorSet* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FileDescriptorProto* sub = (struct google_protobuf_FileDescriptorProto*)_upb_Message_New(&google__protobuf__FileDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4474,7 +5029,8 @@
UPB_INLINE google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4484,62 +5040,64 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize(const google_protobuf_FileDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize_ex(const google_protobuf_FileDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_name(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_name(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_name(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_package(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_package(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_package(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_FileDescriptorProto_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4548,35 +5106,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_message_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_FileDescriptorProto_message_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4585,35 +5138,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_message_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_message_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_message_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_enum_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_FileDescriptorProto_enum_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4622,35 +5170,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_enum_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_enum_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_service(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceDescriptorProto* const* google_protobuf_FileDescriptorProto_service(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ServiceDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4659,35 +5202,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_service_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_service(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_service(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_extension(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_FileDescriptorProto_extension(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4696,65 +5234,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_extension_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_extension(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_options(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_options(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_FileOptions* default_val = NULL;
const google_protobuf_FileOptions* ret;
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_options(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_source_code_info(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_SourceCodeInfo* default_val = NULL;
const google_protobuf_SourceCodeInfo* ret;
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_public_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_public_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4763,35 +5298,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_public_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_public_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_weak_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_weak_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4800,70 +5330,67 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_weak_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_weak_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_syntax(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_syntax(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_syntax(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_edition(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileDescriptorProto_edition(const google_protobuf_FileDescriptorProto* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_edition(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_name(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_package(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_mutable_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4872,22 +5399,26 @@
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_resize_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_dependency(google_protobuf_FileDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_mutable_message_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4896,24 +5427,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_resize_message_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_FileDescriptorProto_add_message_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(&google__protobuf__DescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_mutable_enum_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4922,24 +5457,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_resize_enum_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_FileDescriptorProto_add_enum_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(&google__protobuf__EnumDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_mutable_service(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ServiceDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4948,24 +5487,28 @@
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_resize_service(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ServiceDescriptorProto* google_protobuf_FileDescriptorProto_add_service(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ServiceDescriptorProto* sub = (struct google_protobuf_ServiceDescriptorProto*)_upb_Message_New(&google__protobuf__ServiceDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_mutable_extension(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4974,22 +5517,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_resize_extension(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_FileDescriptorProto_add_extension(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_options(google_protobuf_FileDescriptorProto *msg, google_protobuf_FileOptions* value) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_mutable_options(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FileOptions* sub = (struct google_protobuf_FileOptions*)google_protobuf_FileDescriptorProto_options(msg);
@@ -5001,7 +5548,7 @@
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_source_code_info(google_protobuf_FileDescriptorProto *msg, google_protobuf_SourceCodeInfo* value) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_mutable_source_code_info(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_SourceCodeInfo* sub = (struct google_protobuf_SourceCodeInfo*)google_protobuf_FileDescriptorProto_source_code_info(msg);
@@ -5013,9 +5560,9 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5024,22 +5571,26 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_public_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5048,24 +5599,28 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_weak_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_syntax(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_edition(google_protobuf_FileDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.DescriptorProto */
@@ -5076,7 +5631,8 @@
UPB_INLINE google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5086,47 +5642,48 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize(const google_protobuf_DescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize_ex(const google_protobuf_DescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_DescriptorProto_name(const google_protobuf_DescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_name(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_field(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_field(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5135,35 +5692,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_field_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_field(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_field(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_nested_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_DescriptorProto_nested_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5172,35 +5724,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_nested_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_nested_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_nested_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_enum_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_DescriptorProto_enum_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5209,35 +5756,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_enum_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_enum_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ExtensionRange* const* google_protobuf_DescriptorProto_extension_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ExtensionRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5246,35 +5788,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_extension(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5283,50 +5820,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_options(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MessageOptions* google_protobuf_DescriptorProto_options(const google_protobuf_DescriptorProto* msg) {
const google_protobuf_MessageOptions* default_val = NULL;
const google_protobuf_MessageOptions* ret;
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_options(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_oneof_decl(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofDescriptorProto* const* google_protobuf_DescriptorProto_oneof_decl(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_OneofDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5335,35 +5868,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_oneof_decl_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_oneof_decl(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_oneof_decl(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ReservedRange* const* google_protobuf_DescriptorProto_reserved_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5372,35 +5900,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_DescriptorProto_reserved_name(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5409,36 +5932,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_name_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_name(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_set_name(google_protobuf_DescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_field(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5447,24 +5965,28 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_field(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_field(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_mutable_nested_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5473,24 +5995,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_resize_nested_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_add_nested_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(&google__protobuf__DescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_mutable_enum_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5499,24 +6025,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_resize_enum_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_DescriptorProto_add_enum_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(&google__protobuf__EnumDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_mutable_extension_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ExtensionRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5525,24 +6055,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_resize_extension_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_add_extension_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ExtensionRange* sub = (struct google_protobuf_DescriptorProto_ExtensionRange*)_upb_Message_New(&google__protobuf__DescriptorProto__ExtensionRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_extension(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5551,22 +6085,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_extension(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_extension(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_DescriptorProto_set_options(google_protobuf_DescriptorProto *msg, google_protobuf_MessageOptions* value) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MessageOptions* google_protobuf_DescriptorProto_mutable_options(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MessageOptions* sub = (struct google_protobuf_MessageOptions*)google_protobuf_DescriptorProto_options(msg);
@@ -5578,9 +6116,9 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_mutable_oneof_decl(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_OneofDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5589,24 +6127,28 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_resize_oneof_decl(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_OneofDescriptorProto* google_protobuf_DescriptorProto_add_oneof_decl(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_OneofDescriptorProto* sub = (struct google_protobuf_OneofDescriptorProto*)_upb_Message_New(&google__protobuf__OneofDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_mutable_reserved_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5615,24 +6157,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_resize_reserved_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_add_reserved_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ReservedRange* sub = (struct google_protobuf_DescriptorProto_ReservedRange*)_upb_Message_New(&google__protobuf__DescriptorProto__ReservedRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_mutable_reserved_name(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5641,15 +6187,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_resize_reserved_name(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_DescriptorProto_add_reserved_name(google_protobuf_DescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -5661,7 +6211,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_ExtensionRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5671,80 +6222,83 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize(const google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize_ex(const google_protobuf_DescriptorProto_ExtensionRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_start(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_end(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_options(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const google_protobuf_ExtensionRangeOptions* default_val = NULL;
const google_protobuf_ExtensionRangeOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_start(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_end(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_options(google_protobuf_DescriptorProto_ExtensionRange *msg, google_protobuf_ExtensionRangeOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_mutable_options(google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena) {
struct google_protobuf_ExtensionRangeOptions* sub = (struct google_protobuf_ExtensionRangeOptions*)google_protobuf_DescriptorProto_ExtensionRange_options(msg);
@@ -5763,7 +6317,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_ReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ReservedRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ReservedRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5773,61 +6328,63 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ReservedRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ReservedRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize(const google_protobuf_DescriptorProto_ReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ReservedRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ReservedRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize_ex(const google_protobuf_DescriptorProto_ReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ReservedRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ReservedRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_start(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_end(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_start(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_end(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.ExtensionRangeOptions */
@@ -5838,7 +6395,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions* google_protobuf_ExtensionRangeOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5848,32 +6406,32 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize(const google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize_ex(const google_protobuf_ExtensionRangeOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_declaration(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions_Declaration* const* google_protobuf_ExtensionRangeOptions_declaration(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ExtensionRangeOptions_Declaration* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5882,65 +6440,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_declaration(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_declaration(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_verification(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_verification(const google_protobuf_ExtensionRangeOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_verification(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_features(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_features(const google_protobuf_ExtensionRangeOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_features(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ExtensionRangeOptions_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5949,32 +6504,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_mutable_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ExtensionRangeOptions_Declaration**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5983,26 +6533,30 @@
}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_resize_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_add_declaration(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ExtensionRangeOptions_Declaration* sub = (struct google_protobuf_ExtensionRangeOptions_Declaration*)_upb_Message_New(&google__protobuf__ExtensionRangeOptions__Declaration_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_verification(google_protobuf_ExtensionRangeOptions *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_features(google_protobuf_ExtensionRangeOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_mutable_features(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ExtensionRangeOptions_features(msg);
@@ -6014,9 +6568,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_mutable_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6025,17 +6579,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_resize_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ExtensionRangeOptions_add_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -6047,7 +6605,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_Declaration_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6057,118 +6616,123 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize(const google_protobuf_ExtensionRangeOptions_Declaration* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize_ex(const google_protobuf_ExtensionRangeOptions_Declaration* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_number(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_Declaration_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_full_name(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_type(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_reserved(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_repeated(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_number(google_protobuf_ExtensionRangeOptions_Declaration *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_full_name(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_type(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_reserved(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_repeated(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FieldDescriptorProto */
@@ -6179,7 +6743,8 @@
UPB_INLINE google_protobuf_FieldDescriptorProto* google_protobuf_FieldDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6189,220 +6754,231 @@
int options, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize(const google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize_ex(const google_protobuf_FieldDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_extendee(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_extendee(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_extendee(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_number(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_number(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_number(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_label(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_label(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_label(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_type(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_type_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_default_value(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_default_value(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_default_value(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_options(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_options(const google_protobuf_FieldDescriptorProto* msg) {
const google_protobuf_FieldOptions* default_val = NULL;
const google_protobuf_FieldOptions* ret;
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_options(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_oneof_index(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_json_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_json_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_json_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_proto3_optional(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_extendee(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_number(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_label(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_default_value(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_options(google_protobuf_FieldDescriptorProto *msg, google_protobuf_FieldOptions* value) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_mutable_options(google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FieldOptions* sub = (struct google_protobuf_FieldOptions*)google_protobuf_FieldDescriptorProto_options(msg);
@@ -6414,15 +6990,15 @@
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_oneof_index(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_json_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_proto3_optional(google_protobuf_FieldDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofDescriptorProto */
@@ -6433,7 +7009,8 @@
UPB_INLINE google_protobuf_OneofDescriptorProto* google_protobuf_OneofDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6443,61 +7020,63 @@
int options, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize(const google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize_ex(const google_protobuf_OneofDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_name(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_OneofDescriptorProto_name(const google_protobuf_OneofDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_name(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_options(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_options(const google_protobuf_OneofDescriptorProto* msg) {
const google_protobuf_OneofOptions* default_val = NULL;
const google_protobuf_OneofOptions* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_options(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_name(google_protobuf_OneofDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_options(google_protobuf_OneofDescriptorProto *msg, google_protobuf_OneofOptions* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_mutable_options(google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_OneofOptions* sub = (struct google_protobuf_OneofOptions*)google_protobuf_OneofDescriptorProto_options(msg);
@@ -6516,7 +7095,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto* google_protobuf_EnumDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6526,47 +7106,48 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize(const google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize_ex(const google_protobuf_EnumDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumDescriptorProto_name(const google_protobuf_EnumDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_name(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_value(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueDescriptorProto* const* google_protobuf_EnumDescriptorProto_value(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumValueDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6575,50 +7156,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_value_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_value(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_value(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_options(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_options(const google_protobuf_EnumDescriptorProto* msg) {
const google_protobuf_EnumOptions* default_val = NULL;
const google_protobuf_EnumOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_options(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_range(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto_EnumReservedRange* const* google_protobuf_EnumDescriptorProto_reserved_range(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto_EnumReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6627,35 +7204,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_range(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_EnumDescriptorProto_reserved_name(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6664,36 +7236,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_name(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_name(google_protobuf_EnumDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_mutable_value(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumValueDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6702,22 +7269,26 @@
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_resize_value(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumDescriptorProto_add_value(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumValueDescriptorProto* sub = (struct google_protobuf_EnumValueDescriptorProto*)_upb_Message_New(&google__protobuf__EnumValueDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_options(google_protobuf_EnumDescriptorProto *msg, google_protobuf_EnumOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_mutable_options(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumOptions* sub = (struct google_protobuf_EnumOptions*)google_protobuf_EnumDescriptorProto_options(msg);
@@ -6729,9 +7300,9 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_mutable_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6740,24 +7311,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_resize_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_add_reserved_range(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto_EnumReservedRange* sub = (struct google_protobuf_EnumDescriptorProto_EnumReservedRange*)_upb_Message_New(&google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_mutable_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6766,15 +7341,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_resize_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_add_reserved_name(google_protobuf_EnumDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -6786,7 +7365,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_EnumReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6796,61 +7376,63 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize_ex(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_start(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_end(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_start(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_end(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.EnumValueDescriptorProto */
@@ -6861,7 +7443,8 @@
UPB_INLINE google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumValueDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6871,80 +7454,83 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize(const google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize_ex(const google_protobuf_EnumValueDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_name(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumValueDescriptorProto_name(const google_protobuf_EnumValueDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_name(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_number(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumValueDescriptorProto_number(const google_protobuf_EnumValueDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_number(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_options(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const google_protobuf_EnumValueOptions* default_val = NULL;
const google_protobuf_EnumValueOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_name(google_protobuf_EnumValueDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_number(google_protobuf_EnumValueDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_options(google_protobuf_EnumValueDescriptorProto *msg, google_protobuf_EnumValueOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_mutable_options(google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumValueOptions* sub = (struct google_protobuf_EnumValueOptions*)google_protobuf_EnumValueDescriptorProto_options(msg);
@@ -6963,7 +7549,8 @@
UPB_INLINE google_protobuf_ServiceDescriptorProto* google_protobuf_ServiceDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6973,47 +7560,48 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize(const google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize_ex(const google_protobuf_ServiceDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_name(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ServiceDescriptorProto_name(const google_protobuf_ServiceDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_name(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_method(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodDescriptorProto* const* google_protobuf_ServiceDescriptorProto_method(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_MethodDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7022,51 +7610,47 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceDescriptorProto_method_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_method(const google_protobuf_ServiceDescriptorProto* msg) {
- size_t size;
- google_protobuf_ServiceDescriptorProto_method(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_options(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_options(const google_protobuf_ServiceDescriptorProto* msg) {
const google_protobuf_ServiceOptions* default_val = NULL;
const google_protobuf_ServiceOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_options(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_name(google_protobuf_ServiceDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_mutable_method(google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_MethodDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7075,22 +7659,26 @@
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_resize_method(google_protobuf_ServiceDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_MethodDescriptorProto* google_protobuf_ServiceDescriptorProto_add_method(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_MethodDescriptorProto* sub = (struct google_protobuf_MethodDescriptorProto*)_upb_Message_New(&google__protobuf__MethodDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_options(google_protobuf_ServiceDescriptorProto *msg, google_protobuf_ServiceOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_mutable_options(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_ServiceOptions* sub = (struct google_protobuf_ServiceOptions*)google_protobuf_ServiceDescriptorProto_options(msg);
@@ -7109,7 +7697,8 @@
UPB_INLINE google_protobuf_MethodDescriptorProto* google_protobuf_MethodDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -7119,129 +7708,135 @@
int options, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize(const google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize_ex(const google_protobuf_MethodDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_name(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_name(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_name(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_input_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_input_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_input_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_output_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_output_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_output_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_options(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_options(const google_protobuf_MethodDescriptorProto* msg) {
const google_protobuf_MethodOptions* default_val = NULL;
const google_protobuf_MethodOptions* ret;
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_options(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_client_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_server_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_name(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_input_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_output_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_options(google_protobuf_MethodDescriptorProto *msg, google_protobuf_MethodOptions* value) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_mutable_options(google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MethodOptions* sub = (struct google_protobuf_MethodOptions*)google_protobuf_MethodDescriptorProto_options(msg);
@@ -7253,11 +7848,11 @@
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_client_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_server_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FileOptions */
@@ -7268,7 +7863,8 @@
UPB_INLINE google_protobuf_FileOptions* google_protobuf_FileOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -7278,347 +7874,352 @@
int options, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize(const google_protobuf_FileOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize_ex(const google_protobuf_FileOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_outer_classname(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_outer_classname(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_outer_classname(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_optimize_for(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileOptions_optimize_for(const google_protobuf_FileOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_optimize_for(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_multiple_files(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_multiple_files(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_multiple_files(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_go_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_go_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_go_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_py_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_py_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_py_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generate_equals_and_hash(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_deprecated(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_deprecated(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_deprecated(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_string_check_utf8(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_enable_arenas(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
bool default_val = true;
bool ret;
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_objc_class_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_objc_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_objc_class_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_csharp_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_csharp_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_csharp_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_swift_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_swift_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_swift_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_class_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_class_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
-}
-UPB_INLINE void google_protobuf_FileOptions_clear_php_generic_services(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
-}
-UPB_INLINE bool google_protobuf_FileOptions_php_generic_services(const google_protobuf_FileOptions* msg) {
- bool default_val = false;
- bool ret;
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
- return ret;
-}
-UPB_INLINE bool google_protobuf_FileOptions_has_php_generic_services(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_metadata_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_ruby_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_ruby_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_ruby_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_features(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FileOptions_features(const google_protobuf_FileOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_features(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_uninterpreted_option(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FileOptions_uninterpreted_option(const google_protobuf_FileOptions* msg, size_t* size) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7626,111 +8227,102 @@
}
}
UPB_INLINE const upb_Array* _google_protobuf_FileOptions_uninterpreted_option_upb_array(const google_protobuf_FileOptions* msg, size_t* size) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileOptions_has_uninterpreted_option(const google_protobuf_FileOptions* msg) {
- size_t size;
- google_protobuf_FileOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileOptions_set_java_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_outer_classname(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_optimize_for(google_protobuf_FileOptions *msg, int32_t value) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_multiple_files(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_go_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_py_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generate_equals_and_hash(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_deprecated(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_string_check_utf8(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_enable_arenas(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_objc_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_csharp_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_swift_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
-}
-UPB_INLINE void google_protobuf_FileOptions_set_php_generic_services(google_protobuf_FileOptions *msg, bool value) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_metadata_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_ruby_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_features(google_protobuf_FileOptions *msg, google_protobuf_FeatureSet* value) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FileOptions_mutable_features(google_protobuf_FileOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FileOptions_features(msg);
@@ -7741,10 +8333,10 @@
return sub;
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_mutable_uninterpreted_option(google_protobuf_FileOptions* msg, size_t* size) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7752,18 +8344,22 @@
}
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_resize_uninterpreted_option(google_protobuf_FileOptions* msg, size_t size, upb_Arena* arena) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FileOptions_add_uninterpreted_option(google_protobuf_FileOptions* msg, upb_Arena* arena) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -7775,7 +8371,8 @@
UPB_INLINE google_protobuf_MessageOptions* google_protobuf_MessageOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MessageOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MessageOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -7785,122 +8382,128 @@
int options, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MessageOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MessageOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize(const google_protobuf_MessageOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MessageOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MessageOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize_ex(const google_protobuf_MessageOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MessageOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MessageOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MessageOptions_clear_message_set_wire_format(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_no_standard_descriptor_accessor(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_map_entry(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_map_entry(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_map_entry(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_features(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MessageOptions_features(const google_protobuf_MessageOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_features(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_uninterpreted_option(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MessageOptions_uninterpreted_option(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -7909,50 +8512,45 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_upb_array(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MessageOptions_has_uninterpreted_option(const google_protobuf_MessageOptions* msg) {
- size_t size;
- google_protobuf_MessageOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MessageOptions_set_message_set_wire_format(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_no_standard_descriptor_accessor(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_map_entry(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_features(google_protobuf_MessageOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MessageOptions_mutable_features(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MessageOptions_features(msg);
@@ -7964,9 +8562,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_mutable_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -7975,17 +8573,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_resize_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MessageOptions_add_uninterpreted_option(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -7997,7 +8599,8 @@
UPB_INLINE google_protobuf_FieldOptions* google_protobuf_FieldOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8007,167 +8610,176 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize(const google_protobuf_FieldOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize_ex(const google_protobuf_FieldOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_clear_ctype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_ctype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_ctype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_packed(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_packed(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_packed(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_deprecated(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_deprecated(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_deprecated(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_jstype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_jstype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_jstype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_weak(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_weak(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_weak(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_unverified_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_unverified_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_unverified_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_debug_redact(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_debug_redact(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_debug_redact(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_retention(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_retention(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_retention(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_targets(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FieldOptions_targets(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8176,35 +8788,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_targets_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_targets(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_targets(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_edition_defaults(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions_EditionDefault* const* google_protobuf_FieldOptions_edition_defaults(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldOptions_EditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8213,50 +8820,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_edition_defaults_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_edition_defaults(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_edition_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_features(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FieldOptions_features(const google_protobuf_FieldOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_features(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_uninterpreted_option(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FieldOptions_uninterpreted_option(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8265,68 +8868,63 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_uninterpreted_option(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_set_ctype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_packed(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_deprecated(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_jstype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_weak(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_unverified_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_debug_redact(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_retention(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_mutable_targets(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8335,22 +8933,26 @@
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_resize_targets(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FieldOptions_add_targets(google_protobuf_FieldOptions* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_mutable_edition_defaults(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldOptions_EditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8359,22 +8961,26 @@
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_resize_edition_defaults(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_add_edition_defaults(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldOptions_EditionDefault* sub = (struct google_protobuf_FieldOptions_EditionDefault*)_upb_Message_New(&google__protobuf__FieldOptions__EditionDefault_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FieldOptions_set_features(google_protobuf_FieldOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FieldOptions_mutable_features(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FieldOptions_features(msg);
@@ -8386,9 +8992,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_mutable_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8397,17 +9003,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_resize_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FieldOptions_add_uninterpreted_option(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8419,7 +9029,8 @@
UPB_INLINE google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_EditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions__EditionDefault_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions__EditionDefault_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8429,61 +9040,63 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions__EditionDefault_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions__EditionDefault_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize(const google_protobuf_FieldOptions_EditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions__EditionDefault_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions__EditionDefault_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize_ex(const google_protobuf_FieldOptions_EditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions__EditionDefault_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions__EditionDefault_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_value(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldOptions_EditionDefault_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_edition(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_EditionDefault_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_value(google_protobuf_FieldOptions_EditionDefault *msg, upb_StringView value) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_edition(google_protobuf_FieldOptions_EditionDefault *msg, int32_t value) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofOptions */
@@ -8494,7 +9107,8 @@
UPB_INLINE google_protobuf_OneofOptions* google_protobuf_OneofOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8504,47 +9118,48 @@
int options, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize(const google_protobuf_OneofOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize_ex(const google_protobuf_OneofOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofOptions_clear_features(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_OneofOptions_features(const google_protobuf_OneofOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofOptions_has_features(const google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofOptions_clear_uninterpreted_option(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_OneofOptions_uninterpreted_option(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8553,30 +9168,25 @@
}
UPB_INLINE const upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_upb_array(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_OneofOptions_has_uninterpreted_option(const google_protobuf_OneofOptions* msg) {
- size_t size;
- google_protobuf_OneofOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_OneofOptions_set_features(google_protobuf_OneofOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_OneofOptions_mutable_features(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_OneofOptions_features(msg);
@@ -8588,9 +9198,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_mutable_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8599,17 +9209,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_resize_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_OneofOptions_add_uninterpreted_option(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8621,7 +9235,8 @@
UPB_INLINE google_protobuf_EnumOptions* google_protobuf_EnumOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8631,92 +9246,96 @@
int options, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize(const google_protobuf_EnumOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize_ex(const google_protobuf_EnumOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumOptions_clear_allow_alias(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_allow_alias(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_allow_alias(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_features(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumOptions_features(const google_protobuf_EnumOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_features(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_uninterpreted_option(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumOptions_uninterpreted_option(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8725,42 +9344,37 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_upb_array(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumOptions_has_uninterpreted_option(const google_protobuf_EnumOptions* msg) {
- size_t size;
- google_protobuf_EnumOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumOptions_set_allow_alias(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_features(google_protobuf_EnumOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumOptions_mutable_features(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumOptions_features(msg);
@@ -8772,9 +9386,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_mutable_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8783,17 +9397,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_resize_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumOptions_add_uninterpreted_option(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8805,7 +9423,8 @@
UPB_INLINE google_protobuf_EnumValueOptions* google_protobuf_EnumValueOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8815,77 +9434,80 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize(const google_protobuf_EnumValueOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize_ex(const google_protobuf_EnumValueOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_deprecated(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_deprecated(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_deprecated(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_features(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_features(const google_protobuf_EnumValueOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_features(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_debug_redact(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_debug_redact(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_debug_redact(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_uninterpreted_option(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumValueOptions_uninterpreted_option(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -8894,34 +9516,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumValueOptions_has_uninterpreted_option(const google_protobuf_EnumValueOptions* msg) {
- size_t size;
- google_protobuf_EnumValueOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumValueOptions_set_deprecated(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_features(google_protobuf_EnumValueOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_mutable_features(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumValueOptions_features(msg);
@@ -8933,13 +9550,13 @@
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_debug_redact(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_mutable_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -8948,17 +9565,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_resize_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumValueOptions_add_uninterpreted_option(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -8970,7 +9591,8 @@
UPB_INLINE google_protobuf_ServiceOptions* google_protobuf_ServiceOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -8980,62 +9602,64 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize(const google_protobuf_ServiceOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize_ex(const google_protobuf_ServiceOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_deprecated(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ServiceOptions_deprecated(const google_protobuf_ServiceOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_deprecated(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_features(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ServiceOptions_features(const google_protobuf_ServiceOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_features(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_uninterpreted_option(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ServiceOptions_uninterpreted_option(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9044,34 +9668,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceOptions_has_uninterpreted_option(const google_protobuf_ServiceOptions* msg) {
- size_t size;
- google_protobuf_ServiceOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceOptions_set_deprecated(google_protobuf_ServiceOptions *msg, bool value) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ServiceOptions_set_features(google_protobuf_ServiceOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ServiceOptions_mutable_features(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ServiceOptions_features(msg);
@@ -9083,9 +9702,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_mutable_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9094,17 +9713,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_resize_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ServiceOptions_add_uninterpreted_option(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -9116,7 +9739,8 @@
UPB_INLINE google_protobuf_MethodOptions* google_protobuf_MethodOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9126,77 +9750,80 @@
int options, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize(const google_protobuf_MethodOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize_ex(const google_protobuf_MethodOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodOptions_clear_deprecated(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodOptions_deprecated(const google_protobuf_MethodOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_deprecated(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_idempotency_level(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_MethodOptions_idempotency_level(const google_protobuf_MethodOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_idempotency_level(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_features(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MethodOptions_features(const google_protobuf_MethodOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_features(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_uninterpreted_option(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MethodOptions_uninterpreted_option(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9205,38 +9832,33 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_upb_array(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MethodOptions_has_uninterpreted_option(const google_protobuf_MethodOptions* msg) {
- size_t size;
- google_protobuf_MethodOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MethodOptions_set_deprecated(google_protobuf_MethodOptions *msg, bool value) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_idempotency_level(google_protobuf_MethodOptions *msg, int32_t value) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_features(google_protobuf_MethodOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MethodOptions_mutable_features(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MethodOptions_features(msg);
@@ -9248,9 +9870,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_mutable_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9259,17 +9881,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_resize_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MethodOptions_add_uninterpreted_option(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -9281,7 +9907,8 @@
UPB_INLINE google_protobuf_UninterpretedOption* google_protobuf_UninterpretedOption_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9291,32 +9918,32 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize(const google_protobuf_UninterpretedOption* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize_ex(const google_protobuf_UninterpretedOption* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_name(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption_NamePart* const* google_protobuf_UninterpretedOption_name(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption_NamePart* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9325,122 +9952,123 @@
}
UPB_INLINE const upb_Array* _google_protobuf_UninterpretedOption_name_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_UninterpretedOption_has_name(const google_protobuf_UninterpretedOption* msg) {
- size_t size;
- google_protobuf_UninterpretedOption_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_identifier_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_identifier_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_identifier_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_positive_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE uint64_t google_protobuf_UninterpretedOption_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
uint64_t default_val = (uint64_t)0ull;
uint64_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_negative_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int64_t google_protobuf_UninterpretedOption_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
int64_t default_val = (int64_t)0ll;
int64_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_double_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE double google_protobuf_UninterpretedOption_double_value(const google_protobuf_UninterpretedOption* msg) {
double default_val = 0;
double ret;
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_double_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_string_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_string_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_string_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_aggregate_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_mutable_name(google_protobuf_UninterpretedOption* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption_NamePart**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9449,42 +10077,46 @@
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_resize_name(google_protobuf_UninterpretedOption* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_add_name(google_protobuf_UninterpretedOption* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption_NamePart* sub = (struct google_protobuf_UninterpretedOption_NamePart*)_upb_Message_New(&google__protobuf__UninterpretedOption__NamePart_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_identifier_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_positive_int_value(google_protobuf_UninterpretedOption *msg, uint64_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_negative_int_value(google_protobuf_UninterpretedOption *msg, int64_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_double_value(google_protobuf_UninterpretedOption *msg, double value) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_string_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_aggregate_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.UninterpretedOption.NamePart */
@@ -9495,7 +10127,8 @@
UPB_INLINE google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_NamePart_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption__NamePart_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption__NamePart_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9505,61 +10138,63 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption__NamePart_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption__NamePart_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize(const google_protobuf_UninterpretedOption_NamePart* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption__NamePart_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption__NamePart_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize_ex(const google_protobuf_UninterpretedOption_NamePart* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption__NamePart_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption__NamePart_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_name_part(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_NamePart_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_is_extension(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_name_part(google_protobuf_UninterpretedOption_NamePart *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_is_extension(google_protobuf_UninterpretedOption_NamePart *msg, bool value) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSet */
@@ -9570,7 +10205,8 @@
UPB_INLINE google_protobuf_FeatureSet* google_protobuf_FeatureSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSet_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSet_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9580,137 +10216,143 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSet_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSet_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize(const google_protobuf_FeatureSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSet_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSet_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize_ex(const google_protobuf_FeatureSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSet_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSet_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSet_clear_field_presence(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_field_presence(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_field_presence(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_enum_type(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_enum_type(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_enum_type(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_repeated_field_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_utf8_validation(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_utf8_validation(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_utf8_validation(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_message_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_message_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_message_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_json_format(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_json_format(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_json_format(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_set_field_presence(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_enum_type(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_repeated_field_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_utf8_validation(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_message_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_json_format(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults */
@@ -9721,7 +10363,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults* google_protobuf_FeatureSetDefaults_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9731,32 +10374,32 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize(const google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize_ex(const google_protobuf_FeatureSetDefaults* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_defaults(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const* google_protobuf_FeatureSetDefaults_defaults(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9765,62 +10408,59 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FeatureSetDefaults_defaults_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_defaults(const google_protobuf_FeatureSetDefaults* msg) {
- size_t size;
- google_protobuf_FeatureSetDefaults_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_minimum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_maximum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_mutable_defaults(google_protobuf_FeatureSetDefaults* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -9829,26 +10469,30 @@
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_resize_defaults(google_protobuf_FeatureSetDefaults* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_add_defaults(google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* sub = (struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault*)_upb_Message_New(&google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_minimum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_maximum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault */
@@ -9859,7 +10503,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9869,57 +10514,59 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize_ex(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_mutable_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(msg);
@@ -9931,7 +10578,7 @@
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.SourceCodeInfo */
@@ -9942,7 +10589,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo* google_protobuf_SourceCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -9952,32 +10600,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize(const google_protobuf_SourceCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize_ex(const google_protobuf_SourceCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_clear_location(google_protobuf_SourceCodeInfo* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo_Location* const* google_protobuf_SourceCodeInfo_location(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_SourceCodeInfo_Location* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -9986,32 +10634,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_location_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_has_location(const google_protobuf_SourceCodeInfo* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_location(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_mutable_location(google_protobuf_SourceCodeInfo* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_SourceCodeInfo_Location**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10020,17 +10663,21 @@
}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_resize_location(google_protobuf_SourceCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_add_location(google_protobuf_SourceCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_SourceCodeInfo_Location* sub = (struct google_protobuf_SourceCodeInfo_Location*)_upb_Message_New(&google__protobuf__SourceCodeInfo__Location_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -10042,7 +10689,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_Location_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo__Location_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo__Location_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -10052,32 +10700,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo__Location_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo__Location_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize(const google_protobuf_SourceCodeInfo_Location* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo__Location_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo__Location_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize_ex(const google_protobuf_SourceCodeInfo_Location* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo__Location_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo__Location_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_path(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_path(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -10086,35 +10734,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_path_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_path(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_span(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_span(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -10123,65 +10766,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_span_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_span(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_span(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_trailing_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_SourceCodeInfo_Location_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -10190,32 +10830,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_leading_detached_comments(msg, &size);
- return size != 0;
-}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_path(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10224,22 +10859,26 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_path(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_path(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_span(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10248,30 +10887,34 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_span(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_span(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_leading_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_trailing_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_mutable_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10280,15 +10923,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_resize_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -10300,7 +10947,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo* google_protobuf_GeneratedCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -10310,32 +10958,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize(const google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize_ex(const google_protobuf_GeneratedCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_clear_annotation(google_protobuf_GeneratedCodeInfo* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_GeneratedCodeInfo_Annotation* const* google_protobuf_GeneratedCodeInfo_annotation(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_GeneratedCodeInfo_Annotation* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -10344,32 +10992,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_has_annotation(const google_protobuf_GeneratedCodeInfo* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_annotation(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_mutable_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_GeneratedCodeInfo_Annotation**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10378,17 +11021,21 @@
}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_resize_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_add_annotation(google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_GeneratedCodeInfo_Annotation* sub = (struct google_protobuf_GeneratedCodeInfo_Annotation*)_upb_Message_New(&google__protobuf__GeneratedCodeInfo__Annotation_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -10400,7 +11047,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_Annotation_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -10410,32 +11058,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize(const google_protobuf_GeneratedCodeInfo_Annotation* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize_ex(const google_protobuf_GeneratedCodeInfo_Annotation* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_path(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_GeneratedCodeInfo_Annotation_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -10444,92 +11092,91 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_Annotation_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_source_file(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_GeneratedCodeInfo_Annotation_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_begin(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_end(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_semantic(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_mutable_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -10538,37 +11185,41 @@
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_resize_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_add_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_source_file(google_protobuf_GeneratedCodeInfo_Annotation *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_begin(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_end(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_semantic(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* Max size 32 is google.protobuf.FileOptions */
/* Max size 64 is google.protobuf.FileOptions */
-#define _UPB_MAXOPT_SIZE UPB_SIZE(112, 200)
+#define _UPB_MAXOPT_SIZE UPB_SIZE(104, 192)
#ifdef __cplusplus
} /* extern "C" */
@@ -10668,6 +11319,11 @@
UPB_API const UPB_DESC(FeatureSetDefaults) *
upb_DefPool_FeatureSetDefaults(const upb_DefPool* s);
+UPB_API bool upb_DefPool_SetFeatureSetDefaults(upb_DefPool* s,
+ const char* serialized_defaults,
+ size_t serialized_len,
+ upb_Status* status);
+
UPB_API const upb_MessageDef* upb_DefPool_FindMessageByName(
const upb_DefPool* s, const char* sym);
@@ -10690,7 +11346,7 @@
const upb_FieldDef* upb_DefPool_FindExtensionByMiniTable(
const upb_DefPool* s, const upb_MiniTableExtension* ext);
-const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
+UPB_API const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
const char* sym);
const upb_FieldDef* upb_DefPool_FindExtensionByNameWithSize(
@@ -10713,7 +11369,7 @@
upb_DefPool* s, const UPB_DESC(FileDescriptorProto) * file_proto,
upb_Status* status);
-const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
+UPB_API const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
const upb_DefPool* s);
const upb_FieldDef** upb_DefPool_GetAllExtensions(const upb_DefPool* s,
@@ -10914,6 +11570,8 @@
extern "C" {
#endif
+UPB_API const char* upb_FileDef_EditionName(int edition);
+
const upb_FileDef* upb_FileDef_Dependency(const upb_FileDef* f, int i);
int upb_FileDef_DependencyCount(const upb_FileDef* f);
bool upb_FileDef_HasOptions(const upb_FileDef* f);
@@ -11470,109 +12128,6 @@
#endif // UPB_PORT_VSNPRINTF_COMPAT_H_
-#ifndef UPB_LEX_STRTOD_H_
-#define UPB_LEX_STRTOD_H_
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-double _upb_NoLocaleStrtod(const char *str, char **endptr);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /* UPB_LEX_STRTOD_H_ */
-
-#ifndef UPB_MEM_INTERNAL_ARENA_H_
-#define UPB_MEM_INTERNAL_ARENA_H_
-
-
-// Must be last.
-
-typedef struct _upb_MemBlock _upb_MemBlock;
-
-struct upb_Arena {
- _upb_ArenaHead head;
-
- // upb_alloc* together with a low bit which signals if there is an initial
- // block.
- uintptr_t block_alloc;
-
- // When multiple arenas are fused together, each arena points to a parent
- // arena (root points to itself). The root tracks how many live arenas
- // reference it.
-
- // The low bit is tagged:
- // 0: pointer to parent
- // 1: count, left shifted by one
- UPB_ATOMIC(uintptr_t) parent_or_count;
-
- // All nodes that are fused together are in a singly-linked list.
- UPB_ATOMIC(upb_Arena*) next; // NULL at end of list.
-
- // The last element of the linked list. This is present only as an
- // optimization, so that we do not have to iterate over all members for every
- // fuse. Only significant for an arena root. In other cases it is ignored.
- UPB_ATOMIC(upb_Arena*) tail; // == self when no other list members.
-
- // Linked list of blocks to free/cleanup. Atomic only for the benefit of
- // upb_Arena_SpaceAllocated().
- UPB_ATOMIC(_upb_MemBlock*) blocks;
-};
-
-UPB_INLINE bool _upb_Arena_IsTaggedRefcount(uintptr_t parent_or_count) {
- return (parent_or_count & 1) == 1;
-}
-
-UPB_INLINE bool _upb_Arena_IsTaggedPointer(uintptr_t parent_or_count) {
- return (parent_or_count & 1) == 0;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_RefCountFromTagged(uintptr_t parent_or_count) {
- UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
- return parent_or_count >> 1;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_TaggedFromRefcount(uintptr_t refcount) {
- uintptr_t parent_or_count = (refcount << 1) | 1;
- UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
- return parent_or_count;
-}
-
-UPB_INLINE upb_Arena* _upb_Arena_PointerFromTagged(uintptr_t parent_or_count) {
- UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
- return (upb_Arena*)parent_or_count;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_TaggedFromPointer(upb_Arena* a) {
- uintptr_t parent_or_count = (uintptr_t)a;
- UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
- return parent_or_count;
-}
-
-UPB_INLINE upb_alloc* upb_Arena_BlockAlloc(upb_Arena* arena) {
- return (upb_alloc*)(arena->block_alloc & ~0x1);
-}
-
-UPB_INLINE uintptr_t upb_Arena_MakeBlockAlloc(upb_alloc* alloc,
- bool has_initial) {
- uintptr_t alloc_uint = (uintptr_t)alloc;
- UPB_ASSERT((alloc_uint & 1) == 0);
- return alloc_uint | (has_initial ? 1 : 0);
-}
-
-UPB_INLINE bool upb_Arena_HasInitialBlock(upb_Arena* arena) {
- return arena->block_alloc & 0x1;
-}
-
-
-#endif /* UPB_MEM_INTERNAL_ARENA_H_ */
-
#ifndef UPB_PORT_ATOMIC_H_
#define UPB_PORT_ATOMIC_H_
@@ -11648,300 +12203,49 @@
#endif // UPB_PORT_ATOMIC_H_
-#ifndef UPB_WIRE_READER_H_
-#define UPB_WIRE_READER_H_
-
-
-#ifndef UPB_WIRE_INTERNAL_SWAP_H_
-#define UPB_WIRE_INTERNAL_SWAP_H_
+#ifndef UPB_MESSAGE_COMPAT_H_
+#define UPB_MESSAGE_COMPAT_H_
#include <stdint.h>
+
// Must be last.
+// upb does not support mixing minitables from different sources but these
+// functions are still used by some existing users so for now we make them
+// available here. This may or may not change in the future so do not add
+// them to new code.
+
#ifdef __cplusplus
extern "C" {
#endif
-UPB_INLINE bool _upb_IsLittleEndian(void) {
- int x = 1;
- return *(char*)&x == 1;
-}
+const upb_Extension* upb_Message_ExtensionByIndex(const upb_Message* msg,
+ size_t index);
-UPB_INLINE uint32_t _upb_BigEndian_Swap32(uint32_t val) {
- if (_upb_IsLittleEndian()) return val;
-
- return ((val & 0xff) << 24) | ((val & 0xff00) << 8) |
- ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);
-}
-
-UPB_INLINE uint64_t _upb_BigEndian_Swap64(uint64_t val) {
- if (_upb_IsLittleEndian()) return val;
-
- return ((uint64_t)_upb_BigEndian_Swap32((uint32_t)val) << 32) |
- _upb_BigEndian_Swap32((uint32_t)(val >> 32));
-}
+// Returns the extension with the given field number, or NULL on failure.
+const upb_Extension* upb_Message_FindExtensionByNumber(const upb_Message* msg,
+ uint32_t field_number);
#ifdef __cplusplus
} /* extern "C" */
#endif
-#endif /* UPB_WIRE_INTERNAL_SWAP_H_ */
-
-#ifndef UPB_WIRE_TYPES_H_
-#define UPB_WIRE_TYPES_H_
-
-// A list of types as they are encoded on the wire.
-typedef enum {
- kUpb_WireType_Varint = 0,
- kUpb_WireType_64Bit = 1,
- kUpb_WireType_Delimited = 2,
- kUpb_WireType_StartGroup = 3,
- kUpb_WireType_EndGroup = 4,
- kUpb_WireType_32Bit = 5
-} upb_WireType;
-
-#endif /* UPB_WIRE_TYPES_H_ */
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// The upb_WireReader interface is suitable for general-purpose parsing of
-// protobuf binary wire format. It is designed to be used along with
-// upb_EpsCopyInputStream for buffering, and all parsing routines in this file
-// assume that at least kUpb_EpsCopyInputStream_SlopBytes worth of data is
-// available to read without any bounds checks.
-
-#define kUpb_WireReader_WireTypeMask 7
-#define kUpb_WireReader_WireTypeBits 3
-
-typedef struct {
- const char* ptr;
- uint64_t val;
-} _upb_WireReader_ReadLongVarintRet;
-
-_upb_WireReader_ReadLongVarintRet _upb_WireReader_ReadLongVarint(
- const char* ptr, uint64_t val);
-
-static UPB_FORCEINLINE const char* _upb_WireReader_ReadVarint(const char* ptr,
- uint64_t* val,
- int maxlen,
- uint64_t maxval) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = (uint32_t)byte;
- return ptr + 1;
- }
- const char* start = ptr;
- _upb_WireReader_ReadLongVarintRet res =
- _upb_WireReader_ReadLongVarint(ptr, byte);
- if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) ||
- res.val > maxval) {
- return NULL; // Malformed.
- }
- *val = res.val;
- return res.ptr;
-}
-
-// Parses a tag into `tag`, and returns a pointer past the end of the tag, or
-// NULL if there was an error in the tag data.
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-static UPB_FORCEINLINE const char* upb_WireReader_ReadTag(const char* ptr,
- uint32_t* tag) {
- uint64_t val;
- ptr = _upb_WireReader_ReadVarint(ptr, &val, 5, UINT32_MAX);
- if (!ptr) return NULL;
- *tag = val;
- return ptr;
-}
-
-// Given a tag, returns the field number.
-UPB_INLINE uint32_t upb_WireReader_GetFieldNumber(uint32_t tag) {
- return tag >> kUpb_WireReader_WireTypeBits;
-}
-
-// Given a tag, returns the wire type.
-UPB_INLINE uint8_t upb_WireReader_GetWireType(uint32_t tag) {
- return tag & kUpb_WireReader_WireTypeMask;
-}
-
-UPB_INLINE const char* upb_WireReader_ReadVarint(const char* ptr,
- uint64_t* val) {
- return _upb_WireReader_ReadVarint(ptr, val, 10, UINT64_MAX);
-}
-
-// Skips data for a varint, returning a pointer past the end of the varint, or
-// NULL if there was an error in the varint data.
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_SkipVarint(const char* ptr) {
- uint64_t val;
- return upb_WireReader_ReadVarint(ptr, &val);
-}
-
-// Reads a varint indicating the size of a delimited field into `size`, or
-// NULL if there was an error in the varint data.
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_ReadSize(const char* ptr, int* size) {
- uint64_t size64;
- ptr = upb_WireReader_ReadVarint(ptr, &size64);
- if (!ptr || size64 >= INT32_MAX) return NULL;
- *size = size64;
- return ptr;
-}
-
-// Reads a fixed32 field, performing byte swapping if necessary.
-//
-// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_ReadFixed32(const char* ptr, void* val) {
- uint32_t uval;
- memcpy(&uval, ptr, 4);
- uval = _upb_BigEndian_Swap32(uval);
- memcpy(val, &uval, 4);
- return ptr + 4;
-}
-
-// Reads a fixed64 field, performing byte swapping if necessary.
-//
-// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-UPB_INLINE const char* upb_WireReader_ReadFixed64(const char* ptr, void* val) {
- uint64_t uval;
- memcpy(&uval, ptr, 8);
- uval = _upb_BigEndian_Swap64(uval);
- memcpy(val, &uval, 8);
- return ptr + 8;
-}
-
-const char* _upb_WireReader_SkipGroup(const char* ptr, uint32_t tag,
- int depth_limit,
- upb_EpsCopyInputStream* stream);
-
-// Skips data for a group, returning a pointer past the end of the group, or
-// NULL if there was an error parsing the group. The `tag` argument should be
-// the start group tag that begins the group. The `depth_limit` argument
-// indicates how many levels of recursion the group is allowed to have before
-// reporting a parse error (this limit exists to protect against stack
-// overflow).
-//
-// TODO: evaluate how the depth_limit should be specified. Do users need
-// control over this?
-UPB_INLINE const char* upb_WireReader_SkipGroup(
- const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
- return _upb_WireReader_SkipGroup(ptr, tag, 100, stream);
-}
-
-UPB_INLINE const char* _upb_WireReader_SkipValue(
- const char* ptr, uint32_t tag, int depth_limit,
- upb_EpsCopyInputStream* stream) {
- switch (upb_WireReader_GetWireType(tag)) {
- case kUpb_WireType_Varint:
- return upb_WireReader_SkipVarint(ptr);
- case kUpb_WireType_32Bit:
- return ptr + 4;
- case kUpb_WireType_64Bit:
- return ptr + 8;
- case kUpb_WireType_Delimited: {
- int size;
- ptr = upb_WireReader_ReadSize(ptr, &size);
- if (!ptr) return NULL;
- ptr += size;
- return ptr;
- }
- case kUpb_WireType_StartGroup:
- return _upb_WireReader_SkipGroup(ptr, tag, depth_limit, stream);
- case kUpb_WireType_EndGroup:
- return NULL; // Should be handled before now.
- default:
- return NULL; // Unknown wire type.
- }
-}
-
-// Skips data for a wire value of any type, returning a pointer past the end of
-// the data, or NULL if there was an error parsing the group. The `tag` argument
-// should be the tag that was just parsed. The `depth_limit` argument indicates
-// how many levels of recursion a group is allowed to have before reporting a
-// parse error (this limit exists to protect against stack overflow).
-//
-// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
-// Bounds checks must be performed before calling this function, preferably
-// by calling upb_EpsCopyInputStream_IsDone().
-//
-// TODO: evaluate how the depth_limit should be specified. Do users need
-// control over this?
-UPB_INLINE const char* upb_WireReader_SkipValue(
- const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
- return _upb_WireReader_SkipValue(ptr, tag, 100, stream);
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif // UPB_WIRE_READER_H_
-
-#ifndef UPB_MESSAGE_COPY_H_
-#define UPB_MESSAGE_COPY_H_
-
-
-// Must be last.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Deep clones a message using the provided target arena.
-upb_Message* upb_Message_DeepClone(const upb_Message* message,
- const upb_MiniTable* mini_table,
- upb_Arena* arena);
-
-// Deep clones array contents.
-upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
- const upb_MiniTable* sub, upb_Arena* arena);
-
-// Deep clones map contents.
-upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
- upb_CType value_type,
- const upb_MiniTable* map_entry_table,
- upb_Arena* arena);
-
-// Deep copies the message from src to dst.
-bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table, upb_Arena* arena);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif // UPB_MESSAGE_COPY_H_
+#endif /* UPB_MESSAGE_COMPAT_H_ */
// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_
+#ifndef UPB_MESSAGE_INTERNAL_MAP_SORTER_H_
+#define UPB_MESSAGE_INTERNAL_MAP_SORTER_H_
#include <stdlib.h>
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
+#ifndef UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
+#define UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
+
+#include <stdint.h>
// Map entries aren't actually stored for map fields, they are only used during
@@ -11972,7 +12276,7 @@
upb_MapEntryData data;
} upb_MapEntry;
-#endif // UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
+#endif // UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
// Must be last.
@@ -12003,10 +12307,11 @@
}
UPB_INLINE void _upb_mapsorter_destroy(_upb_mapsorter* s) {
- if (s->entries) free(s->entries);
+ if (s->entries) upb_gfree(s->entries);
}
-UPB_INLINE bool _upb_sortedmap_next(_upb_mapsorter* s, const upb_Map* map,
+UPB_INLINE bool _upb_sortedmap_next(_upb_mapsorter* s,
+ const struct upb_Map* map,
_upb_sortedmap* sorted, upb_MapEntry* ent) {
if (sorted->pos == sorted->end) return false;
const upb_tabent* tabent = (const upb_tabent*)s->entries[sorted->pos++];
@@ -12019,9 +12324,9 @@
UPB_INLINE bool _upb_sortedmap_nextext(_upb_mapsorter* s,
_upb_sortedmap* sorted,
- const upb_Message_Extension** ext) {
+ const struct upb_Extension** ext) {
if (sorted->pos == sorted->end) return false;
- *ext = (const upb_Message_Extension*)s->entries[sorted->pos++];
+ *ext = (const struct upb_Extension*)s->entries[sorted->pos++];
return true;
}
@@ -12031,10 +12336,10 @@
}
bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
- const upb_Map* map, _upb_sortedmap* sorted);
+ const struct upb_Map* map, _upb_sortedmap* sorted);
bool _upb_mapsorter_pushexts(_upb_mapsorter* s,
- const upb_Message_Extension* exts, size_t count,
+ const struct upb_Extension* exts, size_t count,
_upb_sortedmap* sorted);
#ifdef __cplusplus
@@ -12042,11 +12347,101 @@
#endif
-#endif /* UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_ */
+#endif /* UPB_MESSAGE_INTERNAL_MAP_SORTER_H_ */
-#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
-#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
+#ifndef UPB_BASE_INTERNAL_LOG2_H_
+#define UPB_BASE_INTERNAL_LOG2_H_
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE int upb_Log2Ceiling(int x) {
+ if (x <= 1) return 0;
+#ifdef __GNUC__
+ return 32 - __builtin_clz(x - 1);
+#else
+ int lg2 = 0;
+ while ((1 << lg2) < x) lg2++;
+ return lg2;
+#endif
+}
+
+UPB_INLINE int upb_Log2CeilingSize(int x) { return 1 << upb_Log2Ceiling(x); }
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_BASE_INTERNAL_LOG2_H_ */
+
+#ifndef UPB_MESSAGE_COMPARE_H_
+#define UPB_MESSAGE_COMPARE_H_
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Compares two messages by serializing them and calling memcmp().
+UPB_API bool upb_Message_IsExactlyEqual(const upb_Message* msg1,
+ const upb_Message* msg2,
+ const upb_MiniTable* m);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_MESSAGE_COMPARE_H_
+
+#ifndef UPB_MESSAGE_COPY_H_
+#define UPB_MESSAGE_COPY_H_
+
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Deep clones a message using the provided target arena.
+upb_Message* upb_Message_DeepClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Shallow clones a message using the provided target arena.
+upb_Message* upb_Message_ShallowClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Deep clones array contents.
+upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
+ const upb_MiniTable* sub, upb_Arena* arena);
+
+// Deep clones map contents.
+upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
+ upb_CType value_type,
+ const upb_MiniTable* map_entry_table,
+ upb_Arena* arena);
+
+// Deep copies the message from src to dst.
+bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Shallow copies the message from src to dst.
+void upb_Message_ShallowCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_MESSAGE_COPY_H_
#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_
#define UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_
@@ -12102,6 +12497,10 @@
#endif // UPB_MINI_DESCRIPTOR_INTERNAL_BASE92_H_
+#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
+#define UPB_MINI_DESCRIPTOR_INTERNAL_DECODER_H_
+
+
// Must be last.
// upb_MdDecoder: used internally for decoding MiniDescriptors for messages,
@@ -12228,6 +12627,541 @@
#endif // UPB_MINI_DESCRIPTOR_INTERNAL_MODIFIERS_H_
+#ifndef UPB_MINI_TABLE_COMPAT_H_
+#define UPB_MINI_TABLE_COMPAT_H_
+
+
+// Must be last.
+
+// upb does not support mixing minitables from different sources but these
+// functions are still used by some existing users so for now we make them
+// available here. This may or may not change in the future so do not add
+// them to new code.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Checks if memory layout of src is compatible with dst.
+bool upb_MiniTable_Compatible(const upb_MiniTable* src,
+ const upb_MiniTable* dst);
+
+typedef enum {
+ kUpb_MiniTableEquals_NotEqual,
+ kUpb_MiniTableEquals_Equal,
+ kUpb_MiniTableEquals_OutOfMemory,
+} upb_MiniTableEquals_Status;
+
+// Checks equality of mini tables originating from different language runtimes.
+upb_MiniTableEquals_Status upb_MiniTable_Equals(const upb_MiniTable* src,
+ const upb_MiniTable* dst);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_MINI_TABLE_COMPAT_H_ */
+
+#ifndef UPB_HASH_INT_TABLE_H_
+#define UPB_HASH_INT_TABLE_H_
+
+
+// Must be last.
+
+typedef struct {
+ upb_table t; // For entries that don't fit in the array part.
+ const upb_tabval* array; // Array part of the table. See const note above.
+ size_t array_size; // Array part size.
+ size_t array_count; // Array part number of elements.
+} upb_inttable;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Initialize a table. If memory allocation failed, false is returned and
+// the table is uninitialized.
+bool upb_inttable_init(upb_inttable* table, upb_Arena* a);
+
+// Returns the number of values in the table.
+size_t upb_inttable_count(const upb_inttable* t);
+
+// Inserts the given key into the hashtable with the given value.
+// The key must not already exist in the hash table.
+// The value must not be UINTPTR_MAX.
+//
+// If a table resize was required but memory allocation failed, false is
+// returned and the table is unchanged.
+bool upb_inttable_insert(upb_inttable* t, uintptr_t key, upb_value val,
+ upb_Arena* a);
+
+// Looks up key in this table, returning "true" if the key was found.
+// If v is non-NULL, copies the value for this key into *v.
+bool upb_inttable_lookup(const upb_inttable* t, uintptr_t key, upb_value* v);
+
+// Removes an item from the table. Returns true if the remove was successful,
+// and stores the removed item in *val if non-NULL.
+bool upb_inttable_remove(upb_inttable* t, uintptr_t key, upb_value* val);
+
+// Updates an existing entry in an inttable.
+// If the entry does not exist, returns false and does nothing.
+// Unlike insert/remove, this does not invalidate iterators.
+bool upb_inttable_replace(upb_inttable* t, uintptr_t key, upb_value val);
+
+// Optimizes the table for the current set of entries, for both memory use and
+// lookup time. Client should call this after all entries have been inserted;
+// inserting more entries is legal, but will likely require a table resize.
+void upb_inttable_compact(upb_inttable* t, upb_Arena* a);
+
+// Iteration over inttable:
+//
+// intptr_t iter = UPB_INTTABLE_BEGIN;
+// uintptr_t key;
+// upb_value val;
+// while (upb_inttable_next(t, &key, &val, &iter)) {
+// // ...
+// }
+
+#define UPB_INTTABLE_BEGIN -1
+
+bool upb_inttable_next(const upb_inttable* t, uintptr_t* key, upb_value* val,
+ intptr_t* iter);
+void upb_inttable_removeiter(upb_inttable* t, intptr_t* iter);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_HASH_INT_TABLE_H_ */
+
+#ifndef UPB_BASE_INTERNAL_ENDIAN_H_
+#define UPB_BASE_INTERNAL_ENDIAN_H_
+
+#include <stdint.h>
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE bool upb_IsLittleEndian(void) {
+ const int x = 1;
+ return *(char*)&x == 1;
+}
+
+UPB_INLINE uint32_t upb_BigEndian32(uint32_t val) {
+ if (upb_IsLittleEndian()) return val;
+
+ return ((val & 0xff) << 24) | ((val & 0xff00) << 8) |
+ ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);
+}
+
+UPB_INLINE uint64_t upb_BigEndian64(uint64_t val) {
+ if (upb_IsLittleEndian()) return val;
+
+ const uint64_t hi = ((uint64_t)upb_BigEndian32((uint32_t)val)) << 32;
+ const uint64_t lo = upb_BigEndian32((uint32_t)(val >> 32));
+ return hi | lo;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_BASE_INTERNAL_ENDIAN_H_ */
+
+#ifndef UPB_WIRE_INTERNAL_CONSTANTS_H_
+#define UPB_WIRE_INTERNAL_CONSTANTS_H_
+
+#define kUpb_WireFormat_DefaultDepthLimit 100
+
+// MessageSet wire format is:
+// message MessageSet {
+// repeated group Item = 1 {
+// required int32 type_id = 2;
+// required bytes message = 3;
+// }
+// }
+
+enum {
+ kUpb_MsgSet_Item = 1,
+ kUpb_MsgSet_TypeId = 2,
+ kUpb_MsgSet_Message = 3,
+};
+
+#endif /* UPB_WIRE_INTERNAL_CONSTANTS_H_ */
+
+/*
+ * Internal implementation details of the decoder that are shared between
+ * decode.c and decode_fast.c.
+ */
+
+#ifndef UPB_WIRE_INTERNAL_DECODER_H_
+#define UPB_WIRE_INTERNAL_DECODER_H_
+
+#include "utf8_range.h"
+
+// Must be last.
+
+#define DECODE_NOGROUP (uint32_t) - 1
+
+typedef struct upb_Decoder {
+ upb_EpsCopyInputStream input;
+ const upb_ExtensionRegistry* extreg;
+ const char* unknown; // Start of unknown data, preserve at buffer flip
+ upb_Message* unknown_msg; // Pointer to preserve data to
+ int depth; // Tracks recursion depth to bound stack usage.
+ uint32_t end_group; // field number of END_GROUP tag, else DECODE_NOGROUP.
+ uint16_t options;
+ bool missing_required;
+ union {
+ upb_Arena arena;
+ void* foo[UPB_ARENA_SIZE_HACK];
+ };
+ upb_DecodeStatus status;
+ jmp_buf err;
+
+#ifndef NDEBUG
+ const char* debug_tagstart;
+ const char* debug_valstart;
+#endif
+} upb_Decoder;
+
+/* Error function that will abort decoding with longjmp(). We can't declare this
+ * UPB_NORETURN, even though it is appropriate, because if we do then compilers
+ * will "helpfully" refuse to tailcall to it
+ * (see: https://stackoverflow.com/a/55657013), which will defeat a major goal
+ * of our optimizations. That is also why we must declare it in a separate file,
+ * otherwise the compiler will see that it calls longjmp() and deduce that it is
+ * noreturn. */
+const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status);
+
+extern const uint8_t upb_utf8_offsets[];
+
+UPB_INLINE
+bool _upb_Decoder_VerifyUtf8Inline(const char* ptr, int len) {
+ return utf8_range_IsValid(ptr, len);
+}
+
+const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
+ const upb_Message* msg,
+ const upb_MiniTable* m);
+
+/* x86-64 pointers always have the high 16 bits matching. So we can shift
+ * left 8 and right 8 without loss of information. */
+UPB_INLINE intptr_t decode_totable(const upb_MiniTable* tablep) {
+ return ((intptr_t)tablep << 8) | tablep->UPB_PRIVATE(table_mask);
+}
+
+UPB_INLINE const upb_MiniTable* decode_totablep(intptr_t table) {
+ return (const upb_MiniTable*)(table >> 8);
+}
+
+const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
+ const char* ptr, int overrun);
+
+UPB_INLINE bool _upb_Decoder_IsDone(upb_Decoder* d, const char** ptr) {
+ return upb_EpsCopyInputStream_IsDoneWithCallback(
+ &d->input, ptr, &_upb_Decoder_IsDoneFallback);
+}
+
+UPB_INLINE const char* _upb_Decoder_BufferFlipCallback(
+ upb_EpsCopyInputStream* e, const char* old_end, const char* new_start) {
+ upb_Decoder* d = (upb_Decoder*)e;
+ if (!old_end) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
+
+ if (d->unknown) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(
+ d->unknown_msg, d->unknown, old_end - d->unknown, &d->arena)) {
+ _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
+ }
+ d->unknown = new_start;
+ }
+ return new_start;
+}
+
+#if UPB_FASTTABLE
+UPB_INLINE
+const char* _upb_FastDecoder_TagDispatch(upb_Decoder* d, const char* ptr,
+ upb_Message* msg, intptr_t table,
+ uint64_t hasbits, uint64_t tag) {
+ const upb_MiniTable* table_p = decode_totablep(table);
+ uint8_t mask = table;
+ uint64_t data;
+ size_t idx = tag & mask;
+ UPB_ASSUME((idx & 7) == 0);
+ idx >>= 3;
+ data = table_p->UPB_PRIVATE(fasttable)[idx].field_data ^ tag;
+ UPB_MUSTTAIL return table_p->UPB_PRIVATE(fasttable)[idx].field_parser(
+ d, ptr, msg, table, hasbits, data);
+}
+#endif
+
+UPB_INLINE uint32_t _upb_FastDecoder_LoadTag(const char* ptr) {
+ uint16_t tag;
+ memcpy(&tag, ptr, 2);
+ return tag;
+}
+
+
+#endif /* UPB_WIRE_INTERNAL_DECODER_H_ */
+
+#ifndef UPB_WIRE_READER_H_
+#define UPB_WIRE_READER_H_
+
+
+#ifndef UPB_WIRE_INTERNAL_READER_H_
+#define UPB_WIRE_INTERNAL_READER_H_
+
+// Must be last.
+
+#define kUpb_WireReader_WireTypeBits 3
+#define kUpb_WireReader_WireTypeMask 7
+
+typedef struct {
+ const char* ptr;
+ uint64_t val;
+} UPB_PRIVATE(_upb_WireReader_LongVarint);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_PRIVATE(_upb_WireReader_LongVarint)
+UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val);
+
+static UPB_FORCEINLINE const char* UPB_PRIVATE(_upb_WireReader_ReadVarint)(
+ const char* ptr, uint64_t* val, int maxlen, uint64_t maxval) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = (uint32_t)byte;
+ return ptr + 1;
+ }
+ const char* start = ptr;
+ UPB_PRIVATE(_upb_WireReader_LongVarint)
+ res = UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(ptr, byte);
+ if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) ||
+ res.val > maxval) {
+ return NULL; // Malformed.
+ }
+ *val = res.val;
+ return res.ptr;
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(uint32_t tag) {
+ return tag >> kUpb_WireReader_WireTypeBits;
+}
+
+UPB_INLINE uint8_t UPB_PRIVATE(_upb_WireReader_GetWireType)(uint32_t tag) {
+ return tag & kUpb_WireReader_WireTypeMask;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_WIRE_INTERNAL_READER_H_
+
+#ifndef UPB_WIRE_TYPES_H_
+#define UPB_WIRE_TYPES_H_
+
+// A list of types as they are encoded on the wire.
+typedef enum {
+ kUpb_WireType_Varint = 0,
+ kUpb_WireType_64Bit = 1,
+ kUpb_WireType_Delimited = 2,
+ kUpb_WireType_StartGroup = 3,
+ kUpb_WireType_EndGroup = 4,
+ kUpb_WireType_32Bit = 5
+} upb_WireType;
+
+#endif /* UPB_WIRE_TYPES_H_ */
+
+// Must be last.
+
+// The upb_WireReader interface is suitable for general-purpose parsing of
+// protobuf binary wire format. It is designed to be used along with
+// upb_EpsCopyInputStream for buffering, and all parsing routines in this file
+// assume that at least kUpb_EpsCopyInputStream_SlopBytes worth of data is
+// available to read without any bounds checks.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Parses a tag into `tag`, and returns a pointer past the end of the tag, or
+// NULL if there was an error in the tag data.
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+static UPB_FORCEINLINE const char* upb_WireReader_ReadTag(const char* ptr,
+ uint32_t* tag) {
+ uint64_t val;
+ ptr = UPB_PRIVATE(_upb_WireReader_ReadVarint)(ptr, &val, 5, UINT32_MAX);
+ if (!ptr) return NULL;
+ *tag = val;
+ return ptr;
+}
+
+// Given a tag, returns the field number.
+UPB_INLINE uint32_t upb_WireReader_GetFieldNumber(uint32_t tag) {
+ return UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(tag);
+}
+
+// Given a tag, returns the wire type.
+UPB_INLINE uint8_t upb_WireReader_GetWireType(uint32_t tag) {
+ return UPB_PRIVATE(_upb_WireReader_GetWireType)(tag);
+}
+
+UPB_INLINE const char* upb_WireReader_ReadVarint(const char* ptr,
+ uint64_t* val) {
+ return UPB_PRIVATE(_upb_WireReader_ReadVarint)(ptr, val, 10, UINT64_MAX);
+}
+
+// Skips data for a varint, returning a pointer past the end of the varint, or
+// NULL if there was an error in the varint data.
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_SkipVarint(const char* ptr) {
+ uint64_t val;
+ return upb_WireReader_ReadVarint(ptr, &val);
+}
+
+// Reads a varint indicating the size of a delimited field into `size`, or
+// NULL if there was an error in the varint data.
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_ReadSize(const char* ptr, int* size) {
+ uint64_t size64;
+ ptr = upb_WireReader_ReadVarint(ptr, &size64);
+ if (!ptr || size64 >= INT32_MAX) return NULL;
+ *size = size64;
+ return ptr;
+}
+
+// Reads a fixed32 field, performing byte swapping if necessary.
+//
+// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_ReadFixed32(const char* ptr, void* val) {
+ uint32_t uval;
+ memcpy(&uval, ptr, 4);
+ uval = upb_BigEndian32(uval);
+ memcpy(val, &uval, 4);
+ return ptr + 4;
+}
+
+// Reads a fixed64 field, performing byte swapping if necessary.
+//
+// REQUIRES: there must be at least 4 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+UPB_INLINE const char* upb_WireReader_ReadFixed64(const char* ptr, void* val) {
+ uint64_t uval;
+ memcpy(&uval, ptr, 8);
+ uval = upb_BigEndian64(uval);
+ memcpy(val, &uval, 8);
+ return ptr + 8;
+}
+
+const char* UPB_PRIVATE(_upb_WireReader_SkipGroup)(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream);
+
+// Skips data for a group, returning a pointer past the end of the group, or
+// NULL if there was an error parsing the group. The `tag` argument should be
+// the start group tag that begins the group. The `depth_limit` argument
+// indicates how many levels of recursion the group is allowed to have before
+// reporting a parse error (this limit exists to protect against stack
+// overflow).
+//
+// TODO: evaluate how the depth_limit should be specified. Do users need
+// control over this?
+UPB_INLINE const char* upb_WireReader_SkipGroup(
+ const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
+ return UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, tag, 100, stream);
+}
+
+UPB_INLINE const char* _upb_WireReader_SkipValue(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream) {
+ switch (upb_WireReader_GetWireType(tag)) {
+ case kUpb_WireType_Varint:
+ return upb_WireReader_SkipVarint(ptr);
+ case kUpb_WireType_32Bit:
+ return ptr + 4;
+ case kUpb_WireType_64Bit:
+ return ptr + 8;
+ case kUpb_WireType_Delimited: {
+ int size;
+ ptr = upb_WireReader_ReadSize(ptr, &size);
+ if (!ptr) return NULL;
+ ptr += size;
+ return ptr;
+ }
+ case kUpb_WireType_StartGroup:
+ return UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, tag, depth_limit,
+ stream);
+ case kUpb_WireType_EndGroup:
+ return NULL; // Should be handled before now.
+ default:
+ return NULL; // Unknown wire type.
+ }
+}
+
+// Skips data for a wire value of any type, returning a pointer past the end of
+// the data, or NULL if there was an error parsing the group. The `tag` argument
+// should be the tag that was just parsed. The `depth_limit` argument indicates
+// how many levels of recursion a group is allowed to have before reporting a
+// parse error (this limit exists to protect against stack overflow).
+//
+// REQUIRES: there must be at least 10 bytes of data available at `ptr`.
+// Bounds checks must be performed before calling this function, preferably
+// by calling upb_EpsCopyInputStream_IsDone().
+//
+// TODO: evaluate how the depth_limit should be specified. Do users need
+// control over this?
+UPB_INLINE const char* upb_WireReader_SkipValue(
+ const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
+ return _upb_WireReader_SkipValue(ptr, tag, 100, stream);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif // UPB_WIRE_READER_H_
+
+#ifndef UPB_LEX_STRTOD_H_
+#define UPB_LEX_STRTOD_H_
+
+// Must be last.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+double _upb_NoLocaleStrtod(const char *str, char **endptr);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /* UPB_LEX_STRTOD_H_ */
+
#ifndef UPB_MINI_DESCRIPTOR_INTERNAL_ENCODE_H_
#define UPB_MINI_DESCRIPTOR_INTERNAL_ENCODE_H_
@@ -12713,7 +13647,7 @@
// features. This is used for feature resolution under Editions.
// NOLINTBEGIN
// clang-format off
-#define UPB_INTERNAL_UPB_EDITION_DEFAULTS "\n\021\022\014\010\001\020\002\030\002 \001(\0010\002\030\346\007\n\021\022\014\010\002\020\001\030\001 \002(\0010\001\030\347\007\n\021\022\014\010\001\020\001\030\001 \002(\0010\001\030\350\007 \346\007(\350\007"
+#define UPB_INTERNAL_UPB_EDITION_DEFAULTS "\n\021\022\014\010\001\020\002\030\002 \003(\0010\002\030\346\007\n\021\022\014\010\002\020\001\030\001 \002(\0010\001\030\347\007\n\021\022\014\010\001\020\001\030\001 \002(\0010\001\030\350\007 \346\007(\350\007"
// clang-format on
// NOLINTEND
@@ -12953,158 +13887,6 @@
#endif /* UPB_REFLECTION_METHOD_DEF_INTERNAL_H_ */
-#ifndef UPB_WIRE_INTERNAL_CONSTANTS_H_
-#define UPB_WIRE_INTERNAL_CONSTANTS_H_
-
-#define kUpb_WireFormat_DefaultDepthLimit 100
-
-// MessageSet wire format is:
-// message MessageSet {
-// repeated group Item = 1 {
-// required int32 type_id = 2;
-// required bytes message = 3;
-// }
-// }
-
-enum {
- kUpb_MsgSet_Item = 1,
- kUpb_MsgSet_TypeId = 2,
- kUpb_MsgSet_Message = 3,
-};
-
-#endif /* UPB_WIRE_INTERNAL_CONSTANTS_H_ */
-
-/*
- * Internal implementation details of the decoder that are shared between
- * decode.c and decode_fast.c.
- */
-
-#ifndef UPB_WIRE_INTERNAL_DECODE_H_
-#define UPB_WIRE_INTERNAL_DECODE_H_
-
-#include "utf8_range.h"
-
-// Must be last.
-
-#define DECODE_NOGROUP (uint32_t) - 1
-
-typedef struct upb_Decoder {
- upb_EpsCopyInputStream input;
- const upb_ExtensionRegistry* extreg;
- const char* unknown; // Start of unknown data, preserve at buffer flip
- upb_Message* unknown_msg; // Pointer to preserve data to
- int depth; // Tracks recursion depth to bound stack usage.
- uint32_t end_group; // field number of END_GROUP tag, else DECODE_NOGROUP.
- uint16_t options;
- bool missing_required;
- upb_Arena arena;
- upb_DecodeStatus status;
- jmp_buf err;
-
-#ifndef NDEBUG
- const char* debug_tagstart;
- const char* debug_valstart;
-#endif
-} upb_Decoder;
-
-/* Error function that will abort decoding with longjmp(). We can't declare this
- * UPB_NORETURN, even though it is appropriate, because if we do then compilers
- * will "helpfully" refuse to tailcall to it
- * (see: https://stackoverflow.com/a/55657013), which will defeat a major goal
- * of our optimizations. That is also why we must declare it in a separate file,
- * otherwise the compiler will see that it calls longjmp() and deduce that it is
- * noreturn. */
-const char* _upb_FastDecoder_ErrorJmp(upb_Decoder* d, int status);
-
-extern const uint8_t upb_utf8_offsets[];
-
-UPB_INLINE
-bool _upb_Decoder_VerifyUtf8Inline(const char* ptr, int len) {
- const char* end = ptr + len;
-
- // Check 8 bytes at a time for any non-ASCII char.
- while (end - ptr >= 8) {
- uint64_t data;
- memcpy(&data, ptr, 8);
- if (data & 0x8080808080808080) goto non_ascii;
- ptr += 8;
- }
-
- // Check one byte at a time for non-ASCII.
- while (ptr < end) {
- if (*ptr & 0x80) goto non_ascii;
- ptr++;
- }
-
- return true;
-
-non_ascii:
- return utf8_range2((const unsigned char*)ptr, end - ptr) == 0;
-}
-
-const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
- const upb_Message* msg,
- const upb_MiniTable* l);
-
-/* x86-64 pointers always have the high 16 bits matching. So we can shift
- * left 8 and right 8 without loss of information. */
-UPB_INLINE intptr_t decode_totable(const upb_MiniTable* tablep) {
- return ((intptr_t)tablep << 8) | tablep->table_mask;
-}
-
-UPB_INLINE const upb_MiniTable* decode_totablep(intptr_t table) {
- return (const upb_MiniTable*)(table >> 8);
-}
-
-const char* _upb_Decoder_IsDoneFallback(upb_EpsCopyInputStream* e,
- const char* ptr, int overrun);
-
-UPB_INLINE bool _upb_Decoder_IsDone(upb_Decoder* d, const char** ptr) {
- return upb_EpsCopyInputStream_IsDoneWithCallback(
- &d->input, ptr, &_upb_Decoder_IsDoneFallback);
-}
-
-UPB_INLINE const char* _upb_Decoder_BufferFlipCallback(
- upb_EpsCopyInputStream* e, const char* old_end, const char* new_start) {
- upb_Decoder* d = (upb_Decoder*)e;
- if (!old_end) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
-
- if (d->unknown) {
- if (!_upb_Message_AddUnknown(d->unknown_msg, d->unknown,
- old_end - d->unknown, &d->arena)) {
- _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- }
- d->unknown = new_start;
- }
- return new_start;
-}
-
-#if UPB_FASTTABLE
-UPB_INLINE
-const char* _upb_FastDecoder_TagDispatch(upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
- uint64_t hasbits, uint64_t tag) {
- const upb_MiniTable* table_p = decode_totablep(table);
- uint8_t mask = table;
- uint64_t data;
- size_t idx = tag & mask;
- UPB_ASSUME((idx & 7) == 0);
- idx >>= 3;
- data = table_p->fasttable[idx].field_data ^ tag;
- UPB_MUSTTAIL return table_p->fasttable[idx].field_parser(d, ptr, msg, table,
- hasbits, data);
-}
-#endif
-
-UPB_INLINE uint32_t _upb_FastDecoder_LoadTag(const char* ptr) {
- uint16_t tag;
- memcpy(&tag, ptr, 2);
- return tag;
-}
-
-
-#endif /* UPB_WIRE_INTERNAL_DECODE_H_ */
-
// This should #undef all macros #defined in def.inc
#undef UPB_SIZE
@@ -13118,6 +13900,7 @@
#undef UPB_ALIGN_DOWN
#undef UPB_ALIGN_MALLOC
#undef UPB_ALIGN_OF
+#undef UPB_ALIGN_AS
#undef UPB_MALLOC_ALIGN
#undef UPB_LIKELY
#undef UPB_UNLIKELY
@@ -13154,3 +13937,4 @@
#undef UPB_ATOMIC
#undef UPB_USE_C11_ATOMICS
#undef UPB_PRIVATE
+#undef UPB_ONLYBITS
diff --git a/ruby/ext/google/protobuf_c/shared_convert.c b/ruby/ext/google/protobuf_c/shared_convert.c
index d3b78e3..9116f62 100644
--- a/ruby/ext/google/protobuf_c/shared_convert.c
+++ b/ruby/ext/google/protobuf_c/shared_convert.c
@@ -12,7 +12,7 @@
#include "shared_convert.h"
bool shared_Msgval_IsEqual(upb_MessageValue val1, upb_MessageValue val2,
- upb_CType type, upb_MessageDef* msgdef,
+ upb_CType type, const upb_MessageDef* msgdef,
upb_Status* status) {
switch (type) {
case kUpb_CType_Bool:
@@ -39,7 +39,7 @@
}
uint64_t shared_Msgval_GetHash(upb_MessageValue val, upb_CType type,
- upb_MessageDef* msgdef, uint64_t seed,
+ const upb_MessageDef* msgdef, uint64_t seed,
upb_Status* status) {
switch (type) {
case kUpb_CType_Bool:
@@ -61,4 +61,4 @@
default:
upb_Status_SetErrorMessage(status, "Internal error, unexpected type");
}
-}
\ No newline at end of file
+}
diff --git a/ruby/ext/google/protobuf_c/shared_convert.h b/ruby/ext/google/protobuf_c/shared_convert.h
index e97aa36..ca1e91d 100644
--- a/ruby/ext/google/protobuf_c/shared_convert.h
+++ b/ruby/ext/google/protobuf_c/shared_convert.h
@@ -16,11 +16,11 @@
#include "shared_message.h"
bool shared_Msgval_IsEqual(upb_MessageValue val1, upb_MessageValue val2,
- upb_CType type, upb_MessageDef* msgdef,
+ upb_CType type, const upb_MessageDef* msgdef,
upb_Status* status);
uint64_t shared_Msgval_GetHash(upb_MessageValue val, upb_CType type,
- upb_MessageDef* msgdef, uint64_t seed,
+ const upb_MessageDef* msgdef, uint64_t seed,
upb_Status* status);
#endif // RUBY_PROTOBUF_SHARED_CONVERT_H_
diff --git a/ruby/ext/google/protobuf_c/shared_message.c b/ruby/ext/google/protobuf_c/shared_message.c
index 9e650c3..761c544 100644
--- a/ruby/ext/google/protobuf_c/shared_message.c
+++ b/ruby/ext/google/protobuf_c/shared_message.c
@@ -29,10 +29,11 @@
uint64_t ret = _upb_Hash(data, size, seed);
upb_Arena_Free(arena);
return ret;
- } else {
- upb_Arena_Free(arena);
- upb_Status_SetErrorMessage(status, "Error calculating hash");
}
+
+ upb_Arena_Free(arena);
+ upb_Status_SetErrorMessage(status, "Error calculating hash");
+ return 0;
}
// Support function for Message_Equal
@@ -58,8 +59,9 @@
bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
upb_Arena_Free(arena_tmp);
return ret;
- } else {
- upb_Arena_Free(arena_tmp);
- upb_Status_SetErrorMessage(status, "Error comparing messages");
}
+
+ upb_Arena_Free(arena_tmp);
+ upb_Status_SetErrorMessage(status, "Error comparing messages");
+ return 0;
}
diff --git a/ruby/lib/google/BUILD.bazel b/ruby/lib/google/BUILD.bazel
index 18f1c18..8af2fa8 100644
--- a/ruby/lib/google/BUILD.bazel
+++ b/ruby/lib/google/BUILD.bazel
@@ -76,9 +76,12 @@
"//ruby:linux_ffi_enabled": ["libprotobuf_c_ffi.so"],
"//conditions:default": [],
}),
- includes = ["ruby/lib"],
+ includes = [
+ "ruby",
+ "ruby/lib",
+ ],
visibility = ["//ruby:__pkg__"],
- deps = ["//:well_known_ruby_protos"] + select({
+ deps = ["//ruby:well_known_ruby_protos"] + select({
"//ruby:ffi_enabled": [
"@protobuf_bundle//:ffi",
"@protobuf_bundle//:ffi-compiler",
diff --git a/ruby/lib/google/protobuf/descriptor_dsl.rb b/ruby/lib/google/protobuf/descriptor_dsl.rb
deleted file mode 100644
index 7349b6d..0000000
--- a/ruby/lib/google/protobuf/descriptor_dsl.rb
+++ /dev/null
@@ -1,465 +0,0 @@
-#!/usr/bin/ruby
-#
-# Code that implements the DSL for defining proto messages.
-
-# Suppress warning: loading in progress, circular require considered harmful.
-# This circular require is intentional to avoid missing dependency.
-begin
- old_verbose, $VERBOSE = $VERBOSE, nil
- require 'google/protobuf/descriptor_pb'
-ensure
- $VERBOSE = old_verbose
-end
-
-module Google
- module Protobuf
- module Internal
- class AtomicCounter
- def initialize
- @n = 0
- @mu = Mutex.new
- end
-
- def get_and_increment
- n = @n
- @mu.synchronize {
- @n += 1
- }
- return n
- end
- end
-
- class Builder
- @@file_number = AtomicCounter.new
-
- def initialize(pool)
- @pool = pool
- @default_file = nil # Constructed lazily
- end
-
- def add_file(name, options={}, &block)
- builder = FileBuilder.new(@pool, name, options)
- builder.instance_eval(&block)
- internal_add_file(builder)
- end
-
- def add_message(name, &block)
- internal_default_file.add_message(name, &block)
- end
-
- def add_enum(name, &block)
- internal_default_file.add_enum(name, &block)
- end
-
- # ---- Internal methods, not part of the DSL ----
-
- def build
- if @default_file
- internal_add_file(@default_file)
- end
- end
-
- private def internal_add_file(file_builder)
- proto = file_builder.build
- serialized = Google::Protobuf::FileDescriptorProto.encode(proto)
- @pool.add_serialized_file(serialized)
- end
-
- private def internal_default_file
- number = @@file_number.get_and_increment
- filename = "ruby_default_file#{number}.proto"
- @default_file ||= FileBuilder.new(@pool, filename)
- end
- end
-
- class FileBuilder
- def initialize(pool, name, options={})
- @pool = pool
- @file_proto = Google::Protobuf::FileDescriptorProto.new(
- name: name,
- syntax: options.fetch(:syntax, "proto3")
- )
- end
-
- def add_message(name, &block)
- builder = MessageBuilder.new(name, self, @file_proto)
- builder.instance_eval(&block)
- builder.internal_add_synthetic_oneofs
- end
-
- def add_enum(name, &block)
- EnumBuilder.new(name, @file_proto).instance_eval(&block)
- end
-
- # ---- Internal methods, not part of the DSL ----
-
- # These methods fix up the file descriptor to account for differences
- # between the DSL and FileDescriptorProto.
-
- # The DSL can omit a package name; here we infer what the package is if
- # was not specified.
- def infer_package(names)
- # Package is longest common prefix ending in '.', if any.
- if not names.empty?
- min, max = names.minmax
- last_common_dot = nil
- min.size.times { |i|
- if min[i] != max[i] then break end
- if min[i] == "." then last_common_dot = i end
- }
- if last_common_dot
- return min.slice(0, last_common_dot)
- end
- end
-
- nil
- end
-
- def rewrite_enum_default(field)
- if field.type != :TYPE_ENUM or !field.has_default_value? or !field.has_type_name?
- return
- end
-
- value = field.default_value
- type_name = field.type_name
-
- if value.empty? or value[0].ord < "0".ord or value[0].ord > "9".ord
- return
- end
-
- if type_name.empty? || type_name[0] != "."
- return
- end
-
- type_name = type_name[1..-1]
- as_int = Integer(value) rescue return
-
- enum_desc = @pool.lookup(type_name)
- if enum_desc.is_a?(Google::Protobuf::EnumDescriptor)
- # Enum was defined in a previous file.
- name = enum_desc.lookup_value(as_int)
- if name
- # Update the default value in the proto.
- field.default_value = name
- end
- else
- # See if enum was defined in this file.
- @file_proto.enum_type.each { |enum_proto|
- if enum_proto.name == type_name
- enum_proto.value.each { |enum_value_proto|
- if enum_value_proto.number == as_int
- # Update the default value in the proto.
- field.default_value = enum_value_proto.name
- return
- end
- }
- # We found the right enum, but no value matched.
- return
- end
- }
- end
- end
-
- # Historically we allowed enum defaults to be specified as a number.
- # In retrospect this was a mistake as descriptors require defaults to
- # be specified as a label. This can make a difference if multiple
- # labels have the same number.
- #
- # Here we do a pass over all enum defaults and rewrite numeric defaults
- # by looking up their labels. This is complicated by the fact that the
- # enum definition can live in either the symtab or the file_proto.
- #
- # We take advantage of the fact that this is called *before* enums or
- # messages are nested in other messages, so we only have to iterate
- # one level deep.
- def rewrite_enum_defaults
- @file_proto.message_type.each { |msg|
- msg.field.each { |field|
- rewrite_enum_default(field)
- }
- }
- end
-
- # We have to do some relatively complicated logic here for backward
- # compatibility.
- #
- # In descriptor.proto, messages are nested inside other messages if that is
- # what the original .proto file looks like. For example, suppose we have this
- # foo.proto:
- #
- # package foo;
- # message Bar {
- # message Baz {}
- # }
- #
- # The descriptor for this must look like this:
- #
- # file {
- # name: "test.proto"
- # package: "foo"
- # message_type {
- # name: "Bar"
- # nested_type {
- # name: "Baz"
- # }
- # }
- # }
- #
- # However, the Ruby generated code has always generated messages in a flat,
- # non-nested way:
- #
- # Google::Protobuf::DescriptorPool.generated_pool.build do
- # add_message "foo.Bar" do
- # end
- # add_message "foo.Bar.Baz" do
- # end
- # end
- #
- # Here we need to do a translation where we turn this generated code into the
- # above descriptor. We need to infer that "foo" is the package name, and not
- # a message itself. */
-
- def split_parent_name(msg_or_enum)
- name = msg_or_enum.name
- idx = name.rindex(?.)
- if idx
- return name[0...idx], name[idx+1..-1]
- else
- return nil, name
- end
- end
-
- def get_parent_msg(msgs_by_name, name, parent_name)
- parent_msg = msgs_by_name[parent_name]
- if parent_msg.nil?
- raise "To define name #{name}, there must be a message named #{parent_name} to enclose it"
- end
- return parent_msg
- end
-
- def fix_nesting
- # Calculate and update package.
- msgs_by_name = @file_proto.message_type.map { |msg| [msg.name, msg] }.to_h
- enum_names = @file_proto.enum_type.map { |enum_proto| enum_proto.name }
-
- package = infer_package(msgs_by_name.keys + enum_names)
- if package
- @file_proto.package = package
- end
-
- # Update nesting based on package.
- final_msgs = Google::Protobuf::RepeatedField.new(:message, Google::Protobuf::DescriptorProto)
- final_enums = Google::Protobuf::RepeatedField.new(:message, Google::Protobuf::EnumDescriptorProto)
-
- # Note: We don't iterate over msgs_by_name.values because we want to
- # preserve order as listed in the DSL.
- @file_proto.message_type.each { |msg|
- parent_name, msg.name = split_parent_name(msg)
- if parent_name == package
- final_msgs << msg
- else
- get_parent_msg(msgs_by_name, msg.name, parent_name).nested_type << msg
- end
- }
-
- @file_proto.enum_type.each { |enum|
- parent_name, enum.name = split_parent_name(enum)
- if parent_name == package
- final_enums << enum
- else
- get_parent_msg(msgs_by_name, enum.name, parent_name).enum_type << enum
- end
- }
-
- @file_proto.message_type = final_msgs
- @file_proto.enum_type = final_enums
- end
-
- def internal_file_proto
- @file_proto
- end
-
- def build
- rewrite_enum_defaults
- fix_nesting
- return @file_proto
- end
- end
-
- class MessageBuilder
- def initialize(name, file_builder, file_proto)
- @file_builder = file_builder
- @msg_proto = Google::Protobuf::DescriptorProto.new(
- :name => name
- )
- file_proto.message_type << @msg_proto
- end
-
- def optional(name, type, number, type_class=nil, options=nil)
- internal_add_field(:LABEL_OPTIONAL, name, type, number, type_class, options)
- end
-
- def proto3_optional(name, type, number, type_class=nil, options=nil)
- internal_add_field(:LABEL_OPTIONAL, name, type, number, type_class, options,
- proto3_optional: true)
- end
-
- def required(name, type, number, type_class=nil, options=nil)
- internal_add_field(:LABEL_REQUIRED, name, type, number, type_class, options)
- end
-
- def repeated(name, type, number, type_class = nil, options=nil)
- internal_add_field(:LABEL_REPEATED, name, type, number, type_class, options)
- end
-
- def oneof(name, &block)
- OneofBuilder.new(name, self).instance_eval(&block)
- end
-
- # Defines a new map field on this message type with the given key and
- # value types, tag number, and type class (for message and enum value
- # types). The key type must be :int32/:uint32/:int64/:uint64, :bool, or
- # :string. The value type type must be a Ruby symbol (as accepted by
- # FieldDescriptor#type=) and the type_class must be a string, if
- # present (as accepted by FieldDescriptor#submsg_name=).
- def map(name, key_type, value_type, number, value_type_class = nil)
- if key_type == :float or key_type == :double or key_type == :enum or
- key_type == :message
- raise ArgError, "Not an acceptable key type: " + key_type
- end
- entry_name = "#{@msg_proto.name}_MapEntry_#{name}"
-
- @file_builder.add_message entry_name do
- optional :key, key_type, 1
- optional :value, value_type, 2, value_type_class
- end
- options = @file_builder.internal_file_proto.message_type.last.options ||= MessageOptions.new
- options.map_entry = true
- repeated name, :message, number, entry_name
- end
-
- # ---- Internal methods, not part of the DSL ----
-
- def internal_add_synthetic_oneofs
- # We have to build a set of all names, to ensure that synthetic oneofs
- # are not creating conflicts
- names = {}
- @msg_proto.field.each { |field| names[field.name] = true }
- @msg_proto.oneof_decl.each { |oneof| names[oneof.name] = true }
-
- @msg_proto.field.each { |field|
- if field.proto3_optional
- # Prepend '_' until we are no longer conflicting.
- oneof_name = field.name
- while names[oneof_name]
- oneof_name = "_" + oneof_name
- end
- names[oneof_name] = true
- field.oneof_index = @msg_proto.oneof_decl.size
- @msg_proto.oneof_decl << Google::Protobuf::OneofDescriptorProto.new(
- name: oneof_name
- )
- end
- }
- end
-
- def internal_add_field(label, name, type, number, type_class, options,
- oneof_index: nil, proto3_optional: false)
- # Allow passing either:
- # - (name, type, number, options) or
- # - (name, type, number, type_class, options)
- if options.nil? and type_class.instance_of?(Hash)
- options = type_class;
- type_class = nil;
- end
-
- field_proto = Google::Protobuf::FieldDescriptorProto.new(
- :label => label,
- :name => name,
- :type => ("TYPE_" + type.to_s.upcase).to_sym,
- :number => number
- )
-
- if type_class
- # Make it an absolute type name by prepending a dot.
- field_proto.type_name = "." + type_class
- end
-
- if oneof_index
- field_proto.oneof_index = oneof_index
- end
-
- if proto3_optional
- field_proto.proto3_optional = true
- end
-
- if options
- if options.key?(:default)
- default = options[:default]
- if !default.instance_of?(String)
- # Call #to_s since all defaults are strings in the descriptor.
- default = default.to_s
- end
- # XXX: we should be C-escaping bytes defaults.
- field_proto.default_value = default.dup.force_encoding("UTF-8")
- end
- if options.key?(:json_name)
- field_proto.json_name = options[:json_name]
- end
- end
-
- @msg_proto.field << field_proto
- end
-
- def internal_msg_proto
- @msg_proto
- end
- end
-
- class OneofBuilder
- def initialize(name, msg_builder)
- @msg_builder = msg_builder
- oneof_proto = Google::Protobuf::OneofDescriptorProto.new(
- :name => name
- )
- msg_proto = msg_builder.internal_msg_proto
- @oneof_index = msg_proto.oneof_decl.size
- msg_proto.oneof_decl << oneof_proto
- end
-
- def optional(name, type, number, type_class=nil, options=nil)
- @msg_builder.internal_add_field(
- :LABEL_OPTIONAL, name, type, number, type_class, options,
- oneof_index: @oneof_index)
- end
- end
-
- class EnumBuilder
- def initialize(name, file_proto)
- @enum_proto = Google::Protobuf::EnumDescriptorProto.new(
- :name => name
- )
- file_proto.enum_type << @enum_proto
- end
-
- def value(name, number)
- enum_value_proto = Google::Protobuf::EnumValueDescriptorProto.new(
- name: name,
- number: number
- )
- @enum_proto.value << enum_value_proto
- end
- end
-
- end
-
- # Re-open the class (the rest of the class is implemented in C)
- class DescriptorPool
- def build(&block)
- builder = Internal::Builder.new(self)
- builder.instance_eval(&block)
- builder.build
- end
- end
- end
-end
diff --git a/ruby/lib/google/protobuf/ffi/descriptor_pool.rb b/ruby/lib/google/protobuf/ffi/descriptor_pool.rb
index f0543ad..96c7d09 100644
--- a/ruby/lib/google/protobuf/ffi/descriptor_pool.rb
+++ b/ruby/lib/google/protobuf/ffi/descriptor_pool.rb
@@ -9,13 +9,16 @@
module Protobuf
class FFI
# DefPool
- attach_function :add_serialized_file, :upb_DefPool_AddFile, [:DefPool, :FileDescriptorProto, Status.by_ref], :FileDef
- attach_function :free_descriptor_pool, :upb_DefPool_Free, [:DefPool], :void
- attach_function :create_descriptor_pool,:upb_DefPool_New, [], :DefPool
- attach_function :lookup_enum, :upb_DefPool_FindEnumByName, [:DefPool, :string], EnumDescriptor
- attach_function :lookup_msg, :upb_DefPool_FindMessageByName, [:DefPool, :string], Descriptor
- # FileDescriptorProto
- attach_function :parse, :FileDescriptorProto_parse, [:binary_string, :size_t, Internal::Arena], :FileDescriptorProto
+ attach_function :add_serialized_file, :upb_DefPool_AddFile, [:DefPool, :FileDescriptorProto, Status.by_ref], :FileDef
+ attach_function :free_descriptor_pool, :upb_DefPool_Free, [:DefPool], :void
+ attach_function :create_descriptor_pool,:upb_DefPool_New, [], :DefPool
+ attach_function :get_extension_registry,:upb_DefPool_ExtensionRegistry, [:DefPool], :ExtensionRegistry
+ attach_function :lookup_enum, :upb_DefPool_FindEnumByName, [:DefPool, :string], EnumDescriptor
+ attach_function :lookup_extension, :upb_DefPool_FindExtensionByName,[:DefPool, :string], FieldDescriptor
+ attach_function :lookup_msg, :upb_DefPool_FindMessageByName, [:DefPool, :string], Descriptor
+
+ # FileDescriptorProto
+ attach_function :parse, :FileDescriptorProto_parse, [:binary_string, :size_t, Internal::Arena], :FileDescriptorProto
end
class DescriptorPool
attr :descriptor_pool
@@ -50,7 +53,8 @@
def lookup name
Google::Protobuf::FFI.lookup_msg(@descriptor_pool, name) ||
- Google::Protobuf::FFI.lookup_enum(@descriptor_pool, name)
+ Google::Protobuf::FFI.lookup_enum(@descriptor_pool, name) ||
+ Google::Protobuf::FFI.lookup_extension(@descriptor_pool, name)
end
def self.generated_pool
diff --git a/ruby/lib/google/protobuf/ffi/message.rb b/ruby/lib/google/protobuf/ffi/message.rb
index 045f67f..39eb403 100644
--- a/ruby/lib/google/protobuf/ffi/message.rb
+++ b/ruby/lib/google/protobuf/ffi/message.rb
@@ -170,7 +170,15 @@
message = new
mini_table_ptr = Google::Protobuf::FFI.get_mini_table(message.class.descriptor)
- status = Google::Protobuf::FFI.decode_message(data, data.bytesize, message.instance_variable_get(:@msg), mini_table_ptr, nil, decoding_options, message.instance_variable_get(:@arena))
+ status = Google::Protobuf::FFI.decode_message(
+ data,
+ data.bytesize,
+ message.instance_variable_get(:@msg),
+ mini_table_ptr,
+ Google::Protobuf::FFI.get_extension_registry(message.class.descriptor.send(:pool).descriptor_pool),
+ decoding_options,
+ message.instance_variable_get(:@arena)
+ )
raise ParseError.new "Error occurred during parsing" unless status == :Ok
message
end
diff --git a/ruby/lib/google/protobuf/repeated_field.rb b/ruby/lib/google/protobuf/repeated_field.rb
index a48095b..b8c71e0 100644
--- a/ruby/lib/google/protobuf/repeated_field.rb
+++ b/ruby/lib/google/protobuf/repeated_field.rb
@@ -94,7 +94,6 @@
end
# array aliases into enumerable
- alias_method :each_index, :each_with_index
alias_method :slice, :[]
alias_method :values_at, :select
alias_method :map, :collect
@@ -145,7 +144,7 @@
end
- %w(collect! compact! delete_if fill flatten! insert reverse!
+ %w(collect! compact! delete_if each_index fill flatten! insert reverse!
rotate! select! shuffle! sort! sort_by! uniq!).each do |method_name|
define_array_wrapper_with_result_method(method_name)
end
diff --git a/ruby/lib/google/protobuf_ffi.rb b/ruby/lib/google/protobuf_ffi.rb
index 12616ee..0839b36 100644
--- a/ruby/lib/google/protobuf_ffi.rb
+++ b/ruby/lib/google/protobuf_ffi.rb
@@ -21,7 +21,6 @@
require 'google/protobuf/ffi/object_cache'
require 'google/protobuf/ffi/repeated_field'
require 'google/protobuf/ffi/message'
-require 'google/protobuf/descriptor_dsl'
module Google
module Protobuf
@@ -47,4 +46,4 @@
nil
end
end
-end
\ No newline at end of file
+end
diff --git a/ruby/lib/google/protobuf_native.rb b/ruby/lib/google/protobuf_native.rb
index eddaa7d..9605b6b 100644
--- a/ruby/lib/google/protobuf_native.rb
+++ b/ruby/lib/google/protobuf_native.rb
@@ -16,5 +16,4 @@
end
end
-require 'google/protobuf/descriptor_dsl'
require 'google/protobuf/repeated_field'
diff --git a/ruby/lib/google/tasks/ffi.rake b/ruby/lib/google/tasks/ffi.rake
index c7b2a8e..5de10a7 100644
--- a/ruby/lib/google/tasks/ffi.rake
+++ b/ruby/lib/google/tasks/ffi.rake
@@ -74,9 +74,7 @@
FFI::Compiler::CompileTask.new 'protobuf_c_ffi' do |c|
configure_common_compile_task c
# Ruby UPB was already compiled with different flags.
- c.exclude << "/range2-neon.c"
- c.exclude << "/range2-sse.c"
- c.exclude << "/naive.c"
+ c.exclude << "/utf8_range.c"
c.exclude << "/ruby-upb.c"
end
diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java
index d65b412..7c01eb9 100644
--- a/ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java
+++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java
@@ -36,7 +36,9 @@
import com.google.protobuf.Descriptors.Descriptor;
import com.google.protobuf.Descriptors.DescriptorValidationException;
import com.google.protobuf.Descriptors.EnumDescriptor;
+import com.google.protobuf.Descriptors.FieldDescriptor;
import com.google.protobuf.Descriptors.FileDescriptor;
+import com.google.protobuf.ExtensionRegistry;
import com.google.protobuf.InvalidProtocolBufferException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -70,6 +72,7 @@
cDescriptorPool.newInstance(runtime.getCurrentContext(), Block.NULL_BLOCK);
cDescriptor = (RubyClass) runtime.getClassFromPath("Google::Protobuf::Descriptor");
cEnumDescriptor = (RubyClass) runtime.getClassFromPath("Google::Protobuf::EnumDescriptor");
+ cFieldDescriptor = (RubyClass) runtime.getClassFromPath("Google::Protobuf::FieldDescriptor");
}
public RubyDescriptorPool(Ruby runtime, RubyClass klazz) {
@@ -92,7 +95,7 @@
* call-seq:
* DescriptorPool.lookup(name) => descriptor
*
- * Finds a Descriptor or EnumDescriptor by name and returns it, or nil if none
+ * Finds a Descriptor, EnumDescriptor or FieldDescriptor by name and returns it, or nil if none
* exists with the given name.
*
* This currently lazy loads the ruby descriptor objects as they are requested.
@@ -121,7 +124,8 @@
public IRubyObject add_serialized_file(ThreadContext context, IRubyObject data) {
byte[] bin = data.convertToString().getBytes();
try {
- FileDescriptorProto.Builder builder = FileDescriptorProto.newBuilder().mergeFrom(bin);
+ FileDescriptorProto.Builder builder =
+ FileDescriptorProto.newBuilder().mergeFrom(bin, registry);
registerFileDescriptor(context, builder);
} catch (InvalidProtocolBufferException e) {
throw RaiseException.from(
@@ -150,6 +154,8 @@
for (EnumDescriptor ed : fd.getEnumTypes()) registerEnumDescriptor(context, ed, packageName);
for (Descriptor message : fd.getMessageTypes())
registerDescriptor(context, message, packageName);
+ for (FieldDescriptor fieldDescriptor : fd.getExtensions())
+ registerExtension(context, fieldDescriptor, packageName);
// Mark this as a loaded file
fileDescriptors.add(fd);
@@ -170,6 +176,24 @@
registerEnumDescriptor(context, ed, fullPath);
for (Descriptor message : descriptor.getNestedTypes())
registerDescriptor(context, message, fullPath);
+ for (FieldDescriptor fieldDescriptor : descriptor.getExtensions())
+ registerExtension(context, fieldDescriptor, fullPath);
+ }
+
+ private void registerExtension(
+ ThreadContext context, FieldDescriptor descriptor, String parentPath) {
+ if (descriptor.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
+ registry.add(descriptor, descriptor.toProto());
+ } else {
+ registry.add(descriptor);
+ }
+ RubyString name = context.runtime.newString(parentPath + descriptor.getName());
+ RubyFieldDescriptor des =
+ (RubyFieldDescriptor) cFieldDescriptor.newInstance(context, Block.NULL_BLOCK);
+ des.setName(name);
+ des.setDescriptor(context, descriptor, this);
+ // For MessageSet extensions, there is the possibility of a name conflict. Prefer the Message.
+ symtab.putIfAbsent(name, des);
}
private void registerEnumDescriptor(
@@ -188,8 +212,10 @@
private static RubyClass cDescriptor;
private static RubyClass cEnumDescriptor;
+ private static RubyClass cFieldDescriptor;
private static RubyDescriptorPool descriptorPool;
private List<FileDescriptor> fileDescriptors;
private Map<IRubyObject, IRubyObject> symtab;
+ protected static final ExtensionRegistry registry = ExtensionRegistry.newInstance();
}
diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java
index 5ba86ef..1d647ea 100644
--- a/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java
+++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java
@@ -103,6 +103,10 @@
return this.name;
}
+ protected void setName(IRubyObject name) {
+ this.name = name;
+ }
+
/*
* call-seq:
* FieldDescriptor.subtype => message_or_enum_descriptor
@@ -229,7 +233,7 @@
*/
@JRubyMethod(name = "set")
public IRubyObject setValue(ThreadContext context, IRubyObject message, IRubyObject value) {
- ((RubyMessage) message).setField(context, descriptor, value);
+ ((RubyMessage) message).setField(context, this, value);
return context.nil;
}
@@ -263,6 +267,10 @@
this.pool = pool;
}
+ protected FieldDescriptor getDescriptor() {
+ return descriptor;
+ }
+
private void calculateLabel(ThreadContext context) {
if (descriptor.isRepeated()) {
this.label = context.runtime.newSymbol("repeated");
diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java
index a7699a0..b30d0b1 100644
--- a/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java
+++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java
@@ -42,6 +42,7 @@
import com.google.protobuf.DynamicMessage;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.LegacyDescriptorsUtil.LegacyFileDescriptor;
+import com.google.protobuf.LegacyDescriptorsUtil.LegacyOneofDescriptor;
import com.google.protobuf.Message;
import com.google.protobuf.UnknownFieldSet;
import com.google.protobuf.util.JsonFormat;
@@ -633,7 +634,7 @@
public static IRubyObject decodeBytes(
ThreadContext context, RubyMessage ret, CodedInputStream input, boolean freeze) {
try {
- ret.builder.mergeFrom(input);
+ ret.builder.mergeFrom(input, RubyDescriptorPool.registry);
} catch (Exception e) {
throw RaiseException.from(
context.runtime,
@@ -964,6 +965,12 @@
return setFieldInternal(context, fieldDescriptor, value);
}
+ protected IRubyObject setField(
+ ThreadContext context, RubyFieldDescriptor fieldDescriptor, IRubyObject value) {
+ validateMessageType(context, fieldDescriptor.getDescriptor(), "set");
+ return setFieldInternal(context, fieldDescriptor.getDescriptor(), fieldDescriptor, value);
+ }
+
private RubyRepeatedField getRepeatedField(
ThreadContext context, FieldDescriptor fieldDescriptor) {
if (fields.containsKey(fieldDescriptor)) {
@@ -1274,6 +1281,14 @@
private IRubyObject setFieldInternal(
ThreadContext context, FieldDescriptor fieldDescriptor, IRubyObject value) {
+ return setFieldInternal(context, fieldDescriptor, null, value);
+ }
+
+ private IRubyObject setFieldInternal(
+ ThreadContext context,
+ FieldDescriptor fieldDescriptor,
+ RubyFieldDescriptor rubyFieldDescriptor,
+ IRubyObject value) {
testFrozen("can't modify frozen " + getMetaClass());
if (fieldDescriptor.isMapField()) {
@@ -1298,8 +1313,12 @@
// Determine the typeclass, if any
IRubyObject typeClass = context.runtime.getObject();
if (fieldType == FieldDescriptor.Type.MESSAGE) {
- typeClass =
- ((RubyDescriptor) getDescriptorForField(context, fieldDescriptor)).msgclass(context);
+ if (rubyFieldDescriptor != null) {
+ typeClass = ((RubyDescriptor) rubyFieldDescriptor.getSubtype(context)).msgclass(context);
+ } else {
+ typeClass =
+ ((RubyDescriptor) getDescriptorForField(context, fieldDescriptor)).msgclass(context);
+ }
if (value.isNil()) {
addValue = false;
}
@@ -1321,7 +1340,7 @@
// Keep track of what Oneofs are set
if (value.isNil()) {
oneofCases.remove(oneofDescriptor);
- if (!oneofDescriptor.isSynthetic()) {
+ if (!LegacyOneofDescriptor.isSynthetic(oneofDescriptor)) {
addValue = false;
}
} else {
diff --git a/ruby/tests/BUILD.bazel b/ruby/tests/BUILD.bazel
index 5756620..17166b1 100644
--- a/ruby/tests/BUILD.bazel
+++ b/ruby/tests/BUILD.bazel
@@ -1,17 +1,24 @@
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_ruby//ruby:defs.bzl", "ruby_library", "ruby_test")
+load("//ruby:defs.bzl", "internal_ruby_proto_library")
ruby_library(
name = "common_tests",
srcs = ["common_tests.rb"],
)
-filegroup(
- name = "test_protos",
+internal_ruby_proto_library(
+ name = "test_ruby_protos",
srcs = glob(["*.proto"]),
+ includes = [
+ ".",
+ "ruby/tests",
+ "src",
+ ],
visibility = [
"//ruby:__subpackages__",
],
+ deps = ["//ruby:well_known_ruby_protos"],
)
ruby_test(
@@ -28,8 +35,8 @@
srcs = ["basic.rb"],
deps = [
":common_tests",
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -39,8 +46,8 @@
srcs = ["basic_proto2.rb"],
deps = [
":common_tests",
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -49,8 +56,8 @@
name = "encode_decode_test",
srcs = ["encode_decode_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -59,8 +66,8 @@
name = "gc_test",
srcs = ["gc_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -69,8 +76,8 @@
name = "generated_code_test",
srcs = ["generated_code_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -79,8 +86,8 @@
name = "multi_level_nesting_test",
srcs = ["multi_level_nesting_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -89,8 +96,8 @@
name = "object_cache_test",
srcs = ["object_cache_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -99,8 +106,8 @@
name = "repeated_field_test",
srcs = ["repeated_field_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -109,8 +116,8 @@
name = "ruby_version",
srcs = ["ruby_version.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -119,8 +126,8 @@
name = "stress",
srcs = ["stress.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -129,8 +136,8 @@
name = "type_errors",
srcs = ["type_errors.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
@@ -139,8 +146,8 @@
name = "well_known_types_test",
srcs = ["well_known_types_test.rb"],
deps = [
+ ":test_ruby_protos",
"//ruby:protobuf",
- "//ruby:test_ruby_protos",
"@protobuf_bundle//:test-unit",
],
)
diff --git a/ruby/tests/basic.rb b/ruby/tests/basic.rb
index 9cd2d70..4dc45e7 100755
--- a/ruby/tests/basic.rb
+++ b/ruby/tests/basic.rb
@@ -9,20 +9,9 @@
require 'json'
require 'test/unit'
-# ------------- generated code --------------
-
module BasicTest
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
- add_message "BadFieldNames" do
- optional :dup, :int32, 1
- optional :class, :int32, 2
- end
- end
-
- BadFieldNames = pool.lookup("BadFieldNames").msgclass
-
-# ------------ test cases ---------------
+ TestMessage = BasicTest::TestMessage
+ Outer = BasicTest::Outer
class MessageContainerTest < Test::Unit::TestCase
# Required by CommonTests module to resolve proto3 proto classes used in tests.
@@ -32,32 +21,12 @@
include CommonTests
def test_issue_8311_crash
- Google::Protobuf::DescriptorPool.generated_pool.build do
- add_file("inner.proto", :syntax => :proto3) do
- add_message "Inner" do
- # Removing either of these fixes the segfault.
- optional :foo, :string, 1
- optional :bar, :string, 2
- end
- end
- end
-
- Google::Protobuf::DescriptorPool.generated_pool.build do
- add_file("outer.proto", :syntax => :proto3) do
- add_message "Outer" do
- repeated :inners, :message, 1, "Inner"
- end
- end
- end
-
- outer = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Outer").msgclass
-
- outer.new(
+ BasicTest::Outer8311.new(
inners: []
)['inners'].to_s
assert_raises Google::Protobuf::TypeError do
- outer.new(
+ BasicTest::Outer8311.new(
inners: [nil]
).to_s
end
@@ -83,29 +52,16 @@
end
def test_issue_9507
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
- add_message "NpeMessage" do
- optional :type, :enum, 1, "TestEnum"
- optional :other, :string, 2
- end
- add_enum "TestEnum" do
- value :Something, 0
- end
- end
-
- msgclass = pool.lookup("NpeMessage").msgclass
-
- m = msgclass.new(
+ m = BasicTest::NpeMessage.new(
other: "foo" # must be set, but can be blank
)
begin
- encoded = msgclass.encode(m)
+ encoded = BasicTest::NpeMessage.encode(m)
rescue java.lang.NullPointerException
flunk "NPE rescued"
end
- decoded = msgclass.decode(encoded)
+ decoded = BasicTest::NpeMessage.decode(encoded)
decoded.inspect
decoded.to_proto
end
@@ -609,12 +565,12 @@
def test_file_descriptor
file_descriptor = TestMessage.descriptor.file_descriptor
refute_nil file_descriptor
- assert_equal "tests/basic_test.proto", file_descriptor.name
+ assert_equal "basic_test.proto", file_descriptor.name
assert_equal :proto3, file_descriptor.syntax
file_descriptor = TestEnum.descriptor.file_descriptor
refute_nil file_descriptor
- assert_equal "tests/basic_test.proto", file_descriptor.name
+ assert_equal "basic_test.proto", file_descriptor.name
assert_equal :proto3, file_descriptor.syntax
end
@@ -729,6 +685,19 @@
oneof_descriptor = descriptor.lookup_oneof("test_deprecated_message_oneof")
assert_instance_of Google::Protobuf::OneofOptions, oneof_descriptor.options
+ test_top_level_option = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test.test_top_level_option'
+ assert_instance_of Google::Protobuf::FieldDescriptor, test_top_level_option
+ assert_equal "Custom option value", test_top_level_option.get(oneof_descriptor.options)
+ end
+
+ def test_nested_extension
+ descriptor = TestDeprecatedMessage.descriptor
+ oneof_descriptor = descriptor.lookup_oneof("test_deprecated_message_oneof")
+
+ assert_instance_of Google::Protobuf::OneofOptions, oneof_descriptor.options
+ test_nested_option = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test.TestDeprecatedMessage.test_nested_option'
+ assert_instance_of Google::Protobuf::FieldDescriptor, test_nested_option
+ assert_equal "Another custom option value", test_nested_option.get(oneof_descriptor.options)
end
def test_options_deep_freeze
@@ -739,6 +708,25 @@
Google::Protobuf::UninterpretedOption.new
end
end
+
+ def test_message_deep_freeze
+ message = TestDeprecatedMessage.new
+ omit(":internal_deep_freeze only exists under FFI") unless message.respond_to? :internal_deep_freeze, true
+ nested_message_2 = TestMessage2.new
+
+ message.map_string_msg["message"] = TestMessage2.new
+ message.repeated_msg.push(TestMessage2.new)
+
+ message.send(:internal_deep_freeze)
+
+ assert_raise FrozenError do
+ message.map_string_msg["message"].foo = "bar"
+ end
+
+ assert_raise FrozenError do
+ message.repeated_msg[0].foo = "bar"
+ end
+ end
end
def test_oneof_fields_respond_to? # regression test for issue 9202
@@ -755,4 +743,15 @@
assert_respond_to msg, :has_d?
refute msg.has_d?
end
+
+ def test_string_subclass
+ str = "hello"
+ myString = Class.new(String)
+
+ m = proto_module::TestMessage.new(
+ optional_string: myString.new(str),
+ )
+
+ assert_equal str, m.optional_string
+ end
end
diff --git a/ruby/tests/basic_proto2.rb b/ruby/tests/basic_proto2.rb
index e9e99e5..26c2534 100755
--- a/ruby/tests/basic_proto2.rb
+++ b/ruby/tests/basic_proto2.rb
@@ -9,23 +9,7 @@
require 'json'
require 'test/unit'
-# ------------- generated code --------------
-
module BasicTestProto2
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
- add_file "test_proto2.proto", syntax: :proto2 do
- add_message "BadFieldNames" do
- optional :dup, :int32, 1
- optional :class, :int32, 2
- end
- end
- end
-
- BadFieldNames = pool.lookup("BadFieldNames").msgclass
-
-# ------------ test cases ---------------
-
class MessageContainerTest < Test::Unit::TestCase
# Required by CommonTests module to resolve proto2 proto classes used in tests.
def proto_module
@@ -246,12 +230,12 @@
def test_file_descriptor
file_descriptor = TestMessage.descriptor.file_descriptor
refute_nil file_descriptor
- assert_equal "tests/basic_test_proto2.proto", file_descriptor.name
+ assert_equal "basic_test_proto2.proto", file_descriptor.name
assert_equal :proto2, file_descriptor.syntax
file_descriptor = TestEnum.descriptor.file_descriptor
refute_nil file_descriptor
- assert_equal "tests/basic_test_proto2.proto", file_descriptor.name
+ assert_equal "basic_test_proto2.proto", file_descriptor.name
assert_equal :proto2, file_descriptor.syntax
end
@@ -269,5 +253,57 @@
assert msg.respond_to? :has_d?
refute msg.has_d?
end
+
+ def test_extension
+ message = TestExtensions.new
+ extension = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.optional_int32_extension'
+ assert_instance_of Google::Protobuf::FieldDescriptor, extension
+ assert_equal 0, extension.get(message)
+ extension.set message, 42
+ assert_equal 42, extension.get(message)
+ end
+
+ def test_nested_extension
+ message = TestExtensions.new
+ extension = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.TestNestedExtension.test'
+ assert_instance_of Google::Protobuf::FieldDescriptor, extension
+ assert_equal 'test', extension.get(message)
+ extension.set message, 'another test'
+ assert_equal 'another test', extension.get(message)
+ end
+
+ def test_message_set_extension_json_roundtrip
+ omit "Java Protobuf JsonFormat does not handle Proto2 extensions" if defined? JRUBY_VERSION and :NATIVE == Google::Protobuf::IMPLEMENTATION
+ message = TestMessageSet.new
+ ext1 = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.TestMessageSetExtension1.message_set_extension'
+ assert_instance_of Google::Protobuf::FieldDescriptor, ext1
+ ext2 = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.TestMessageSetExtension2.message_set_extension'
+ assert_instance_of Google::Protobuf::FieldDescriptor, ext2
+ ext3 = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.message_set_extension3'
+ assert_instance_of Google::Protobuf::FieldDescriptor, ext3
+ ext1.set(message, ext1.subtype.msgclass.new(i: 42))
+ ext2.set(message, ext2.subtype.msgclass.new(str: 'foo'))
+ ext3.set(message, ext3.subtype.msgclass.new(text: 'bar'))
+ message_text = message.to_json
+ parsed_message = TestMessageSet.decode_json message_text
+ assert_equal message, parsed_message
+ end
+
+
+ def test_message_set_extension_roundtrip
+ message = TestMessageSet.new
+ ext1 = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.TestMessageSetExtension1.message_set_extension'
+ assert_instance_of Google::Protobuf::FieldDescriptor, ext1
+ ext2 = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.TestMessageSetExtension2.message_set_extension'
+ assert_instance_of Google::Protobuf::FieldDescriptor, ext2
+ ext3 = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.message_set_extension3'
+ assert_instance_of Google::Protobuf::FieldDescriptor, ext3
+ ext1.set(message, ext1.subtype.msgclass.new(i: 42))
+ ext2.set(message, ext2.subtype.msgclass.new(str: 'foo'))
+ ext3.set(message, ext3.subtype.msgclass.new(text: 'bar'))
+ encoded_message = TestMessageSet.encode message
+ decoded_message = TestMessageSet.decode encoded_message
+ assert_equal message, decoded_message
+ end
end
end
diff --git a/ruby/tests/basic_test.proto b/ruby/tests/basic_test.proto
index 89eb9cc..5c9bb60 100644
--- a/ruby/tests/basic_test.proto
+++ b/ruby/tests/basic_test.proto
@@ -2,6 +2,7 @@
package basic_test;
+import "google/protobuf/descriptor.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
@@ -70,12 +71,23 @@
optional int32 foo = 1;
}
+extend google.protobuf.OneofOptions {
+ optional string test_top_level_option = 1000;
+}
+
message TestDeprecatedMessage {
option deprecated = true;
+ extend google.protobuf.OneofOptions {
+ optional string test_nested_option = 1001;
+ }
+
optional int32 foo = 1 [deprecated = true];
oneof test_deprecated_message_oneof {
+ option (test_top_level_option) = "Custom option value";
+ option (test_nested_option) = "Another custom option value";
+
string a = 2;
int32 b = 3;
}
@@ -273,3 +285,31 @@
optional uint32 random_name_c9 = 31;
optional string version = 32;
}
+
+message BadFieldNames {
+ optional int32 dup = 1;
+ optional int32 class = 2;
+}
+
+// Messages to test the fix for
+// https://github.com/protocolbuffers/protobuf/issues/8311.
+message Inner8311 {
+ // Removing either of these fixes the segfault.
+ optional string foo = 1;
+ optional string bar = 2;
+}
+
+message Outer8311 {
+ repeated Inner8311 inners = 1;
+}
+
+// Messages to test the fix for
+// https://github.com/protocolbuffers/protobuf/issues/9507
+message NpeMessage {
+ optional TestEnum9507 type = 1;
+ optional string other = 2;
+}
+
+enum TestEnum9507 {
+ Something = 0;
+}
diff --git a/ruby/tests/basic_test_proto2.proto b/ruby/tests/basic_test_proto2.proto
index ac705ed..85d61cf 100644
--- a/ruby/tests/basic_test_proto2.proto
+++ b/ruby/tests/basic_test_proto2.proto
@@ -2,10 +2,10 @@
package basic_test_proto2;
-import "google/protobuf/wrappers.proto";
-import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto";
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/wrappers.proto";
message Foo {
optional Bar bar = 1;
@@ -188,3 +188,51 @@
optional string string = 1;
optional google.protobuf.Struct struct = 2;
}
+
+message TestExtensions {
+ extensions 1 to max;
+}
+
+message TestNestedExtension {
+ extend TestExtensions {
+ optional string test = 1002 [default = "test"];
+ }
+}
+
+extend TestExtensions {
+ optional int32 optional_int32_extension = 1;
+}
+
+// A message with message_set_wire_format.
+message TestMessageSet {
+ option message_set_wire_format = true;
+
+ extensions 4 to max;
+}
+
+message TestMessageSetExtension1 {
+ extend TestMessageSet {
+ optional TestMessageSetExtension1 message_set_extension = 98418603;
+ }
+ optional int32 i = 15;
+}
+
+message TestMessageSetExtension2 {
+ extend TestMessageSet {
+ optional TestMessageSetExtension2 message_set_extension = 98418634;
+ }
+ optional string str = 25;
+}
+
+message TestMessageSetExtension3 {
+ optional string text = 35;
+}
+
+extend TestMessageSet {
+ optional TestMessageSetExtension3 message_set_extension3 = 98418655;
+}
+
+message BadFieldNames {
+ optional int32 dup = 1;
+ optional int32 class = 2;
+}
diff --git a/ruby/tests/common_tests.rb b/ruby/tests/common_tests.rb
index 52e0845..dd2ad39 100644
--- a/ruby/tests/common_tests.rb
+++ b/ruby/tests/common_tests.rb
@@ -855,26 +855,6 @@
assert_equal proto_module::TestMessage.decode_json([m.to_json].first), decoded_msg
end
- def test_def_errors
- s = Google::Protobuf::DescriptorPool.new
- assert_raises Google::Protobuf::TypeError do
- s.build do
- # enum with no default (integer value 0)
- add_enum "MyEnum" do
- value :A, 1
- end
- end
- end
- assert_raises Google::Protobuf::TypeError do
- s.build do
- # message with required field (unsupported in proto3)
- add_message "MyMessage" do
- required :foo, :int32, 1
- end
- end
- end
- end
-
def test_corecursive
# just be sure that we can instantiate types with corecursive field-type
# references.
diff --git a/ruby/tests/repeated_field_test.proto b/ruby/tests/repeated_field_test.proto
new file mode 100644
index 0000000..9bcb3fc
--- /dev/null
+++ b/ruby/tests/repeated_field_test.proto
@@ -0,0 +1,40 @@
+syntax = "proto3";
+
+package repeated_field_test_protos;
+
+message TestMessage {
+ optional int32 optional_int32 = 1;
+ optional int64 optional_int64 = 2;
+ optional uint32 optional_uint32 = 3;
+ optional uint64 optional_uint64 = 4;
+ optional bool optional_bool = 5;
+ optional float optional_float = 6;
+ optional double optional_double = 7;
+ optional string optional_string = 8;
+ optional bytes optional_bytes = 9;
+ optional TestMessage2 optional_msg = 10;
+ optional TestEnum optional_enum = 11;
+ repeated int32 repeated_int32 = 12;
+ repeated int64 repeated_int64 = 13;
+ repeated uint32 repeated_uint32 = 14;
+ repeated uint64 repeated_uint64 = 15;
+ repeated bool repeated_bool = 16;
+ repeated float repeated_float = 17;
+ repeated double repeated_double = 18;
+ repeated string repeated_string = 19;
+ repeated bytes repeated_bytes = 20;
+ repeated TestMessage2 repeated_msg = 21;
+ repeated TestEnum repeated_enum = 22;
+}
+
+message TestMessage2 {
+ optional int32 foo = 1;
+}
+
+enum TestEnum {
+ DEFAULT = 0;
+ A = 1;
+ B = 2;
+ C = 3;
+ V0 = 4;
+}
diff --git a/ruby/tests/repeated_field_test.rb b/ruby/tests/repeated_field_test.rb
index 8e49fdc..492d9d9 100755
--- a/ruby/tests/repeated_field_test.rb
+++ b/ruby/tests/repeated_field_test.rb
@@ -1,9 +1,12 @@
#!/usr/bin/ruby
require 'google/protobuf'
+require 'repeated_field_test_pb'
require 'test/unit'
class RepeatedFieldTest < Test::Unit::TestCase
+ TestMessage = RepeatedFieldTestProtos::TestMessage
+ TestMessage2 = RepeatedFieldTestProtos::TestMessage2
def test_acts_like_enumerator
m = TestMessage.new
@@ -143,6 +146,20 @@
end
+ def test_each_index
+ m = TestMessage.new
+ 5.times{|i| m.repeated_string << 'string' }
+
+ expected = 0
+ m.repeated_string.each_index do |idx|
+ assert_equal expected, idx
+ expected += 1
+ assert_equal 'string', m.repeated_string[idx]
+ end
+ assert_equal 5, expected
+ end
+
+
def test_empty?
m = TestMessage.new
assert_empty m.repeated_string
@@ -267,7 +284,7 @@
m.repeated_msg[3] = TestMessage2.new(:foo => 1)
assert_equal [nil, nil, nil, TestMessage2.new(:foo => 1)], m.repeated_msg
m.repeated_enum[3] = :A
- assert_equal [:Default, :Default, :Default, :A], m.repeated_enum
+ assert_equal [:DEFAULT, :DEFAULT, :DEFAULT, :A], m.repeated_enum
# check_self_modifying_method(m.repeated_string, reference_arr) do |arr|
# arr[20] = 'spacious'
@@ -660,52 +677,4 @@
test_msg.repeated_enum << :A
test_msg.repeated_enum << :B
end
-
-
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
-
- add_message "TestMessage" do
- optional :optional_int32, :int32, 1
- optional :optional_int64, :int64, 2
- optional :optional_uint32, :uint32, 3
- optional :optional_uint64, :uint64, 4
- optional :optional_bool, :bool, 5
- optional :optional_float, :float, 6
- optional :optional_double, :double, 7
- optional :optional_string, :string, 8
- optional :optional_bytes, :bytes, 9
- optional :optional_msg, :message, 10, "TestMessage2"
- optional :optional_enum, :enum, 11, "TestEnum"
-
- repeated :repeated_int32, :int32, 12
- repeated :repeated_int64, :int64, 13
- repeated :repeated_uint32, :uint32, 14
- repeated :repeated_uint64, :uint64, 15
- repeated :repeated_bool, :bool, 16
- repeated :repeated_float, :float, 17
- repeated :repeated_double, :double, 18
- repeated :repeated_string, :string, 19
- repeated :repeated_bytes, :bytes, 20
- repeated :repeated_msg, :message, 21, "TestMessage2"
- repeated :repeated_enum, :enum, 22, "TestEnum"
- end
- add_message "TestMessage2" do
- optional :foo, :int32, 1
- end
-
- add_enum "TestEnum" do
- value :Default, 0
- value :A, 1
- value :B, 2
- value :C, 3
- value :v0, 4
- end
- end
-
- TestMessage = pool.lookup("TestMessage").msgclass
- TestMessage2 = pool.lookup("TestMessage2").msgclass
- TestEnum = pool.lookup("TestEnum").enummodule
-
-
end
diff --git a/ruby/tests/stress.proto b/ruby/tests/stress.proto
new file mode 100644
index 0000000..517e746
--- /dev/null
+++ b/ruby/tests/stress.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+package stress_test_protos;
+
+message TestMessage {
+ int32 a = 1;
+ repeated M b = 2;
+}
+
+message M {
+ string foo = 1;
+}
diff --git a/ruby/tests/stress.rb b/ruby/tests/stress.rb
index 413d112..c564320 100755
--- a/ruby/tests/stress.rb
+++ b/ruby/tests/stress.rb
@@ -5,19 +5,8 @@
require 'test/unit'
module StressTest
- pool = Google::Protobuf::DescriptorPool.new
- pool.build do
- add_message "TestMessage" do
- proto3_optional :a, :int32, 1
- repeated :b, :message, 2, "M"
- end
- add_message "M" do
- proto3_optional :foo, :string, 1
- end
- end
-
- TestMessage = pool.lookup("TestMessage").msgclass
- M = pool.lookup("M").msgclass
+ TestMessage = StressTestProtos::TestMessage
+ M = StressTestProtos::M
class StressTest < Test::Unit::TestCase
def get_msg
diff --git a/rust/BUILD b/rust/BUILD
index 61f8236..62ae297 100644
--- a/rust/BUILD
+++ b/rust/BUILD
@@ -2,7 +2,6 @@
load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
-
load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain")
package(
@@ -47,6 +46,7 @@
#
# shared.rs is the root of the crate and has public items re-exported in protobuf.rs for user use.
PROTOBUF_SHARED = [
+ "enum.rs",
"internal.rs",
"macros.rs",
"optional.rs",
@@ -56,6 +56,7 @@
"shared.rs",
"string.rs",
"vtable.rs",
+ "map.rs",
]
# The Rust Protobuf runtime using the upb kernel.
@@ -65,15 +66,15 @@
# setting.
rust_library(
name = "protobuf_upb",
- srcs = PROTOBUF_SHARED + [
- "map.rs",
- "upb.rs",
- ],
+ srcs = PROTOBUF_SHARED + ["upb.rs"],
crate_root = "shared.rs",
+ proc_macro_deps = [
+ "@crate_index//:paste",
+ ],
rustc_flags = ["--cfg=upb_kernel"],
visibility = [
- "//src/google/protobuf:__subpackages__",
"//rust:__subpackages__",
+ "//src/google/protobuf:__subpackages__",
],
deps = [
":utf8",
@@ -113,6 +114,9 @@
name = "protobuf_cpp_test",
crate = ":protobuf_cpp",
rustc_flags = ["--cfg=cpp_kernel"],
+ deps = [
+ "@crate_index//:googletest",
+ ],
)
rust_library(
diff --git a/rust/aspects.bzl b/rust/aspects.bzl
index 68a590e..0399c12 100644
--- a/rust/aspects.bzl
+++ b/rust/aspects.bzl
@@ -323,12 +323,10 @@
),
},
fragments = ["cpp"],
- host_fragments = ["cpp"],
toolchains = [
"@rules_rust//rust:toolchain_type",
"@bazel_tools//tools/cpp:toolchain_type",
],
- incompatible_use_toolchain_transition = True,
)
rust_upb_proto_library_aspect = _make_proto_library_aspect(is_upb = True)
diff --git a/rust/cpp.rs b/rust/cpp.rs
index 7c4998f..fab8753 100644
--- a/rust/cpp.rs
+++ b/rust/cpp.rs
@@ -7,10 +7,17 @@
// Rust Protobuf runtime using the C++ kernel.
-use crate::__internal::{Private, RawArena, RawMessage, RawRepeatedField};
+use crate::ProtoStr;
+use crate::__internal::{Enum, Private, PtrAndLen, RawArena, RawMap, RawMessage, RawRepeatedField};
+use crate::{
+ Mut, Proxied, ProxiedInRepeated, Repeated, RepeatedMut, RepeatedView, SettableValue, View,
+};
+use core::fmt::Debug;
use paste::paste;
use std::alloc::Layout;
use std::cell::UnsafeCell;
+use std::convert::identity;
+use std::ffi::c_int;
use std::fmt;
use std::marker::PhantomData;
use std::mem::MaybeUninit;
@@ -135,10 +142,19 @@
}
}
+impl SettableValue<[u8]> for SerializedData {
+ fn set_on<'msg>(self, _private: Private, mut mutator: Mut<'msg, [u8]>)
+ where
+ [u8]: 'msg,
+ {
+ mutator.set(self.as_ref())
+ }
+}
+
pub type BytesPresentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type BytesAbsentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type InnerBytesMut<'msg> = crate::vtable::RawVTableMutator<'msg, [u8]>;
-pub type InnerPrimitiveMut<'a, T> = crate::vtable::RawVTableMutator<'a, T>;
+pub type InnerPrimitiveMut<'msg, T> = crate::vtable::RawVTableMutator<'msg, T>;
/// The raw contents of every generated message.
#[derive(Debug)]
@@ -171,149 +187,320 @@
MutatorMessageRef { msg: msg.msg, _phantom: PhantomData }
}
+ pub fn from_parent(
+ _private: Private,
+ _parent_msg: &'msg mut MessageInner,
+ message_field_ptr: RawMessage,
+ ) -> Self {
+ MutatorMessageRef { msg: message_field_ptr, _phantom: PhantomData }
+ }
+
pub fn msg(&self) -> RawMessage {
self.msg
}
}
-pub fn copy_bytes_in_arena_if_needed_by_runtime<'a>(
- _msg_ref: MutatorMessageRef<'a>,
- val: &'a [u8],
-) -> &'a [u8] {
+pub fn copy_bytes_in_arena_if_needed_by_runtime<'msg>(
+ _msg_ref: MutatorMessageRef<'msg>,
+ val: &'msg [u8],
+) -> &'msg [u8] {
// Nothing to do, the message manages its own string memory for C++.
val
}
-/// RepeatedField impls delegate out to `extern "C"` functions exposed by
-/// `cpp_api.h` and store either a RepeatedField* or a RepeatedPtrField*
-/// depending on the type.
+/// The raw type-erased pointer version of `RepeatedMut`.
///
-/// Note: even though this type is `Copy`, it should only be copied by
-/// protobuf internals that can maintain mutation invariants:
-///
-/// - No concurrent mutation for any two fields in a message: this means
-/// mutators cannot be `Send` but are `Sync`.
-/// - If there are multiple accessible `Mut` to a single message at a time, they
-/// must be different fields, and not be in the same oneof. As such, a `Mut`
-/// cannot be `Clone` but *can* reborrow itself with `.as_mut()`, which
-/// converts `&'b mut Mut<'a, T>` to `Mut<'b, T>`.
-#[derive(Debug)]
-pub struct RepeatedField<'msg, T: ?Sized> {
- inner: RepeatedFieldInner<'msg>,
- _phantom: PhantomData<&'msg mut T>,
-}
-
-/// CPP runtime-specific arguments for initializing a RepeatedField.
-/// See RepeatedField comment about mutation invariants for when this type can
-/// be copied.
+/// Contains a `proto2::RepeatedField*` or `proto2::RepeatedPtrField*`.
#[derive(Clone, Copy, Debug)]
-pub struct RepeatedFieldInner<'msg> {
- pub raw: RawRepeatedField,
- pub _phantom: PhantomData<&'msg ()>,
+pub struct InnerRepeatedMut<'msg> {
+ pub(crate) raw: RawRepeatedField,
+ _phantom: PhantomData<&'msg ()>,
}
-impl<'msg, T: ?Sized> RepeatedField<'msg, T> {
- pub fn from_inner(_private: Private, inner: RepeatedFieldInner<'msg>) -> Self {
- RepeatedField { inner, _phantom: PhantomData }
+impl<'msg> InnerRepeatedMut<'msg> {
+ #[doc(hidden)]
+ pub fn new(_private: Private, raw: RawRepeatedField) -> Self {
+ InnerRepeatedMut { raw, _phantom: PhantomData }
}
}
-// These use manual impls instead of derives to avoid unnecessary bounds on `T`.
-// This problem is referred to as "perfect derive".
-// https://smallcultfollowing.com/babysteps/blog/2022/04/12/implied-bounds-and-perfect-derive/
-impl<'msg, T: ?Sized> Copy for RepeatedField<'msg, T> {}
-impl<'msg, T: ?Sized> Clone for RepeatedField<'msg, T> {
- fn clone(&self) -> RepeatedField<'msg, T> {
+macro_rules! impl_repeated_primitives {
+ (@impl $($t:ty => [
+ $new_thunk:ident,
+ $free_thunk:ident,
+ $add_thunk:ident,
+ $size_thunk:ident,
+ $get_thunk:ident,
+ $set_thunk:ident,
+ $clear_thunk:ident,
+ $copy_from_thunk:ident $(,)?
+ ]),* $(,)?) => {
+ $(
+ extern "C" {
+ fn $new_thunk() -> RawRepeatedField;
+ fn $free_thunk(f: RawRepeatedField);
+ fn $add_thunk(f: RawRepeatedField, v: $t);
+ fn $size_thunk(f: RawRepeatedField) -> usize;
+ fn $get_thunk(f: RawRepeatedField, i: usize) -> $t;
+ fn $set_thunk(f: RawRepeatedField, i: usize, v: $t);
+ fn $clear_thunk(f: RawRepeatedField);
+ fn $copy_from_thunk(src: RawRepeatedField, dst: RawRepeatedField);
+ }
+
+ unsafe impl ProxiedInRepeated for $t {
+ #[allow(dead_code)]
+ fn repeated_new(_: Private) -> Repeated<$t> {
+ unsafe {
+ Repeated::from_inner(InnerRepeatedMut::new(Private, $new_thunk()))
+ }
+ }
+ #[allow(dead_code)]
+ unsafe fn repeated_free(_: Private, f: &mut Repeated<$t>) {
+ unsafe { $free_thunk(f.as_mut().as_raw(Private)) }
+ }
+ fn repeated_len(f: View<Repeated<$t>>) -> usize {
+ unsafe { $size_thunk(f.as_raw(Private)) }
+ }
+ fn repeated_push(mut f: Mut<Repeated<$t>>, v: View<$t>) {
+ unsafe { $add_thunk(f.as_raw(Private), v) }
+ }
+ fn repeated_clear(mut f: Mut<Repeated<$t>>) {
+ unsafe { $clear_thunk(f.as_raw(Private)) }
+ }
+ unsafe fn repeated_get_unchecked(f: View<Repeated<$t>>, i: usize) -> View<$t> {
+ unsafe { $get_thunk(f.as_raw(Private), i) }
+ }
+ unsafe fn repeated_set_unchecked(mut f: Mut<Repeated<$t>>, i: usize, v: View<$t>) {
+ unsafe { $set_thunk(f.as_raw(Private), i, v) }
+ }
+ fn repeated_copy_from(src: View<Repeated<$t>>, mut dest: Mut<Repeated<$t>>) {
+ unsafe { $copy_from_thunk(src.as_raw(Private), dest.as_raw(Private)) }
+ }
+ }
+ )*
+ };
+ ($($t:ty),* $(,)?) => {
+ paste!{
+ impl_repeated_primitives!(@impl $(
+ $t => [
+ [< __pb_rust_RepeatedField_ $t _new >],
+ [< __pb_rust_RepeatedField_ $t _free >],
+ [< __pb_rust_RepeatedField_ $t _add >],
+ [< __pb_rust_RepeatedField_ $t _size >],
+ [< __pb_rust_RepeatedField_ $t _get >],
+ [< __pb_rust_RepeatedField_ $t _set >],
+ [< __pb_rust_RepeatedField_ $t _clear >],
+ [< __pb_rust_RepeatedField_ $t _copy_from >],
+ ],
+ )*);
+ }
+ };
+}
+
+impl_repeated_primitives!(i32, u32, i64, u64, f32, f64, bool);
+
+/// Cast a `RepeatedView<SomeEnum>` to `RepeatedView<c_int>`.
+pub fn cast_enum_repeated_view<E: Enum + ProxiedInRepeated>(
+ private: Private,
+ repeated: RepeatedView<E>,
+) -> RepeatedView<c_int> {
+ // SAFETY: the implementer of `Enum` has promised that this
+ // raw repeated is a type-erased `proto2::RepeatedField<int>*`.
+ unsafe { RepeatedView::from_raw(private, repeated.as_raw(Private)) }
+}
+
+/// Cast a `RepeatedMut<SomeEnum>` to `RepeatedMut<c_int>`.
+///
+/// Writing an unknown value is sound because all enums
+/// are representationally open.
+pub fn cast_enum_repeated_mut<E: Enum + ProxiedInRepeated>(
+ private: Private,
+ mut repeated: RepeatedMut<E>,
+) -> RepeatedMut<i32> {
+ // SAFETY: the implementer of `Enum` has promised that this
+ // raw repeated is a type-erased `proto2::RepeatedField<int>*`.
+ unsafe {
+ RepeatedMut::from_inner(
+ private,
+ InnerRepeatedMut { raw: repeated.as_raw(Private), _phantom: PhantomData },
+ )
+ }
+}
+
+#[derive(Debug)]
+pub struct MapInner<'msg, K: ?Sized, V: ?Sized> {
+ pub raw: RawMap,
+ pub _phantom_key: PhantomData<&'msg mut K>,
+ pub _phantom_value: PhantomData<&'msg mut V>,
+}
+
+impl<'msg, K: ?Sized, V: ?Sized> Copy for MapInner<'msg, K, V> {}
+impl<'msg, K: ?Sized, V: ?Sized> Clone for MapInner<'msg, K, V> {
+ fn clone(&self) -> MapInner<'msg, K, V> {
*self
}
}
-pub trait RepeatedScalarOps {
- fn new_repeated_field() -> RawRepeatedField;
- fn push(f: RawRepeatedField, v: Self);
- fn len(f: RawRepeatedField) -> usize;
- fn get(f: RawRepeatedField, i: usize) -> Self;
- fn set(f: RawRepeatedField, i: usize, v: Self);
- fn copy_from(src: RawRepeatedField, dst: RawRepeatedField);
+macro_rules! generate_map_with_key_ops_traits {
+ ($($t:ty, $sized_t:ty;)*) => {
+ paste! {
+ $(
+ pub trait [< MapWith $t:camel KeyOps >] : Proxied {
+ fn new_map() -> RawMap;
+ fn clear(m: RawMap);
+ fn size(m: RawMap) -> usize;
+ fn insert(m: RawMap, key: $sized_t, value: View<'_, Self>) -> bool;
+ fn get<'msg>(m: RawMap, key: $sized_t) -> Option<View<'msg, Self>>;
+ fn remove(m: RawMap, key: $sized_t) -> bool;
+ }
+
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + ?Sized> Default for MapInner<'msg, $t, V> {
+ fn default() -> Self {
+ MapInner {
+ raw: V::new_map(),
+ _phantom_key: PhantomData,
+ _phantom_value: PhantomData
+ }
+ }
+ }
+
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + ?Sized> MapInner<'msg, $t, V> {
+ pub fn size(&self) -> usize {
+ V::size(self.raw)
+ }
+
+ pub fn clear(&mut self) {
+ V::clear(self.raw)
+ }
+
+ pub fn get<'a>(&self, key: $sized_t) -> Option<View<'a, V>> {
+ V::get(self.raw, key)
+ }
+
+ pub fn remove(&mut self, key: $sized_t) -> bool {
+ V::remove(self.raw, key)
+ }
+
+ pub fn insert(&mut self, key: $sized_t, value: View<'_, V>) -> bool {
+ V::insert(self.raw, key, value);
+ true
+ }
+ }
+ )*
+ }
+ }
}
-macro_rules! impl_repeated_scalar_ops {
- ($($t: ty),*) => {
+generate_map_with_key_ops_traits!(
+ i32, i32;
+ u32, u32;
+ i64, i64;
+ u64, u64;
+ bool, bool;
+ ProtoStr, &ProtoStr;
+);
+
+macro_rules! impl_scalar_map_with_key_op_for_scalar_values {
+ ($key_t:ty, $sized_key_t:ty, $ffi_key_t:ty, $to_ffi_key:expr, $trait:ident for $($t:ty, $ffi_t:ty, $to_ffi_value:expr, $from_ffi_value:expr, $zero_val:literal;)*) => {
paste! { $(
extern "C" {
- fn [< __pb_rust_RepeatedField_ $t _new >]() -> RawRepeatedField;
- fn [< __pb_rust_RepeatedField_ $t _add >](f: RawRepeatedField, v: $t);
- fn [< __pb_rust_RepeatedField_ $t _size >](f: RawRepeatedField) -> usize;
- fn [< __pb_rust_RepeatedField_ $t _get >](f: RawRepeatedField, i: usize) -> $t;
- fn [< __pb_rust_RepeatedField_ $t _set >](f: RawRepeatedField, i: usize, v: $t);
- fn [< __pb_rust_RepeatedField_ $t _copy_from >](src: RawRepeatedField, dst: RawRepeatedField);
+ fn [< __pb_rust_Map_ $key_t _ $t _new >]() -> RawMap;
+ fn [< __pb_rust_Map_ $key_t _ $t _clear >](m: RawMap);
+ fn [< __pb_rust_Map_ $key_t _ $t _size >](m: RawMap) -> usize;
+ fn [< __pb_rust_Map_ $key_t _ $t _insert >](m: RawMap, key: $ffi_key_t, value: $ffi_t);
+ fn [< __pb_rust_Map_ $key_t _ $t _get >](m: RawMap, key: $ffi_key_t, value: *mut $ffi_t) -> bool;
+ fn [< __pb_rust_Map_ $key_t _ $t _remove >](m: RawMap, key: $ffi_key_t, value: *mut $ffi_t) -> bool;
}
- impl RepeatedScalarOps for $t {
- fn new_repeated_field() -> RawRepeatedField {
- unsafe { [< __pb_rust_RepeatedField_ $t _new >]() }
+ impl $trait for $t {
+ fn new_map() -> RawMap {
+ unsafe { [< __pb_rust_Map_ $key_t _ $t _new >]() }
}
- fn push(f: RawRepeatedField, v: Self) {
- unsafe { [< __pb_rust_RepeatedField_ $t _add >](f, v) }
+
+ fn clear(m: RawMap) {
+ unsafe { [< __pb_rust_Map_ $key_t _ $t _clear >](m) }
}
- fn len(f: RawRepeatedField) -> usize {
- unsafe { [< __pb_rust_RepeatedField_ $t _size >](f) }
+
+ fn size(m: RawMap) -> usize {
+ unsafe { [< __pb_rust_Map_ $key_t _ $t _size >](m) }
}
- fn get(f: RawRepeatedField, i: usize) -> Self {
- unsafe { [< __pb_rust_RepeatedField_ $t _get >](f, i) }
+
+ fn insert(m: RawMap, key: $sized_key_t, value: View<'_, Self>) -> bool {
+ let ffi_key = $to_ffi_key(key);
+ let ffi_value = $to_ffi_value(value);
+ unsafe { [< __pb_rust_Map_ $key_t _ $t _insert >](m, ffi_key, ffi_value) }
+ true
}
- fn set(f: RawRepeatedField, i: usize, v: Self) {
- unsafe { [< __pb_rust_RepeatedField_ $t _set >](f, i, v) }
+
+ fn get<'msg>(m: RawMap, key: $sized_key_t) -> Option<View<'msg, Self>> {
+ let ffi_key = $to_ffi_key(key);
+ let mut ffi_value = $to_ffi_value($zero_val);
+ let found = unsafe { [< __pb_rust_Map_ $key_t _ $t _get >](m, ffi_key, &mut ffi_value) };
+ if !found {
+ return None;
+ }
+ Some($from_ffi_value(ffi_value))
}
- fn copy_from(src: RawRepeatedField, dst: RawRepeatedField) {
- unsafe { [< __pb_rust_RepeatedField_ $t _copy_from >](src, dst) }
+
+ fn remove(m: RawMap, key: $sized_key_t) -> bool {
+ let ffi_key = $to_ffi_key(key);
+ let mut ffi_value = $to_ffi_value($zero_val);
+ unsafe { [< __pb_rust_Map_ $key_t _ $t _remove >](m, ffi_key, &mut ffi_value) }
}
}
- )* }
- };
+ )* }
+ }
}
-impl_repeated_scalar_ops!(i32, u32, i64, u64, f32, f64, bool);
+fn str_to_ptrlen<'msg>(val: impl Into<&'msg ProtoStr>) -> PtrAndLen {
+ val.into().as_bytes().into()
+}
-impl<'msg, T: RepeatedScalarOps> RepeatedField<'msg, T> {
- #[allow(clippy::new_without_default, dead_code)]
- /// new() is not currently used in our normal pathways, it is only used
- /// for testing. Existing `RepeatedField<>`s are owned by, and retrieved
- /// from, the containing `Message`.
- pub fn new() -> Self {
- Self::from_inner(
- Private,
- RepeatedFieldInner::<'msg> { raw: T::new_repeated_field(), _phantom: PhantomData },
- )
- }
- pub fn push(&mut self, val: T) {
- T::push(self.inner.raw, val)
- }
- pub fn len(&self) -> usize {
- T::len(self.inner.raw)
- }
- pub fn is_empty(&self) -> bool {
- self.len() == 0
- }
- pub fn get(&self, index: usize) -> Option<T> {
- if index >= self.len() {
- return None;
+fn ptrlen_to_str<'msg>(val: PtrAndLen) -> &'msg ProtoStr {
+ unsafe { ProtoStr::from_utf8_unchecked(val.as_ref()) }
+}
+
+macro_rules! impl_map_with_key_ops_for_scalar_values {
+ ($($t:ty, $t_sized:ty, $ffi_t:ty, $to_ffi_key:expr;)*) => {
+ paste! {
+ $(
+ impl_scalar_map_with_key_op_for_scalar_values!($t, $t_sized, $ffi_t, $to_ffi_key, [< MapWith $t:camel KeyOps >] for
+ f32, f32, identity, identity, 0f32;
+ f64, f64, identity, identity, 0f64;
+ i32, i32, identity, identity, 0i32;
+ u32, u32, identity, identity, 0u32;
+ i64, i64, identity, identity, 0i64;
+ u64, u64, identity, identity, 0u64;
+ bool, bool, identity, identity, false;
+ ProtoStr, PtrAndLen, str_to_ptrlen, ptrlen_to_str, "";
+ );
+ )*
}
- Some(T::get(self.inner.raw, index))
}
- pub fn set(&mut self, index: usize, val: T) {
- if index >= self.len() {
- return;
- }
- T::set(self.inner.raw, index, val)
- }
- pub fn copy_from(&mut self, src: &RepeatedField<'_, T>) {
- T::copy_from(src.inner.raw, self.inner.raw)
- }
+}
+
+impl_map_with_key_ops_for_scalar_values!(
+ i32, i32, i32, identity;
+ u32, u32, u32, identity;
+ i64, i64, i64, identity;
+ u64, u64, u64, identity;
+ bool, bool, bool, identity;
+ ProtoStr, &ProtoStr, PtrAndLen, str_to_ptrlen;
+);
+
+#[cfg(test)]
+pub(crate) fn new_map_i32_i64() -> MapInner<'static, i32, i64> {
+ Default::default()
+}
+
+#[cfg(test)]
+pub(crate) fn new_map_str_str() -> MapInner<'static, ProtoStr, ProtoStr> {
+ Default::default()
}
#[cfg(test)]
mod tests {
use super::*;
+ use googletest::prelude::*;
use std::boxed::Box;
// We need to allocate the byte array so SerializedData can own it and
@@ -327,30 +514,95 @@
#[test]
fn test_serialized_data_roundtrip() {
let (ptr, len) = allocate_byte_array(b"Hello world");
- let serialized_data = SerializedData { data: NonNull::new(ptr).unwrap(), len: len };
- assert_eq!(&*serialized_data, b"Hello world");
+ let serialized_data = SerializedData { data: NonNull::new(ptr).unwrap(), len };
+ assert_that!(&*serialized_data, eq(b"Hello world"));
}
#[test]
- fn repeated_field() {
- let mut r = RepeatedField::<i32>::new();
- assert_eq!(r.len(), 0);
- r.push(32);
- assert_eq!(r.get(0), Some(32));
+ fn i32_i32_map() {
+ let mut map: MapInner<'_, i32, i32> = Default::default();
+ assert_that!(map.size(), eq(0));
- let mut r = RepeatedField::<u32>::new();
- assert_eq!(r.len(), 0);
- r.push(32);
- assert_eq!(r.get(0), Some(32));
+ assert_that!(map.insert(1, 2), eq(true));
+ assert_that!(map.get(1), eq(Some(2)));
+ assert_that!(map.get(3), eq(None));
+ assert_that!(map.size(), eq(1));
- let mut r = RepeatedField::<f64>::new();
- assert_eq!(r.len(), 0);
- r.push(0.1234f64);
- assert_eq!(r.get(0), Some(0.1234));
+ assert_that!(map.remove(1), eq(true));
+ assert_that!(map.size(), eq(0));
+ assert_that!(map.remove(1), eq(false));
- let mut r = RepeatedField::<bool>::new();
- assert_eq!(r.len(), 0);
- r.push(true);
- assert_eq!(r.get(0), Some(true));
+ assert_that!(map.insert(4, 5), eq(true));
+ assert_that!(map.insert(6, 7), eq(true));
+ map.clear();
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn i64_f64_map() {
+ let mut map: MapInner<'_, i64, f64> = Default::default();
+ assert_that!(map.size(), eq(0));
+
+ assert_that!(map.insert(1, 2.5), eq(true));
+ assert_that!(map.get(1), eq(Some(2.5)));
+ assert_that!(map.get(3), eq(None));
+ assert_that!(map.size(), eq(1));
+
+ assert_that!(map.remove(1), eq(true));
+ assert_that!(map.size(), eq(0));
+ assert_that!(map.remove(1), eq(false));
+
+ assert_that!(map.insert(4, 5.1), eq(true));
+ assert_that!(map.insert(6, 7.2), eq(true));
+ map.clear();
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn str_str_map() {
+ let mut map = MapInner::<'_, ProtoStr, ProtoStr>::default();
+ assert_that!(map.size(), eq(0));
+
+ map.insert("fizz".into(), "buzz".into());
+ assert_that!(map.size(), eq(1));
+ assert_that!(map.remove("fizz".into()), eq(true));
+ map.clear();
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn u64_str_map() {
+ let mut map = MapInner::<'_, u64, ProtoStr>::default();
+ assert_that!(map.size(), eq(0));
+
+ map.insert(1, "fizz".into());
+ map.insert(2, "buzz".into());
+ assert_that!(map.size(), eq(2));
+ assert_that!(map.remove(1), eq(true));
+ assert_that!(map.get(1), eq(None));
+ map.clear();
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn test_all_maps_can_be_constructed() {
+ macro_rules! gen_proto_values {
+ ($key_t:ty, $($value_t:ty),*) => {
+ $(
+ let map = MapInner::<'_, $key_t, $value_t>::default();
+ assert_that!(map.size(), eq(0));
+ )*
+ }
+ }
+
+ macro_rules! gen_proto_keys {
+ ($($key_t:ty),*) => {
+ $(
+ gen_proto_values!($key_t, f32, f64, i32, u32, i64, bool, ProtoStr);
+ )*
+ }
+ }
+
+ gen_proto_keys!(i32, u32, i64, u64, bool, ProtoStr);
}
}
diff --git a/rust/cpp_kernel/BUILD b/rust/cpp_kernel/BUILD
index d10f9e7..6582b03 100644
--- a/rust/cpp_kernel/BUILD
+++ b/rust/cpp_kernel/BUILD
@@ -7,12 +7,13 @@
srcs = ["cpp_api.cc"],
hdrs = ["cpp_api.h"],
visibility = [
- "//src/google/protobuf:__subpackages__",
"//rust:__subpackages__",
+ "//src/google/protobuf:__subpackages__",
],
deps = [
":rust_alloc_for_cpp_api", # buildcleaner: keep
"//:protobuf_nowkt",
+ "@com_google_absl//absl/strings:string_view",
],
)
diff --git a/rust/cpp_kernel/cpp_api.cc b/rust/cpp_kernel/cpp_api.cc
index 1381611..a71db58 100644
--- a/rust/cpp_kernel/cpp_api.cc
+++ b/rust/cpp_kernel/cpp_api.cc
@@ -1,3 +1,10 @@
+#include "rust/cpp_kernel/cpp_api.h"
+
+#include <cstddef>
+#include <cstdint>
+#include <string>
+
+#include "google/protobuf/map.h"
#include "google/protobuf/repeated_field.h"
extern "C" {
@@ -6,6 +13,10 @@
google::protobuf::RepeatedField<ty>* __pb_rust_RepeatedField_##rust_ty##_new() { \
return new google::protobuf::RepeatedField<ty>(); \
} \
+ void __pb_rust_RepeatedField_##rust_ty##_free( \
+ google::protobuf::RepeatedField<ty>* r) { \
+ delete r; \
+ } \
void __pb_rust_RepeatedField_##rust_ty##_add(google::protobuf::RepeatedField<ty>* r, \
ty val) { \
r->Add(val); \
@@ -23,8 +34,12 @@
return r->Set(index, val); \
} \
void __pb_rust_RepeatedField_##rust_ty##_copy_from( \
- google::protobuf::RepeatedField<ty> const& src, google::protobuf::RepeatedField<ty>& dst) { \
- dst.CopyFrom(src); \
+ const google::protobuf::RepeatedField<ty>* src, google::protobuf::RepeatedField<ty>* dst) { \
+ dst->CopyFrom(*src); \
+ } \
+ void __pb_rust_RepeatedField_##rust_ty##_clear( \
+ google::protobuf::RepeatedField<ty>* r) { \
+ r->Clear(); \
}
expose_repeated_field_methods(int32_t, i32);
@@ -36,4 +51,77 @@
expose_repeated_field_methods(int64_t, i64);
#undef expose_repeated_field_methods
+
+#define expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ value_ty, rust_value_ty, ffi_value_ty, \
+ to_cpp_value, to_ffi_value) \
+ google::protobuf::Map<key_ty, value_ty>* \
+ __pb_rust_Map_##rust_key_ty##_##rust_value_ty##_new() { \
+ return new google::protobuf::Map<key_ty, value_ty>(); \
+ } \
+ void __pb_rust_Map_##rust_key_ty##_##rust_value_ty##_clear( \
+ google::protobuf::Map<key_ty, value_ty>* m) { \
+ m->clear(); \
+ } \
+ size_t __pb_rust_Map_##rust_key_ty##_##rust_value_ty##_size( \
+ const google::protobuf::Map<key_ty, value_ty>* m) { \
+ return m->size(); \
+ } \
+ void __pb_rust_Map_##rust_key_ty##_##rust_value_ty##_insert( \
+ google::protobuf::Map<key_ty, value_ty>* m, ffi_key_ty key, ffi_value_ty value) { \
+ auto cpp_key = to_cpp_key; \
+ auto cpp_value = to_cpp_value; \
+ (*m)[cpp_key] = cpp_value; \
+ } \
+ bool __pb_rust_Map_##rust_key_ty##_##rust_value_ty##_get( \
+ const google::protobuf::Map<key_ty, value_ty>* m, ffi_key_ty key, \
+ ffi_value_ty* value) { \
+ auto cpp_key = to_cpp_key; \
+ auto it = m->find(cpp_key); \
+ if (it == m->end()) { \
+ return false; \
+ } \
+ auto& cpp_value = it->second; \
+ *value = to_ffi_value; \
+ return true; \
+ } \
+ bool __pb_rust_Map_##rust_key_ty##_##rust_value_ty##_remove( \
+ google::protobuf::Map<key_ty, value_ty>* m, ffi_key_ty key, ffi_value_ty* value) { \
+ auto cpp_key = to_cpp_key; \
+ auto num_removed = m->erase(cpp_key); \
+ return num_removed > 0; \
+ }
+
+#define expose_scalar_map_methods_for_key_type(key_ty, rust_key_ty, \
+ ffi_key_ty, to_cpp_key) \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ int32_t, i32, int32_t, value, cpp_value); \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ uint32_t, u32, uint32_t, value, cpp_value); \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ float, f32, float, value, cpp_value); \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ double, f64, double, value, cpp_value); \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, bool, \
+ bool, bool, value, cpp_value); \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ uint64_t, u64, uint64_t, value, cpp_value); \
+ expose_scalar_map_methods(key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, \
+ int64_t, i64, int64_t, value, cpp_value); \
+ expose_scalar_map_methods( \
+ key_ty, rust_key_ty, ffi_key_ty, to_cpp_key, std::string, ProtoStr, \
+ google::protobuf::rust_internal::PtrAndLen, std::string(value.ptr, value.len), \
+ google::protobuf::rust_internal::PtrAndLen(cpp_value.data(), cpp_value.size()));
+
+expose_scalar_map_methods_for_key_type(int32_t, i32, int32_t, key);
+expose_scalar_map_methods_for_key_type(uint32_t, u32, uint32_t, key);
+expose_scalar_map_methods_for_key_type(bool, bool, bool, key);
+expose_scalar_map_methods_for_key_type(uint64_t, u64, uint64_t, key);
+expose_scalar_map_methods_for_key_type(int64_t, i64, int64_t, key);
+expose_scalar_map_methods_for_key_type(std::string, ProtoStr,
+ google::protobuf::rust_internal::PtrAndLen,
+ std::string(key.ptr, key.len));
+
+#undef expose_scalar_map_methods
+#undef expose_map_methods
}
diff --git a/rust/enum.rs b/rust/enum.rs
new file mode 100644
index 0000000..847ef41
--- /dev/null
+++ b/rust/enum.rs
@@ -0,0 +1,51 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+use crate::__internal::Private;
+use std::{
+ error::Error,
+ fmt::{Debug, Display},
+ marker::PhantomData,
+};
+
+/// Implemented by all generated enum types.
+///
+/// # Safety
+/// - A `RepeatedView<Self>` or `RepeatedMut<Self>` must have the same internal
+/// representation as erased enums in the runtime.
+/// - For C++, this is `proto2::RepeatedField<c_int>`
+/// - For UPB, this is an array compatible with `int32`
+pub unsafe trait Enum {
+ /// The name of the enum.
+ const NAME: &'static str;
+}
+
+/// An integer value wasn't known for an enum while converting.
+pub struct UnknownEnumValue<T>(i32, PhantomData<T>);
+
+impl<T> UnknownEnumValue<T> {
+ #[doc(hidden)]
+ pub fn new(_private: Private, unknown_value: i32) -> Self {
+ Self(unknown_value, PhantomData)
+ }
+}
+
+impl<T> Debug for UnknownEnumValue<T> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_tuple("UnknownEnumValue").field(&self.0).finish()
+ }
+}
+
+impl<T: Enum> Display for UnknownEnumValue<T> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ let val = self.0;
+ let enum_name = T::NAME;
+ write!(f, "{val} is not a known value for {enum_name}")
+ }
+}
+
+impl<T: Enum> Error for UnknownEnumValue<T> {}
diff --git a/rust/internal.rs b/rust/internal.rs
index be9ddb2..551dd79 100644
--- a/rust/internal.rs
+++ b/rust/internal.rs
@@ -9,9 +9,10 @@
//! exposed to through the `protobuf` path but must be public for use by
//! generated code.
+pub use crate::r#enum::Enum;
pub use crate::vtable::{
new_vtable_field_entry, BytesMutVTable, BytesOptionalMutVTable, PrimitiveOptionalMutVTable,
- PrimitiveVTable, RawVTableMutator,
+ PrimitiveVTable, PrimitiveWithRawVTable, RawVTableMutator, RawVTableOptionalMutatorData,
};
use std::ptr::NonNull;
use std::slice;
diff --git a/rust/macros.rs b/rust/macros.rs
index 3109eff..4f83349 100644
--- a/rust/macros.rs
+++ b/rust/macros.rs
@@ -19,11 +19,11 @@
/// ```
macro_rules! impl_forwarding_settable_value {
($proxied:ty, $self:ident => $self_forwarding_expr:expr) => {
- fn set_on(
+ fn set_on<'b>(
$self,
_private: $crate::__internal::Private,
- mutator: $crate::Mut<'_, $proxied>,
- ) {
+ mutator: $crate::Mut<'b, $proxied>,
+ ) where $proxied: 'b {
($self_forwarding_expr).set_on(Private, mutator)
}
diff --git a/rust/map.rs b/rust/map.rs
index 450b854..2819648 100644
--- a/rust/map.rs
+++ b/rust/map.rs
@@ -6,65 +6,186 @@
// https://developers.google.com/open-source/licenses/bsd
use crate::{
+ Mut, MutProxy, ProtoStr, Proxied, SettableValue, View, ViewProxy,
__internal::Private,
- __runtime::{Map, MapInner, MapValueType},
+ __runtime::{
+ MapInner, MapWithBoolKeyOps, MapWithI32KeyOps, MapWithI64KeyOps, MapWithProtoStrKeyOps,
+ MapWithU32KeyOps, MapWithU64KeyOps,
+ },
};
+use paste::paste;
+use std::marker::PhantomData;
-#[derive(Clone, Copy)]
#[repr(transparent)]
-pub struct MapView<'a, K: ?Sized, V: ?Sized> {
- inner: Map<'a, K, V>,
+pub struct MapView<'msg, K: ?Sized, V: ?Sized> {
+ inner: MapInner<'msg, K, V>,
}
-#[derive(Clone, Copy)]
+impl<'msg, K: ?Sized, V: ?Sized> MapView<'msg, K, V> {
+ pub fn from_inner(_private: Private, inner: MapInner<'msg, K, V>) -> Self {
+ Self { inner }
+ }
+}
+
+impl<'msg, K: ?Sized, V: ?Sized> Copy for MapView<'msg, K, V> {}
+impl<'msg, K: ?Sized, V: ?Sized> Clone for MapView<'msg, K, V> {
+ fn clone(&self) -> Self {
+ *self
+ }
+}
+
+unsafe impl<'msg, K: ?Sized, V: ?Sized> Sync for MapView<'msg, K, V> {}
+unsafe impl<'msg, K: ?Sized, V: ?Sized> Send for MapView<'msg, K, V> {}
+
+impl<'msg, K: ?Sized, V: ?Sized> std::fmt::Debug for MapView<'msg, K, V> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_tuple("MapView")
+ .field(&std::any::type_name::<K>())
+ .field(&std::any::type_name::<V>())
+ .finish()
+ }
+}
+
#[repr(transparent)]
-pub struct MapMut<'a, K: ?Sized, V: ?Sized> {
- inner: Map<'a, K, V>,
+pub struct MapMut<'msg, K: ?Sized, V: ?Sized> {
+ inner: MapInner<'msg, K, V>,
}
-impl<'a, K: ?Sized, V: ?Sized> MapView<'a, K, V> {
- pub fn from_inner(_private: Private, inner: MapInner<'a>) -> Self {
- Self { inner: Map::<'a, K, V>::from_inner(_private, inner) }
- }
-
- pub fn len(&self) -> usize {
- self.inner.len()
- }
-
- pub fn is_empty(&self) -> bool {
- self.len() == 0
+impl<'msg, K: ?Sized, V: ?Sized> MapMut<'msg, K, V> {
+ pub fn from_inner(_private: Private, inner: MapInner<'msg, K, V>) -> Self {
+ Self { inner }
}
}
-impl<'a, K: ?Sized, V: ?Sized> MapMut<'a, K, V> {
- pub fn from_inner(_private: Private, inner: MapInner<'a>) -> Self {
- Self { inner: Map::<'a, K, V>::from_inner(_private, inner) }
+unsafe impl<'msg, K: ?Sized, V: ?Sized> Sync for MapMut<'msg, K, V> {}
+
+impl<'msg, K: ?Sized, V: ?Sized> std::fmt::Debug for MapMut<'msg, K, V> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_tuple("MapMut")
+ .field(&std::any::type_name::<K>())
+ .field(&std::any::type_name::<V>())
+ .finish()
}
}
+impl<'msg, K: ?Sized, V: ?Sized> std::ops::Deref for MapMut<'msg, K, V> {
+ type Target = MapView<'msg, K, V>;
+ fn deref(&self) -> &Self::Target {
+ // SAFETY:
+ // - `Map{View,Mut}<'msg, T>` are both `#[repr(transparent)]` over
+ // `MapInner<'msg, T>`.
+ // - `MapInner` is a type alias for `NonNull`.
+ unsafe { &*(self as *const Self as *const MapView<'msg, K, V>) }
+ }
+}
+
+// This is a ZST type so we can implement `Proxied`. Users will work with
+// `MapView` (`View<'_, Map>>) and `MapMut` (Mut<'_, Map>).
+pub struct Map<K: ?Sized, V: ?Sized>(PhantomData<K>, PhantomData<V>);
+
+macro_rules! impl_proxied_for_map_keys {
+ ($(key_type $t:ty;)*) => {
+ paste! { $(
+ impl<V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized> Proxied for Map<$t, V>{
+ type View<'msg> = MapView<'msg, $t, V> where V: 'msg;
+ type Mut<'msg> = MapMut<'msg, $t, V> where V: 'msg;
+ }
+
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized + 'msg> SettableValue<Map<$t, V>> for MapView<'msg, $t, V> {
+ fn set_on<'b>(self, _private: Private, mut mutator: Mut<'b, Map<$t, V>>)
+ where
+ Map<$t, V>: 'b {
+ mutator.copy_from(self);
+ }
+ }
+
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized + 'msg> ViewProxy<'msg> for MapView<'msg, $t, V> {
+ type Proxied = Map<$t, V>;
+
+ fn as_view(&self) -> View<'_, Self::Proxied> {
+ *self
+ }
+
+ fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
+ where 'msg: 'shorter,
+ {
+ MapView { inner: self.inner }
+ }
+ }
+
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized + 'msg> ViewProxy<'msg> for MapMut<'msg, $t, V> {
+ type Proxied = Map<$t, V>;
+
+ fn as_view(&self) -> View<'_, Self::Proxied> {
+ **self
+ }
+
+ fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
+ where 'msg: 'shorter,
+ {
+ *self.into_mut::<'shorter>()
+ }
+ }
+
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized + 'msg> MutProxy<'msg> for MapMut<'msg, $t, V> {
+ fn as_mut(&mut self) -> Mut<'_, Self::Proxied> {
+ MapMut { inner: self.inner }
+ }
+
+ fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied>
+ where 'msg: 'shorter,
+ {
+ MapMut { inner: self.inner }
+ }
+ }
+ )* }
+ }
+}
+
+impl_proxied_for_map_keys!(
+ key_type i32;
+ key_type u32;
+ key_type i64;
+ key_type u64;
+ key_type bool;
+ key_type ProtoStr;
+);
+
macro_rules! impl_scalar_map_keys {
- ($(key_type $type:ty;)*) => {
- $(
- impl<'a, V: MapValueType> MapView<'a, $type, V> {
- pub fn get(&self, key: $type) -> Option<V> {
+ ($(key_type $t:ty;)*) => {
+ paste! { $(
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized + 'msg> MapView<'msg, $t, V> {
+ pub fn get<'b>(&self, key: $t) -> Option<View<'b, V>> {
self.inner.get(key)
}
+
+ pub fn len(&self) -> usize {
+ self.inner.size()
+ }
+
+ pub fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
}
- impl<'a, V: MapValueType> MapMut<'a, $type, V> {
- pub fn insert(&mut self, key: $type, value: V) -> bool {
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + Proxied + ?Sized + 'msg> MapMut<'msg, $t, V> {
+ pub fn insert(&mut self, key: $t, value: View<'_, V>) -> bool {
self.inner.insert(key, value)
}
- pub fn remove(&mut self, key: $type) -> Option<V> {
+ pub fn remove<'b>(&mut self, key: $t) -> bool {
self.inner.remove(key)
}
pub fn clear(&mut self) {
self.inner.clear()
}
+
+ pub fn copy_from(&mut self, _src: MapView<'_, $t, V>) {
+ todo!("implement b/28530933");
+ }
}
- )*
+ )* }
};
}
@@ -75,3 +196,95 @@
key_type u64;
key_type bool;
);
+
+impl<'msg, V: MapWithProtoStrKeyOps + Proxied + ?Sized + 'msg> MapView<'msg, ProtoStr, V> {
+ pub fn get(&self, key: impl Into<&'msg ProtoStr>) -> Option<View<'_, V>> {
+ self.inner.get(key.into())
+ }
+
+ pub fn len(&self) -> usize {
+ self.inner.size()
+ }
+
+ pub fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
+}
+
+impl<'msg, V: MapWithProtoStrKeyOps + Proxied + ?Sized + 'msg> MapMut<'msg, ProtoStr, V> {
+ pub fn insert(&mut self, key: impl Into<&'msg ProtoStr>, value: View<'_, V>) -> bool {
+ self.inner.insert(key.into(), value)
+ }
+
+ pub fn remove(&mut self, key: impl Into<&'msg ProtoStr>) -> bool {
+ self.inner.remove(key.into())
+ }
+
+ pub fn clear(&mut self) {
+ self.inner.clear()
+ }
+
+ pub fn copy_from(&mut self, _src: MapView<'_, ProtoStr, V>) {
+ todo!("implement b/28530933");
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::__runtime::{new_map_i32_i64, new_map_str_str};
+ use googletest::prelude::*;
+
+ #[test]
+ fn test_proxied_scalar() {
+ let mut map_mut = MapMut::from_inner(Private, new_map_i32_i64());
+ map_mut.insert(1, 2);
+ let map_view_1 = map_mut.as_view();
+ assert_that!(map_view_1.len(), eq(1));
+ assert_that!(map_view_1.get(1), eq(Some(2)));
+
+ map_mut.insert(3, 4);
+
+ let map_view_2 = map_mut.into_view();
+ assert_that!(map_view_2.len(), eq(2));
+ assert_that!(map_view_2.get(3), eq(Some(4)));
+
+ {
+ let map_view_3 = map_view_2.as_view();
+ assert_that!(map_view_3.is_empty(), eq(false));
+ }
+
+ let map_view_4 = map_view_2.into_view();
+ assert_that!(map_view_4.is_empty(), eq(false));
+ }
+
+ #[test]
+ fn test_proxied_str() {
+ let mut map_mut = MapMut::from_inner(Private, new_map_str_str());
+ map_mut.insert("a", "b".into());
+
+ let map_view_1 = map_mut.as_view();
+ assert_that!(map_view_1.len(), eq(1));
+ assert_that!(map_view_1.get("a").unwrap(), eq("b"));
+
+ map_mut.insert("c", "d".into());
+
+ let map_view_2 = map_mut.into_view();
+ assert_that!(map_view_2.len(), eq(2));
+ assert_that!(map_view_2.get("c").unwrap(), eq("d"));
+
+ {
+ let map_view_3 = map_view_2.as_view();
+ assert_that!(map_view_3.is_empty(), eq(false));
+ }
+
+ let map_view_4 = map_view_2.into_view();
+ assert_that!(map_view_4.is_empty(), eq(false));
+ }
+
+ #[test]
+ fn test_dbg() {
+ let map_view = MapView::from_inner(Private, new_map_i32_i64());
+ assert_that!(format!("{:?}", map_view), eq("MapView(\"i32\", \"i64\")"));
+ }
+}
diff --git a/rust/optional.rs b/rust/optional.rs
index ec99653..0268c61 100644
--- a/rust/optional.rs
+++ b/rust/optional.rs
@@ -83,7 +83,7 @@
/// A mutable view into the value of an optional field, which may be set or
/// unset.
-pub type FieldEntry<'a, T> = Optional<PresentField<'a, T>, AbsentField<'a, T>>;
+pub type FieldEntry<'msg, T> = Optional<PresentField<'msg, T>, AbsentField<'msg, T>>;
/// Methods for `_mut()` accessors of optional types.
///
@@ -285,11 +285,11 @@
/// A field mutator capable of setting that is statically known to point to a
/// non-set field.
-pub struct AbsentField<'a, T>
+pub struct AbsentField<'msg, T>
where
- T: ProxiedWithPresence + ?Sized + 'a,
+ T: ProxiedWithPresence + ?Sized + 'msg,
{
- pub(crate) inner: T::AbsentMutData<'a>,
+ pub(crate) inner: T::AbsentMutData<'msg>,
}
impl<'msg, T: ProxiedWithPresence + ?Sized + 'msg> Debug for AbsentField<'msg, T> {
@@ -432,10 +432,10 @@
}
}
- fn make_field_entry<'a>(
- msg: &'a mut MyMessage,
- vtable: &'a ProxyVtable,
- ) -> FieldEntry<'a, VtableProxied> {
+ fn make_field_entry<'msg>(
+ msg: &'msg mut MyMessage,
+ vtable: &'msg ProxyVtable,
+ ) -> FieldEntry<'msg, VtableProxied> {
if (vtable.has)(&*msg) {
Optional::Set(PresentField::from_inner(Private, VtableProxiedMut { msg, vtable }))
} else {
@@ -494,8 +494,8 @@
struct VtableProxied;
impl Proxied for VtableProxied {
- type View<'a> = VtableProxiedView;
- type Mut<'a> = VtableProxiedMut<'a>;
+ type View<'msg> = VtableProxiedView;
+ type Mut<'msg> = VtableProxiedMut<'msg>;
}
impl ProxiedWithPresence for VtableProxied {
@@ -503,19 +503,19 @@
// `Mut` in layout. Other types/runtimes could require otherwise, e.g. `Mut`
// could be defined to only have get/set functions in its vtable, and not
// has/clear.
- type PresentMutData<'a> = VtableProxiedMut<'a>;
- type AbsentMutData<'a> = VtableProxiedMut<'a>;
+ type PresentMutData<'msg> = VtableProxiedMut<'msg>;
+ type AbsentMutData<'msg> = VtableProxiedMut<'msg>;
- fn clear_present_field<'a>(
- present_mutator: Self::PresentMutData<'a>,
- ) -> Self::AbsentMutData<'a> {
+ fn clear_present_field<'msg>(
+ present_mutator: Self::PresentMutData<'msg>,
+ ) -> Self::AbsentMutData<'msg> {
(present_mutator.vtable.clear)(&mut *present_mutator.msg);
present_mutator
}
- fn set_absent_to_default<'a>(
- absent_mutator: Self::AbsentMutData<'a>,
- ) -> Self::PresentMutData<'a> {
+ fn set_absent_to_default<'msg>(
+ absent_mutator: Self::AbsentMutData<'msg>,
+ ) -> Self::PresentMutData<'msg> {
SettableValue::<VtableProxied>::set_on_absent(
absent_mutator.as_view().val(),
Private,
@@ -539,28 +539,28 @@
}
}
- impl<'a> ViewProxy<'a> for VtableProxiedView {
+ impl<'msg> ViewProxy<'msg> for VtableProxiedView {
type Proxied = VtableProxied;
- fn as_view(&self) -> View<'a, VtableProxied> {
+ fn as_view(&self) -> View<'msg, VtableProxied> {
*self
}
fn into_view<'shorter>(self) -> View<'shorter, VtableProxied>
where
- 'a: 'shorter,
+ 'msg: 'shorter,
{
self
}
}
#[derive(Debug)]
- struct VtableProxiedMut<'a> {
- msg: &'a mut MyMessage,
- vtable: &'a ProxyVtable,
+ struct VtableProxiedMut<'msg> {
+ msg: &'msg mut MyMessage,
+ vtable: &'msg ProxyVtable,
}
- impl<'a> ViewProxy<'a> for VtableProxiedMut<'a> {
+ impl<'msg> ViewProxy<'msg> for VtableProxiedMut<'msg> {
type Proxied = VtableProxied;
fn as_view(&self) -> View<'_, VtableProxied> {
@@ -569,49 +569,55 @@
fn into_view<'shorter>(self) -> View<'shorter, VtableProxied>
where
- 'a: 'shorter,
+ 'msg: 'shorter,
{
VtableProxiedView::read(self.msg, self.vtable)
}
}
- impl<'a> MutProxy<'a> for VtableProxiedMut<'a> {
+ impl<'msg> MutProxy<'msg> for VtableProxiedMut<'msg> {
fn as_mut(&mut self) -> Mut<'_, VtableProxied> {
VtableProxiedMut { msg: self.msg, vtable: self.vtable }
}
fn into_mut<'shorter>(self) -> Mut<'shorter, VtableProxied>
where
- 'a: 'shorter,
+ 'msg: 'shorter,
{
self
}
}
impl SettableValue<VtableProxied> for View<'_, VtableProxied> {
- fn set_on(self, _private: Private, mutator: Mut<VtableProxied>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, VtableProxied>)
+ where
+ VtableProxied: 'msg,
+ {
SettableValue::<VtableProxied>::set_on(self.val(), Private, mutator)
}
- fn set_on_absent<'a>(
+ fn set_on_absent<'msg>(
self,
_private: Private,
- absent_mutator: <VtableProxied as ProxiedWithPresence>::AbsentMutData<'a>,
- ) -> <VtableProxied as ProxiedWithPresence>::PresentMutData<'a> {
+ absent_mutator: <VtableProxied as ProxiedWithPresence>::AbsentMutData<'msg>,
+ ) -> <VtableProxied as ProxiedWithPresence>::PresentMutData<'msg> {
SettableValue::<VtableProxied>::set_on_absent(self.val(), Private, absent_mutator)
}
}
impl SettableValue<VtableProxied> for i32 {
- fn set_on(self, _private: Private, mutator: Mut<VtableProxied>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, VtableProxied>)
+ where
+ VtableProxied: 'msg,
+ {
(mutator.vtable.set)(mutator.msg, self)
}
- fn set_on_absent<'a>(
+ fn set_on_absent<'msg>(
self,
_private: Private,
- absent_mutator: <VtableProxied as ProxiedWithPresence>::AbsentMutData<'a>,
- ) -> <VtableProxied as ProxiedWithPresence>::PresentMutData<'a> {
+ absent_mutator: <VtableProxied as ProxiedWithPresence>::AbsentMutData<'msg>,
+ ) -> <VtableProxied as ProxiedWithPresence>::PresentMutData<'msg> {
(absent_mutator.vtable.set)(absent_mutator.msg, self);
absent_mutator
}
@@ -619,109 +625,125 @@
#[test]
fn test_field_entry() {
+ use googletest::prelude::*;
let mut m1 = MyMessage::default();
let mut m2 = MyMessage::default();
let mut m1_a = m1.a_mut();
- assert!(matches!(m1_a, Optional::Unset(_)));
- assert_eq!(m1_a.as_view().val(), 0);
+ assert_that!(m1_a, matches_pattern!(Optional::Unset(_)));
- assert_eq!(m2.b().val(), 5);
+ assert_that!(m1_a.as_view().val(), eq(0));
+
+ assert_that!(m2.b().val(), eq(5));
let mut m2_b = m2.b_mut();
- assert!(m2_b.is_unset());
- assert_eq!(m2_b.as_view().val(), 5);
+ assert_that!(m2_b.is_unset(), eq(true));
+ assert_that!(m2_b.as_view().val(), eq(5));
m2_b.set(10);
- assert!(m2_b.is_set());
- assert!(matches!(m2_b, Optional::Set(_)));
- assert_eq!(m2_b.as_view().val(), 10);
+ assert_that!(m2_b.is_set(), eq(true));
+ assert_that!(m2_b, matches_pattern!(Optional::Set(_)));
+ assert_that!(m2_b.as_view().val(), eq(10));
- assert_eq!(m1_a.or_default().as_view().val(), 0);
- assert_eq!(m1.a_opt(), Optional::Set(VtableProxiedView { val: 0 }));
+ assert_that!(m1_a.or_default().as_view().val(), eq(0));
+ assert_that!(m1.a_opt(), eq(Optional::Set(VtableProxiedView { val: 0 })));
m1.a_mut().clear();
- assert_eq!(m1.a().val(), 0);
- assert_eq!(m1.b().val(), 5);
- assert_eq!(m2.a().val(), 0);
- assert_eq!(m2.b().val(), 10);
+ assert_that!(m1.a().val(), eq(0));
+ assert_that!(m1.b().val(), eq(5));
+ assert_that!(m2.a().val(), eq(0));
+ assert_that!(m2.b().val(), eq(10));
}
#[test]
fn test_or_set() {
+ use googletest::prelude::*;
let mut m1 = MyMessage::default();
let mut m2 = MyMessage::default();
- assert_eq!(m1.a_mut().or_set(10).get().val(), 10);
- assert_eq!(m1.a_opt(), Optional::Set(VtableProxiedView { val: 10 }));
- assert_eq!(m1.a_mut().or_set(20).get().val(), 10);
- assert_eq!(m1.a_opt(), Optional::Set(VtableProxiedView { val: 10 }));
+ assert_that!(m1.a_mut().or_set(10).get().val(), eq(10));
+ assert_that!(m1.a_opt(), eq(Optional::Set(VtableProxiedView { val: 10 })));
+ assert_that!(m1.a_mut().or_set(20).get().val(), eq(10));
+ assert_that!(m1.a_opt(), eq(Optional::Set(VtableProxiedView { val: 10 })));
- assert_eq!(m2.a_mut().or_set_with(|| m1.a().val() + m1.b().val()).get().val(), 15);
- assert_eq!(m2.a_opt(), Optional::Set(VtableProxiedView { val: 15 }));
- assert_eq!(m2.a_mut().or_set_with(|| None::<i32>.unwrap()).get().val(), 15);
- assert_eq!(m2.a_opt(), Optional::Set(VtableProxiedView { val: 15 }));
+ assert_that!(m2.a_mut().or_set_with(|| m1.a().val() + m1.b().val()).get().val(), eq(15));
+ assert_that!(m2.a_opt(), eq(Optional::Set(VtableProxiedView { val: 15 })));
+ assert_that!(m2.a_mut().or_set_with(|| None::<i32>.unwrap()).get().val(), eq(15));
+ assert_that!(m2.a_opt(), eq(Optional::Set(VtableProxiedView { val: 15 })));
}
#[test]
fn test_into_optional_view() {
+ use googletest::prelude::*;
let mut m1 = MyMessage::default();
- assert_eq!(m1.a_mut().into_optional_view(), Optional::Unset(VtableProxiedView { val: 0 }));
+ assert_that!(
+ m1.a_mut().into_optional_view(),
+ eq(Optional::Unset(VtableProxiedView { val: 0 }))
+ );
m1.a_mut().set(10);
- assert_eq!(m1.a_mut().into_optional_view(), Optional::Set(VtableProxiedView { val: 10 }));
- assert_eq!(m1.b_mut().into_optional_view(), Optional::Unset(VtableProxiedView { val: 5 }));
+ assert_that!(
+ m1.a_mut().into_optional_view(),
+ eq(Optional::Set(VtableProxiedView { val: 10 }))
+ );
+ assert_that!(
+ m1.b_mut().into_optional_view(),
+ eq(Optional::Unset(VtableProxiedView { val: 5 }))
+ );
}
#[test]
fn test_try_into_mut() {
+ use googletest::prelude::*;
let mut m1 = MyMessage::default();
- assert!(m1.a_mut().try_into_mut().is_none());
+ assert_that!(m1.a_mut().try_into_mut().is_none(), eq(true));
m1.a_mut().set(10);
let mut a_mut = m1.a_mut().try_into_mut().expect("field to be set");
a_mut.set(20);
- assert_eq!(m1.a().val(), 20);
+ assert_that!(m1.a().val(), eq(20));
}
#[test]
fn test_present_field() {
+ use googletest::prelude::*;
let mut m = MyMessage::default();
m.a_mut().set(10);
match m.a_mut() {
Optional::Set(mut present) => {
- assert_eq!(present.as_view().val(), 10);
+ assert_that!(present.as_view().val(), eq(10));
present.set(20);
- assert_eq!(present.as_view().val(), 20);
+ assert_that!(present.as_view().val(), eq(20));
present.into_mut().set(30);
}
Optional::Unset(_) => unreachable!(),
}
- assert_eq!(m.a_opt(), Optional::Set(VtableProxiedView { val: 30 }));
+ assert_that!(m.a_opt(), eq(Optional::Set(VtableProxiedView { val: 30 })));
m.b_mut().set(20);
match m.b_mut() {
Optional::Set(present) => present.clear(),
Optional::Unset(_) => unreachable!(),
};
- assert_eq!(m.b_opt(), Optional::Unset(VtableProxiedView { val: 5 }));
+ assert_that!(m.b_opt(), eq(Optional::Unset(VtableProxiedView { val: 5 })));
}
#[test]
fn test_absent_field() {
+ use googletest::prelude::*;
let mut m = MyMessage::default();
match m.a_mut() {
Optional::Set(_) => unreachable!(),
Optional::Unset(absent) => {
- assert_eq!(absent.as_view().val(), 0);
+ assert_that!(absent.as_view().val(), eq(0));
absent.set(20);
}
}
- assert_eq!(m.a_opt(), Optional::Set(VtableProxiedView { val: 20 }));
+ assert_that!(m.a_opt(), eq(Optional::Set(VtableProxiedView { val: 20 })));
match m.b_mut() {
Optional::Set(_) => unreachable!(),
Optional::Unset(absent) => {
- assert_eq!(absent.as_view().val(), 5);
+ assert_that!(absent.as_view().val(), eq(5));
absent.set_default();
}
}
- assert_eq!(m.b_opt(), Optional::Set(VtableProxiedView { val: 5 }));
+ assert_that!(m.b_opt(), eq(Optional::Set(VtableProxiedView { val: 5 })));
}
}
diff --git a/rust/primitive.rs b/rust/primitive.rs
index dd2fec1..7c34795 100644
--- a/rust/primitive.rs
+++ b/rust/primitive.rs
@@ -5,180 +5,149 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+use std::fmt::Debug;
+
use crate::__internal::Private;
use crate::__runtime::InnerPrimitiveMut;
-use crate::repeated::RepeatedMut;
-use crate::vtable::{
- PrimitiveOptionalMutVTable, PrimitiveVTable, ProxiedWithRawOptionalVTable,
- ProxiedWithRawVTable, RawVTableOptionalMutatorData,
-};
+use crate::vtable::{PrimitiveWithRawVTable, ProxiedWithRawVTable, RawVTableOptionalMutatorData};
use crate::{Mut, MutProxy, Proxied, ProxiedWithPresence, SettableValue, View, ViewProxy};
-#[derive(Debug)]
-pub struct SingularPrimitiveMut<'a, T: ProxiedWithRawVTable> {
- inner: InnerPrimitiveMut<'a, T>,
+/// A mutator for a primitive (numeric or enum) value of `T`.
+///
+/// This type is `protobuf::Mut<'msg, T>`.
+pub struct PrimitiveMut<'msg, T> {
+ inner: InnerPrimitiveMut<'msg, T>,
}
-#[derive(Debug)]
-pub enum PrimitiveMut<'a, T: ProxiedWithRawVTable> {
- Singular(SingularPrimitiveMut<'a, T>),
- Repeated(RepeatedMut<'a, T>, usize),
-}
-
-impl<'a, T: ProxiedWithRawVTable> PrimitiveMut<'a, T> {
- #[doc(hidden)]
- pub fn from_singular(_private: Private, inner: InnerPrimitiveMut<'a, T>) -> Self {
- PrimitiveMut::Singular(SingularPrimitiveMut::from_inner(_private, inner))
+impl<'msg, T> Debug for PrimitiveMut<'msg, T>
+where
+ T: PrimitiveWithRawVTable,
+{
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("PrimitiveMut").field("inner", &self.inner).finish()
}
}
-impl<'a, T: ProxiedWithRawVTable> SingularPrimitiveMut<'a, T> {
+impl<'msg, T> PrimitiveMut<'msg, T> {
+ /// # Safety
+ /// `inner` must be valid and non-aliased for `T` for `'msg`
#[doc(hidden)]
- pub fn from_inner(_private: Private, inner: InnerPrimitiveMut<'a, T>) -> Self {
+ pub unsafe fn from_inner(_private: Private, inner: InnerPrimitiveMut<'msg, T>) -> Self {
Self { inner }
}
}
-unsafe impl<'a, T: ProxiedWithRawVTable> Sync for SingularPrimitiveMut<'a, T> {}
+// SAFETY: all `T` that can perform mutations don't mutate through a shared
+// reference.
+unsafe impl<'msg, T> Sync for PrimitiveMut<'msg, T> {}
+
+impl<'msg, T> PrimitiveMut<'msg, T>
+where
+ T: PrimitiveWithRawVTable,
+{
+ /// Gets the current value of the field.
+ pub fn get(&self) -> View<'_, T> {
+ T::make_view(Private, self.inner)
+ }
+
+ /// Sets a new value for the field.
+ pub fn set(&mut self, val: impl SettableValue<T>) {
+ val.set_on(Private, self.as_mut())
+ }
+
+ #[doc(hidden)]
+ pub fn set_primitive(&mut self, _private: Private, value: T) {
+ // SAFETY: the raw mutator is valid for `'msg` as enforced by `Mut`
+ unsafe { self.inner.set(value) }
+ }
+}
+
+impl<'msg, T> ViewProxy<'msg> for PrimitiveMut<'msg, T>
+where
+ T: PrimitiveWithRawVTable,
+{
+ type Proxied = T;
+
+ fn as_view(&self) -> View<'_, Self::Proxied> {
+ self.get()
+ }
+
+ fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied> {
+ self.get()
+ }
+}
+
+impl<'msg, T> MutProxy<'msg> for PrimitiveMut<'msg, T>
+where
+ T: PrimitiveWithRawVTable,
+{
+ fn as_mut(&mut self) -> Mut<'_, Self::Proxied> {
+ PrimitiveMut { inner: self.inner }
+ }
+
+ fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied>
+ where
+ 'msg: 'shorter,
+ {
+ self
+ }
+}
macro_rules! impl_singular_primitives {
($($t:ty),*) => {
$(
- impl Proxied for $t {
- type View<'a> = $t;
- type Mut<'a> = PrimitiveMut<'a, $t>;
- }
+ impl Proxied for $t {
+ type View<'msg> = $t;
+ type Mut<'msg> = PrimitiveMut<'msg, $t>;
+ }
- impl<'a> ViewProxy<'a> for $t {
- type Proxied = $t;
+ impl<'msg> ViewProxy<'msg> for $t {
+ type Proxied = $t;
- fn as_view(&self) -> View<'_, Self::Proxied> {
- *self
- }
+ fn as_view(&self) -> View<'_, Self::Proxied> {
+ *self
+ }
- fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied> {
- self
- }
- }
+ fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied> {
+ self
+ }
+ }
- impl<'a> PrimitiveMut<'a, $t> {
- pub fn get(&self) -> View<'_, $t> {
- match self {
- PrimitiveMut::Singular(s) => {
- s.get()
- }
- PrimitiveMut::Repeated(r, i) => {
- r.get().get(*i).unwrap()
- }
- }
- }
+ impl SettableValue<$t> for $t {
+ fn set_on<'msg>(self, private: Private, mut mutator: Mut<'msg, $t>) where $t: 'msg {
+ mutator.set_primitive(private, self)
+ }
- pub fn set(&mut self, val: impl SettableValue<$t>) {
- val.set_on(Private, self.as_mut());
- }
-
- pub fn clear(&mut self) {
- // The default value for a boolean field is false and 0 for numerical types. It
- // matches the Rust default values for corresponding types. Let's use this fact.
- SettableValue::<$t>::set_on(<$t>::default(), Private, MutProxy::as_mut(self));
- }
- }
-
- impl<'a> ViewProxy<'a> for PrimitiveMut<'a, $t> {
- type Proxied = $t;
-
- fn as_view(&self) -> View<'_, Self::Proxied> {
- self.get()
- }
-
- fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied> {
- self.get()
- }
- }
-
- impl<'a> MutProxy<'a> for PrimitiveMut<'a, $t> {
- fn as_mut(&mut self) -> Mut<'_, Self::Proxied> {
- match self {
- PrimitiveMut::Singular(s) => {
- PrimitiveMut::Singular(s.as_mut())
- }
- PrimitiveMut::Repeated(r, i) => {
- PrimitiveMut::Repeated(r.as_mut(), *i)
- }
- }
- }
-
- fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied>
- where 'a: 'shorter,
- {
- self
- }
- }
-
- impl SettableValue<$t> for $t {
- fn set_on(self, _private: Private, mutator: Mut<'_, $t>) {
- match mutator {
- PrimitiveMut::Singular(s) => {
- unsafe { (s.inner).set(self) };
- }
- PrimitiveMut::Repeated(mut r, i) => {
- r.set(i, self);
- }
- }
- }
- }
-
- impl<'a> SingularPrimitiveMut<'a, $t> {
- pub fn get(&self) -> $t {
- self.inner.get()
- }
- pub fn as_mut(&mut self) -> SingularPrimitiveMut<'_, $t> {
- SingularPrimitiveMut::from_inner(Private, self.inner)
- }
- }
-
- impl ProxiedWithRawVTable for $t {
- type VTable = PrimitiveVTable<$t>;
-
- fn make_view(
+ fn set_on_absent(
+ self,
_private: Private,
- mut_inner: InnerPrimitiveMut<'_, Self>
- ) -> View<'_, Self> {
- mut_inner.get()
+ absent_mutator: <$t as ProxiedWithPresence>::PresentMutData<'_>,
+ ) -> <$t as ProxiedWithPresence>::AbsentMutData<'_>
+ {
+ absent_mutator.set(Private, self)
}
+ }
- fn make_mut(_private: Private, inner: InnerPrimitiveMut<'_, Self>) -> Mut<'_, Self> {
- PrimitiveMut::Singular(SingularPrimitiveMut::from_inner(Private, inner))
- }
- }
-
- impl ProxiedWithPresence for $t {
- type PresentMutData<'a> = RawVTableOptionalMutatorData<'a, $t>;
- type AbsentMutData<'a> = RawVTableOptionalMutatorData<'a, $t>;
+ impl ProxiedWithPresence for $t {
+ type PresentMutData<'msg> = RawVTableOptionalMutatorData<'msg, $t>;
+ type AbsentMutData<'msg> = RawVTableOptionalMutatorData<'msg, $t>;
fn clear_present_field(
present_mutator: Self::PresentMutData<'_>,
) -> Self::AbsentMutData<'_> {
- present_mutator.clear()
+ present_mutator.clear(Private)
}
fn set_absent_to_default(
absent_mutator: Self::AbsentMutData<'_>,
) -> Self::PresentMutData<'_> {
- absent_mutator.set_absent_to_default()
+ absent_mutator.set_absent_to_default(Private)
}
- }
+ }
- impl ProxiedWithRawOptionalVTable for $t {
- type OptionalVTable = PrimitiveOptionalMutVTable<$t>;
+ impl PrimitiveWithRawVTable for $t {}
- fn upcast_vtable(
- _private: Private,
- optional_vtable: &'static Self::OptionalVTable,
- ) -> &'static Self::VTable {
- &optional_vtable.base
- }
- }
+ // ProxiedInRepeated is implemented in {cpp,upb}.rs
)*
}
}
diff --git a/rust/proxied.rs b/rust/proxied.rs
index 437ba99..3d10315 100644
--- a/rust/proxied.rs
+++ b/rust/proxied.rs
@@ -44,7 +44,9 @@
//! implemented the concept of "proxy" types. Proxy types are a reference-like
//! indirection between the user and the internal memory representation.
+use crate::RepeatedMut;
use crate::__internal::Private;
+use crate::repeated::ProxiedInRepeated;
use std::fmt::Debug;
use std::marker::{Send, Sync};
@@ -55,47 +57,47 @@
///
/// All Protobuf field types implement `Proxied`.
pub trait Proxied {
- /// The proxy type that provides shared access to a `T`, like a `&'a T`.
+ /// The proxy type that provides shared access to a `T`, like a `&'msg T`.
///
/// Most code should use the type alias [`View`].
- type View<'a>: ViewProxy<'a, Proxied = Self> + Copy + Send + SettableValue<Self>
+ type View<'msg>: ViewProxy<'msg, Proxied = Self> + Copy + Send + SettableValue<Self>
where
- Self: 'a;
+ Self: 'msg;
/// The proxy type that provides exclusive mutable access to a `T`, like a
- /// `&'a mut T`.
+ /// `&'msg mut T`.
///
/// Most code should use the type alias [`Mut`].
- type Mut<'a>: MutProxy<'a, Proxied = Self>
+ type Mut<'msg>: MutProxy<'msg, Proxied = Self>
where
- Self: 'a;
+ Self: 'msg;
}
-/// A proxy type that provides shared access to a `T`, like a `&'a T`.
+/// A proxy type that provides shared access to a `T`, like a `&'msg T`.
///
/// This is more concise than fully spelling the associated type.
#[allow(dead_code)]
-pub type View<'a, T> = <T as Proxied>::View<'a>;
+pub type View<'msg, T> = <T as Proxied>::View<'msg>;
/// A proxy type that provides exclusive mutable access to a `T`, like a
-/// `&'a mut T`.
+/// `&'msg mut T`.
///
/// This is more concise than fully spelling the associated type.
#[allow(dead_code)]
-pub type Mut<'a, T> = <T as Proxied>::Mut<'a>;
+pub type Mut<'msg, T> = <T as Proxied>::Mut<'msg>;
/// Declares conversion operations common to all views.
///
/// This trait is intentionally made non-object-safe to prevent a potential
/// future incompatible change.
-pub trait ViewProxy<'a>: 'a + Sized + Sync + Unpin + Sized + Debug {
- type Proxied: 'a + Proxied + ?Sized;
+pub trait ViewProxy<'msg>: 'msg + Sync + Unpin + Sized + Debug {
+ type Proxied: 'msg + Proxied + ?Sized;
/// Converts a borrow into a `View` with the lifetime of that borrow.
///
/// In non-generic code we don't need to use `as_view` because the proxy
- /// types are covariant over `'a`. However, generic code conservatively
- /// treats `'a` as [invariant], therefore we need to call
+ /// types are covariant over `'msg`. However, generic code conservatively
+ /// treats `'msg` as [invariant], therefore we need to call
/// `as_view` to explicitly perform the operation that in concrete code
/// coercion would perform implicitly.
///
@@ -115,8 +117,8 @@
/// Converts into a `View` with a potentially shorter lifetime.
///
/// In non-generic code we don't need to use `into_view` because the proxy
- /// types are covariant over `'a`. However, generic code conservatively
- /// treats `'a` as [invariant], therefore we need to call
+ /// types are covariant over `'msg`. However, generic code conservatively
+ /// treats `'msg` as [invariant], therefore we need to call
/// `into_view` to explicitly perform the operation that in concrete
/// code coercion would perform implicitly.
///
@@ -139,14 +141,14 @@
/// [invariant]: https://doc.rust-lang.org/nomicon/subtyping.html#variance
fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
where
- 'a: 'shorter;
+ 'msg: 'shorter;
}
/// Declares operations common to all mutators.
///
/// This trait is intentionally made non-object-safe to prevent a potential
/// future incompatible change.
-pub trait MutProxy<'a>: ViewProxy<'a> {
+pub trait MutProxy<'msg>: ViewProxy<'msg> {
/// Gets an immutable view of this field. This is shorthand for `as_view`.
///
/// This provides a shorter lifetime than `into_view` but can also be called
@@ -181,8 +183,8 @@
/// Converts into a `Mut` with a potentially shorter lifetime.
///
/// In non-generic code we don't need to use `into_mut` because the proxy
- /// types are covariant over `'a`. However, generic code conservatively
- /// treats `'a` as [invariant], therefore we need to call
+ /// types are covariant over `'msg`. However, generic code conservatively
+ /// treats `'msg` as [invariant], therefore we need to call
/// `into_mut` to explicitly perform the operation that in concrete code
/// coercion would perform implicitly.
///
@@ -202,34 +204,31 @@
/// [invariant]: https://doc.rust-lang.org/nomicon/subtyping.html#variance
fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied>
where
- 'a: 'shorter;
+ 'msg: 'shorter;
}
+// TODO: move this to `optional.rs` as it's only used for optionals
/// `Proxied` types that can be optionally set or unset.
///
/// All scalar and message types implement `ProxiedWithPresence`, while repeated
/// types don't.
pub trait ProxiedWithPresence: Proxied {
/// The data necessary to store a present field mutator proxying `Self`.
- /// This is the contents of `PresentField<'a, Self>`.
- type PresentMutData<'a>: MutProxy<'a, Proxied = Self>;
+ /// This is the contents of `PresentField<'msg, Self>`.
+ type PresentMutData<'msg>: MutProxy<'msg, Proxied = Self>;
/// The data necessary to store an absent field mutator proxying `Self`.
- /// This is the contents of `AbsentField<'a, Self>`.
- type AbsentMutData<'a>: ViewProxy<'a, Proxied = Self>;
+ /// This is the contents of `AbsentField<'msg, Self>`.
+ type AbsentMutData<'msg>: ViewProxy<'msg, Proxied = Self>;
/// Clears a present field.
- fn clear_present_field<'a>(
- present_mutator: Self::PresentMutData<'a>,
- ) -> Self::AbsentMutData<'a>;
+ fn clear_present_field(present_mutator: Self::PresentMutData<'_>) -> Self::AbsentMutData<'_>;
/// Sets an absent field to its default value.
///
/// This can be more efficient than setting with a default value, e.g.
/// a default submessage could share resources with the parent message.
- fn set_absent_to_default<'a>(
- absent_mutator: Self::AbsentMutData<'a>,
- ) -> Self::PresentMutData<'a>;
+ fn set_absent_to_default(absent_mutator: Self::AbsentMutData<'_>) -> Self::PresentMutData<'_>;
}
/// Values that can be used to set a field of `T`.
@@ -237,18 +236,20 @@
where
T: Proxied + ?Sized,
{
- /// Consumes `self` to set the given mutator to its value.
+ /// Consumes `self` to set the given mutator to the value of `self`.
#[doc(hidden)]
- fn set_on(self, _private: Private, mutator: Mut<'_, T>);
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, T>)
+ where
+ T: 'msg;
/// Consumes `self` and `absent_mutator` to set the given empty field to
- /// a value.
+ /// the value of `self`.
#[doc(hidden)]
- fn set_on_absent<'a>(
+ fn set_on_absent(
self,
_private: Private,
- absent_mutator: T::AbsentMutData<'a>,
- ) -> T::PresentMutData<'a>
+ absent_mutator: T::AbsentMutData<'_>,
+ ) -> T::PresentMutData<'_>
where
T: ProxiedWithPresence,
{
@@ -258,7 +259,7 @@
}
/// Consumes `self` and `present_mutator` to set the given present field
- /// to a value.
+ /// to the value of `self`.
#[doc(hidden)]
fn set_on_present(self, _private: Private, mut present_mutator: T::PresentMutData<'_>)
where
@@ -266,11 +267,29 @@
{
self.set_on(Private, present_mutator.as_mut())
}
+
+ /// Consumes `self` and `repeated_mutator` to set the value at the
+ /// given index to the value of `self`.
+ ///
+ /// # Safety
+ /// `index` must be less than `repeated_mutator.len()`
+ #[doc(hidden)]
+ unsafe fn set_on_repeated_unchecked(
+ self,
+ _private: Private,
+ mut _repeated_mutator: RepeatedMut<T>,
+ _index: usize,
+ ) where
+ T: ProxiedInRepeated,
+ {
+ unimplemented!()
+ }
}
#[cfg(test)]
mod tests {
use super::*;
+ use googletest::prelude::*;
use std::borrow::Cow;
#[derive(Debug, Default, PartialEq)]
@@ -289,13 +308,13 @@
}
impl Proxied for MyProxied {
- type View<'a> = MyProxiedView<'a>;
- type Mut<'a> = MyProxiedMut<'a>;
+ type View<'msg> = MyProxiedView<'msg>;
+ type Mut<'msg> = MyProxiedMut<'msg>;
}
#[derive(Debug, Clone, Copy)]
- struct MyProxiedView<'a> {
- my_proxied_ref: &'a MyProxied,
+ struct MyProxiedView<'msg> {
+ my_proxied_ref: &'msg MyProxied,
}
impl MyProxiedView<'_> {
@@ -304,27 +323,27 @@
}
}
- impl<'a> ViewProxy<'a> for MyProxiedView<'a> {
+ impl<'msg> ViewProxy<'msg> for MyProxiedView<'msg> {
type Proxied = MyProxied;
- fn as_view(&self) -> View<'a, MyProxied> {
+ fn as_view(&self) -> View<'msg, MyProxied> {
*self
}
fn into_view<'shorter>(self) -> View<'shorter, MyProxied>
where
- 'a: 'shorter,
+ 'msg: 'shorter,
{
self
}
}
#[derive(Debug)]
- struct MyProxiedMut<'a> {
- my_proxied_ref: &'a mut MyProxied,
+ struct MyProxiedMut<'msg> {
+ my_proxied_ref: &'msg mut MyProxied,
}
- impl<'a> ViewProxy<'a> for MyProxiedMut<'a> {
+ impl<'msg> ViewProxy<'msg> for MyProxiedMut<'msg> {
type Proxied = MyProxied;
fn as_view(&self) -> View<'_, MyProxied> {
@@ -332,45 +351,57 @@
}
fn into_view<'shorter>(self) -> View<'shorter, MyProxied>
where
- 'a: 'shorter,
+ 'msg: 'shorter,
{
MyProxiedView { my_proxied_ref: self.my_proxied_ref }
}
}
- impl<'a> MutProxy<'a> for MyProxiedMut<'a> {
+ impl<'msg> MutProxy<'msg> for MyProxiedMut<'msg> {
fn as_mut(&mut self) -> Mut<'_, MyProxied> {
MyProxiedMut { my_proxied_ref: self.my_proxied_ref }
}
fn into_mut<'shorter>(self) -> Mut<'shorter, MyProxied>
where
- 'a: 'shorter,
+ 'msg: 'shorter,
{
self
}
}
impl SettableValue<MyProxied> for MyProxiedView<'_> {
- fn set_on(self, _private: Private, mutator: Mut<MyProxied>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, MyProxied>)
+ where
+ MyProxied: 'msg,
+ {
mutator.my_proxied_ref.val = self.my_proxied_ref.val.clone();
}
}
impl SettableValue<MyProxied> for String {
- fn set_on(self, _private: Private, mutator: Mut<MyProxied>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, MyProxied>)
+ where
+ MyProxied: 'msg,
+ {
mutator.my_proxied_ref.val = self;
}
}
impl SettableValue<MyProxied> for &'_ str {
- fn set_on(self, _private: Private, mutator: Mut<MyProxied>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, MyProxied>)
+ where
+ MyProxied: 'msg,
+ {
mutator.my_proxied_ref.val.replace_range(.., self);
}
}
impl SettableValue<MyProxied> for Cow<'_, str> {
- fn set_on(self, _private: Private, mutator: Mut<MyProxied>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, MyProxied>)
+ where
+ MyProxied: 'msg,
+ {
match self {
Cow::Owned(x) => <String as SettableValue<MyProxied>>::set_on(x, Private, mutator),
Cow::Borrowed(x) => <&str as SettableValue<MyProxied>>::set_on(x, Private, mutator),
@@ -384,7 +415,7 @@
let my_view = my_proxied.as_view();
- assert_eq!(my_view.val(), my_proxied.val);
+ assert_that!(my_view.val(), eq(&my_proxied.val));
}
#[test]
@@ -395,11 +426,11 @@
my_mut.set("Hello indeed".to_string());
let val_after_set = my_mut.as_view().val().to_string();
- assert_eq!(my_proxied.val, val_after_set);
- assert_eq!(my_proxied.val, "Hello indeed");
+ assert_that!(my_proxied.val, eq(val_after_set));
+ assert_that!(my_proxied.val, eq("Hello indeed"));
}
- fn reborrow_mut_into_view<'a>(x: Mut<'a, MyProxied>) -> View<'a, MyProxied> {
+ fn reborrow_mut_into_view<'msg>(x: Mut<'msg, MyProxied>) -> View<'msg, MyProxied> {
// x.as_view() fails to compile with:
// `ERROR: attempt to return function-local borrowed content`
x.into_view() // OK: we return the same lifetime as we got in.
@@ -411,7 +442,7 @@
reborrow_mut_into_view(my_proxied.as_mut());
}
- fn require_unified_lifetimes<'a>(_x: Mut<'a, MyProxied>, _y: View<'a, MyProxied>) {}
+ fn require_unified_lifetimes<'msg>(_x: Mut<'msg, MyProxied>, _y: View<'msg, MyProxied>) {}
#[test]
fn test_require_unified_lifetimes() {
@@ -527,12 +558,12 @@
fn test_set() {
let mut my_proxied = MyProxied::default();
my_proxied.as_mut().set("hello");
- assert_eq!(my_proxied.as_view().val(), "hello");
+ assert_that!(my_proxied.as_view().val(), eq("hello"));
my_proxied.as_mut().set(String::from("hello2"));
- assert_eq!(my_proxied.as_view().val(), "hello2");
+ assert_that!(my_proxied.as_view().val(), eq("hello2"));
my_proxied.as_mut().set(Cow::Borrowed("hello3"));
- assert_eq!(my_proxied.as_view().val(), "hello3");
+ assert_that!(my_proxied.as_view().val(), eq("hello3"));
}
}
diff --git a/rust/repeated.rs b/rust/repeated.rs
index 1abb715..91ef0ae 100644
--- a/rust/repeated.rs
+++ b/rust/repeated.rs
@@ -5,229 +5,467 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+use std::fmt::{self, Debug};
+use std::iter;
+use std::iter::FusedIterator;
/// Repeated scalar fields are implemented around the runtime-specific
/// `RepeatedField` struct. `RepeatedField` stores an opaque pointer to the
/// runtime-specific representation of a repeated scalar (`upb_Array*` on upb,
/// and `RepeatedField<T>*` on cpp).
use std::marker::PhantomData;
+use std::ops::Deref;
use crate::{
Mut, MutProxy, Proxied, SettableValue, View, ViewProxy,
__internal::{Private, RawRepeatedField},
- __runtime::{RepeatedField, RepeatedFieldInner},
- primitive::PrimitiveMut,
- vtable::ProxiedWithRawVTable,
+ __runtime::InnerRepeatedMut,
};
-#[derive(Clone, Copy)]
-pub struct RepeatedFieldRef<'a> {
- pub repeated_field: RawRepeatedField,
- pub _phantom: PhantomData<&'a mut ()>,
-}
-
-unsafe impl<'a> Send for RepeatedFieldRef<'a> {}
-unsafe impl<'a> Sync for RepeatedFieldRef<'a> {}
-
-#[derive(Clone, Copy)]
+/// Views the elements in a `repeated` field of `T`.
#[repr(transparent)]
-pub struct RepeatedView<'a, T: ?Sized> {
- inner: RepeatedField<'a, T>,
+pub struct RepeatedView<'msg, T: ?Sized> {
+ // This does not need to carry an arena in upb, so it can be just the raw repeated field
+ raw: RawRepeatedField,
+ _phantom: PhantomData<&'msg T>,
}
-unsafe impl<'a, T: ProxiedWithRawVTable> Sync for RepeatedView<'a, T> {}
-unsafe impl<'a, T: ProxiedWithRawVTable> Send for RepeatedView<'a, T> {}
-
-impl<'msg, T: ?Sized> RepeatedView<'msg, T> {
- pub fn from_inner(_private: Private, inner: RepeatedFieldInner<'msg>) -> Self {
- Self { inner: RepeatedField::<'msg>::from_inner(_private, inner) }
+impl<'msg, T: ?Sized> Copy for RepeatedView<'msg, T> {}
+impl<'msg, T: ?Sized> Clone for RepeatedView<'msg, T> {
+ fn clone(&self) -> Self {
+ *self
}
}
-pub struct RepeatedFieldIter<'a, T> {
- inner: RepeatedField<'a, T>,
- current_index: usize,
-}
+unsafe impl<'msg, T: ?Sized> Sync for RepeatedView<'msg, T> {}
+unsafe impl<'msg, T: ?Sized> Send for RepeatedView<'msg, T> {}
-impl<'a, T> std::fmt::Debug for RepeatedView<'a, T> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- f.debug_tuple("RepeatedView").finish()
+impl<'msg, T: ?Sized> Debug for RepeatedView<'msg, T> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("RepeatedView").field("raw", &self.raw).finish()
}
}
+/// Mutates the elements in a `repeated` field of `T`.
#[repr(transparent)]
-#[derive(Debug)]
-pub struct RepeatedMut<'a, T: ?Sized> {
- inner: RepeatedField<'a, T>,
+pub struct RepeatedMut<'msg, T: ?Sized> {
+ pub(crate) inner: InnerRepeatedMut<'msg>,
+ _phantom: PhantomData<&'msg mut T>,
}
-unsafe impl<'a, T: ProxiedWithRawVTable> Sync for RepeatedMut<'a, T> {}
+unsafe impl<'msg, T: ?Sized> Sync for RepeatedMut<'msg, T> {}
-impl<'msg, T: ?Sized> RepeatedMut<'msg, T> {
- pub fn from_inner(_private: Private, inner: RepeatedFieldInner<'msg>) -> Self {
- Self { inner: RepeatedField::from_inner(_private, inner) }
- }
- pub fn as_mut(&self) -> RepeatedMut<'_, T> {
- Self { inner: self.inner }
- }
-}
-
-impl<'a, T> std::ops::Deref for RepeatedMut<'a, T> {
- type Target = RepeatedView<'a, T>;
+impl<'msg, T: ?Sized> Deref for RepeatedMut<'msg, T> {
+ type Target = RepeatedView<'msg, T>;
fn deref(&self) -> &Self::Target {
// SAFETY:
- // - `Repeated{View,Mut}<'a, T>` are both `#[repr(transparent)]` over
- // `RepeatedField<'a, T>`.
+ // - `Repeated{View,Mut}<'msg, T>` are both `#[repr(transparent)]` over
+ // `RepeatedField<'msg, T>`.
+ // - `Repeated{View,Mut}<'msg, T>` are both `#[repr(transparent)]` over
+ // `RepeatedField<'msg, T>`.
// - `RepeatedField` is a type alias for `NonNull`.
- unsafe { &*(self as *const Self as *const RepeatedView<'a, T>) }
+ unsafe { &*(self as *const Self as *const RepeatedView<'msg, T>) }
}
}
-pub struct RepeatedFieldIterMut<'a, T> {
- inner: RepeatedMut<'a, T>,
+impl<'msg, T: ?Sized> Debug for RepeatedMut<'msg, T> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("RepeatedMut").field("raw", &self.raw).finish()
+ }
+}
+
+impl<'msg, T> RepeatedView<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ #[doc(hidden)]
+ pub fn as_raw(&self, _private: Private) -> RawRepeatedField {
+ self.raw
+ }
+
+ /// # Safety
+ /// - `inner` must be valid to read from for `'msg`
+ #[doc(hidden)]
+ pub unsafe fn from_raw(_private: Private, raw: RawRepeatedField) -> Self {
+ Self { raw, _phantom: PhantomData }
+ }
+
+ /// Gets the length of the repeated field.
+ pub fn len(&self) -> usize {
+ T::repeated_len(*self)
+ }
+
+ /// Returns true if the repeated field has no values.
+ pub fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
+
+ /// Gets the value at `index`.
+ ///
+ /// Returns `None` if `index > len`.
+ pub fn get(self, index: usize) -> Option<View<'msg, T>> {
+ if index >= self.len() {
+ return None;
+ }
+ // SAFETY: `index` has been checked to be in-bounds
+ Some(unsafe { self.get_unchecked(index) })
+ }
+
+ /// Gets the value at `index` without bounds-checking.
+ ///
+ /// # Safety
+ /// Undefined behavior if `index >= len`
+ pub unsafe fn get_unchecked(self, index: usize) -> View<'msg, T> {
+ // SAFETY: in-bounds as promised
+ unsafe { T::repeated_get_unchecked(self, index) }
+ }
+
+ /// Iterates over the values in the repeated field.
+ pub fn iter(self) -> RepeatedIter<'msg, T> {
+ self.into_iter()
+ }
+}
+
+impl<'msg, T> RepeatedMut<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ /// # Safety
+ /// - `inner` must be valid to read and write from for `'msg`
+ /// - There must be no aliasing references or mutations on the same
+ /// underlying object.
+ #[doc(hidden)]
+ pub unsafe fn from_inner(_private: Private, inner: InnerRepeatedMut<'msg>) -> Self {
+ Self { inner, _phantom: PhantomData }
+ }
+
+ /// # Safety
+ /// - The return value must not be mutated through without synchronization.
+ #[allow(dead_code)]
+ pub(crate) unsafe fn into_inner(self) -> InnerRepeatedMut<'msg> {
+ self.inner
+ }
+
+ #[doc(hidden)]
+ pub fn as_raw(&mut self, _private: Private) -> RawRepeatedField {
+ self.inner.raw
+ }
+
+ /// Appends `val` to the end of the repeated field.
+ pub fn push(&mut self, val: View<T>) {
+ T::repeated_push(self.as_mut(), val);
+ }
+
+ /// Sets the value at `index` to the value `val`.
+ ///
+ /// # Panics
+ /// Panics if `index >= len`
+ pub fn set(&mut self, index: usize, val: View<T>) {
+ let len = self.len();
+ if index >= len {
+ panic!("index {index} >= repeated len {len}");
+ }
+ // SAFETY: `index` has been checked to be in-bounds.
+ unsafe { self.set_unchecked(index, val) }
+ }
+
+ /// Sets the value at `index` to the value `val`.
+ ///
+ /// # Safety
+ /// Undefined behavior if `index >= len`
+ pub unsafe fn set_unchecked(&mut self, index: usize, val: View<T>) {
+ // SAFETY: `index` is in-bounds as promised by the caller.
+ unsafe { T::repeated_set_unchecked(self.as_mut(), index, val) }
+ }
+
+ /// Returns the value at `index`.
+ // This is defined as an inherent function to prevent `MutProxy::get` from being
+ // preferred over `RepeatedView::get`. The former gets priority as it does
+ // not require a deref.
+ pub fn get(&self, index: usize) -> Option<View<T>> {
+ self.as_view().get(index)
+ }
+
+ /// Copies from the `src` repeated field into this one.
+ ///
+ /// Also provided by [`MutProxy::set`].
+ pub fn copy_from(&mut self, src: RepeatedView<'_, T>) {
+ T::repeated_copy_from(src, self.as_mut())
+ }
+
+ /// Clears the repeated field.
+ pub fn clear(&mut self) {
+ T::repeated_clear(self.as_mut())
+ }
+}
+
+/// Types that can appear in a `Repeated<T>`.
+///
+/// This trait is implemented by generated code to communicate how the proxied
+/// type can be manipulated for a repeated field.
+///
+/// Scalars and messages implement `ProxiedInRepeated`.
+///
+/// # Safety
+/// - It must be sound to call `*_unchecked*(x)` with an `index` less than
+/// `repeated_len(x)`.
+pub unsafe trait ProxiedInRepeated: Proxied {
+ /// Constructs a new owned `Repeated` field.
+ #[doc(hidden)]
+ fn repeated_new(_private: Private) -> Repeated<Self> {
+ unimplemented!("not required")
+ }
+
+ /// Frees the repeated field in-place, for use in `Drop`.
+ ///
+ /// # Safety
+ /// - After `repeated_free`, no other methods on the input are safe to call.
+ #[doc(hidden)]
+ unsafe fn repeated_free(_private: Private, _repeated: &mut Repeated<Self>) {
+ unimplemented!("not required")
+ }
+
+ /// Gets the length of the repeated field.
+ fn repeated_len(repeated: View<Repeated<Self>>) -> usize;
+
+ /// Appends a new element to the end of the repeated field.
+ fn repeated_push(repeated: Mut<Repeated<Self>>, val: View<Self>);
+
+ /// Clears the repeated field of elements.
+ fn repeated_clear(repeated: Mut<Repeated<Self>>);
+
+ /// # Safety
+ /// `index` must be less than `Self::repeated_len(repeated)`
+ unsafe fn repeated_get_unchecked(repeated: View<Repeated<Self>>, index: usize) -> View<Self>;
+
+ /// # Safety
+ /// `index` must be less than `Self::repeated_len(repeated)`
+ unsafe fn repeated_set_unchecked(repeated: Mut<Repeated<Self>>, index: usize, val: View<Self>);
+
+ /// Copies the values in the `src` repeated field into `dest`.
+ fn repeated_copy_from(src: View<Repeated<Self>>, dest: Mut<Repeated<Self>>);
+}
+
+/// An iterator over the values inside of a [`View<Repeated<T>>`](RepeatedView).
+pub struct RepeatedIter<'msg, T: ?Sized> {
+ view: RepeatedView<'msg, T>,
current_index: usize,
}
-pub struct Repeated<T>(PhantomData<T>);
-
-macro_rules! impl_repeated_primitives {
- ($($t:ty),*) => {
- $(
- impl Proxied for Repeated<$t> {
- type View<'a> = RepeatedView<'a, $t>;
- type Mut<'a> = RepeatedMut<'a, $t>;
- }
-
- impl<'a> ViewProxy<'a> for RepeatedView<'a, $t> {
- type Proxied = Repeated<$t>;
-
- fn as_view(&self) -> View<'_, Self::Proxied> {
- *self
- }
-
- fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
- where 'a: 'shorter,
- {
- RepeatedView { inner: self.inner }
- }
- }
-
- impl<'a> ViewProxy<'a> for RepeatedMut<'a, $t> {
- type Proxied = Repeated<$t>;
-
- fn as_view(&self) -> View<'_, Self::Proxied> {
- **self
- }
-
- fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
- where 'a: 'shorter,
- {
- *self.into_mut::<'shorter>()
- }
- }
-
- impl<'a> MutProxy<'a> for RepeatedMut<'a, $t> {
- fn as_mut(&mut self) -> Mut<'_, Self::Proxied> {
- RepeatedMut { inner: self.inner }
- }
-
- fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied>
- where 'a: 'shorter,
- {
- RepeatedMut { inner: self.inner }
- }
- }
-
- impl <'a> SettableValue<Repeated<$t>> for RepeatedView<'a, $t> {
- fn set_on(self, _private: Private, mut mutator: Mut<'_, Repeated<$t>>) {
- mutator.copy_from(self);
- }
- }
-
- impl<'a> RepeatedView<'a, $t> {
- pub fn len(&self) -> usize {
- self.inner.len()
- }
- pub fn is_empty(&self) -> bool {
- self.len() == 0
- }
- pub fn get(&self, index: usize) -> Option<$t> {
- self.inner.get(index)
- }
- pub fn iter(&self) -> RepeatedFieldIter<'_, $t> {
- (*self).into_iter()
- }
- }
-
- impl<'a> RepeatedMut<'a, $t> {
- pub fn push(&mut self, val: $t) {
- self.inner.push(val)
- }
- pub fn set(&mut self, index: usize, val: $t) {
- self.inner.set(index, val)
- }
- pub fn get_mut(&mut self, index: usize) -> Option<Mut<'_, $t>> {
- if index >= self.len() {
- return None;
- }
- Some(PrimitiveMut::Repeated(self.as_mut(), index))
- }
- pub fn iter(&self) -> RepeatedFieldIter<'_, $t> {
- self.as_view().into_iter()
- }
- pub fn iter_mut(&mut self) -> RepeatedFieldIterMut<'_, $t> {
- self.as_mut().into_iter()
- }
- pub fn copy_from(&mut self, src: RepeatedView<'_, $t>) {
- self.inner.copy_from(&src.inner);
- }
- }
-
- impl<'a> std::iter::Iterator for RepeatedFieldIter<'a, $t> {
- type Item = $t;
- fn next(&mut self) -> Option<Self::Item> {
- let val = self.inner.get(self.current_index);
- if val.is_some() {
- self.current_index += 1;
- }
- val
- }
- }
-
- impl<'a> std::iter::IntoIterator for RepeatedView<'a, $t> {
- type Item = $t;
- type IntoIter = RepeatedFieldIter<'a, $t>;
- fn into_iter(self) -> Self::IntoIter {
- RepeatedFieldIter { inner: self.inner, current_index: 0 }
- }
- }
-
- impl <'a> std::iter::Iterator for RepeatedFieldIterMut<'a, $t> {
- type Item = Mut<'a, $t>;
- fn next(&mut self) -> Option<Self::Item> {
- if self.current_index >= self.inner.len() {
- return None;
- }
- let elem = PrimitiveMut::Repeated(
- // While this appears to allow mutable aliasing
- // (multiple `Self::Item`s can co-exist), each `Item`
- // only references a specific unique index.
- RepeatedMut{ inner: self.inner.inner },
- self.current_index,
- );
- self.current_index += 1;
- Some(elem)
- }
- }
-
- impl<'a> std::iter::IntoIterator for RepeatedMut<'a, $t> {
- type Item = Mut<'a, $t>;
- type IntoIter = RepeatedFieldIterMut<'a, $t>;
- fn into_iter(self) -> Self::IntoIter {
- RepeatedFieldIterMut { inner: self, current_index: 0 }
- }
- }
- )*
+impl<'msg, T: ?Sized> Debug for RepeatedIter<'msg, T> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("RepeatedIter")
+ .field("view", &self.view)
+ .field("current_index", &self.current_index)
+ .finish()
}
}
-impl_repeated_primitives!(i32, u32, bool, f32, f64, i64, u64);
+/// An iterator over the mutators inside of a [`Mut<Repeated<T>>`](RepeatedMut).
+pub struct RepeatedIterMut<'msg, T: ?Sized> {
+ mutator: RepeatedMut<'msg, T>,
+ current_index: usize,
+}
+
+impl<'msg, T: ?Sized> Debug for RepeatedIterMut<'msg, T> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("RepeatedIterMut")
+ .field("mutator", &self.mutator)
+ .field("current_index", &self.current_index)
+ .finish()
+ }
+}
+
+/// A `repeated` field of `T`, used as the owned target for `Proxied`.
+///
+/// Users will generally write [`View<Repeated<T>>`](RepeatedView) or
+/// [`Mut<Repeated<T>>`](RepeatedMut) to access the repeated elements
+pub struct Repeated<T: ?Sized + ProxiedInRepeated> {
+ inner: InnerRepeatedMut<'static>,
+ _phantom: PhantomData<T>,
+}
+
+impl<T: ?Sized + ProxiedInRepeated> Repeated<T> {
+ #[allow(dead_code)]
+ pub(crate) fn new() -> Self {
+ T::repeated_new(Private)
+ }
+
+ pub(crate) unsafe fn from_inner(inner: InnerRepeatedMut<'static>) -> Self {
+ Self { inner, _phantom: PhantomData }
+ }
+
+ #[allow(dead_code)]
+ pub(crate) fn inner(&mut self) -> InnerRepeatedMut<'static> {
+ self.inner
+ }
+
+ pub(crate) fn as_mut(&mut self) -> RepeatedMut<'_, T> {
+ RepeatedMut { inner: self.inner, _phantom: PhantomData }
+ }
+}
+
+impl<T: ?Sized + ProxiedInRepeated> Drop for Repeated<T> {
+ fn drop(&mut self) {
+ // SAFETY: only called once
+ unsafe { T::repeated_free(Private, self) }
+ }
+}
+
+// SAFETY: `Repeated` does not allow for shared mutability.
+unsafe impl<T: ProxiedInRepeated> Sync for Repeated<T> {}
+
+impl<T> Proxied for Repeated<T>
+where
+ T: ProxiedInRepeated + ?Sized,
+{
+ type View<'msg> = RepeatedView<'msg, T> where Repeated<T>: 'msg;
+ type Mut<'msg> = RepeatedMut<'msg, T> where Repeated<T>: 'msg;
+}
+
+impl<'msg, T> ViewProxy<'msg> for RepeatedView<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ type Proxied = Repeated<T>;
+
+ fn as_view(&self) -> View<'_, Self::Proxied> {
+ *self
+ }
+
+ fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
+ where
+ 'msg: 'shorter,
+ {
+ RepeatedView { raw: self.raw, _phantom: PhantomData }
+ }
+}
+
+impl<'msg, T> ViewProxy<'msg> for RepeatedMut<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ type Proxied = Repeated<T>;
+
+ fn as_view(&self) -> View<'_, Self::Proxied> {
+ **self
+ }
+
+ fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied>
+ where
+ 'msg: 'shorter,
+ {
+ *self.into_mut::<'shorter>()
+ }
+}
+
+impl<'msg, T> MutProxy<'msg> for RepeatedMut<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ fn as_mut(&mut self) -> Mut<'_, Self::Proxied> {
+ RepeatedMut { inner: self.inner, _phantom: PhantomData }
+ }
+
+ fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied>
+ where
+ 'msg: 'shorter,
+ {
+ RepeatedMut { inner: self.inner, _phantom: PhantomData }
+ }
+}
+
+impl<'msg, T> SettableValue<Repeated<T>> for RepeatedView<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ fn set_on<'b>(self, _private: Private, mutator: Mut<'b, Repeated<T>>)
+ where
+ Repeated<T>: 'b,
+ {
+ T::repeated_copy_from(self, mutator)
+ }
+}
+
+// TODO: impl ExactSizeIterator
+impl<'msg, T> iter::Iterator for RepeatedIter<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ type Item = View<'msg, T>;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ let val = self.view.get(self.current_index);
+ if val.is_some() {
+ self.current_index += 1;
+ }
+ val
+ }
+}
+
+impl<'msg, T: ?Sized + ProxiedInRepeated> ExactSizeIterator for RepeatedIter<'msg, T> {
+ fn len(&self) -> usize {
+ self.view.len()
+ }
+}
+
+impl<'msg, T: ?Sized + ProxiedInRepeated> FusedIterator for RepeatedIter<'msg, T> {}
+
+impl<'msg, T> iter::IntoIterator for RepeatedView<'msg, T>
+where
+ T: ProxiedInRepeated + ?Sized + 'msg,
+{
+ type Item = View<'msg, T>;
+ type IntoIter = RepeatedIter<'msg, T>;
+
+ fn into_iter(self) -> Self::IntoIter {
+ RepeatedIter { view: self, current_index: 0 }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use googletest::prelude::*;
+
+ #[test]
+ fn test_primitive_repeated() {
+ macro_rules! primitive_repeated_tests {
+ ($($t:ty => [$($vals:expr),* $(,)?]),* $(,)?) => {
+ $({
+ // Constructs a new, owned, `Repeated`, only used for tests.
+ let mut r = Repeated::<$t>::new();
+ let mut r = r.as_mut();
+ assert_that!(r.len(), eq(0));
+ assert!(r.iter().next().is_none(), "starts with empty iter");
+ assert!(r.iter().next().is_none(), "starts with empty mut iter");
+ assert!(r.is_empty(), "starts is_empty");
+
+ let mut expected_len = 0usize;
+ $(
+ let val: View<$t> = $vals;
+ r.push(val);
+ assert_that!(r.get(expected_len), eq(Some(val)));
+ expected_len += 1;
+ assert_that!(r.len(), eq(expected_len));
+
+ )*
+ assert_that!(
+ r.iter().collect::<Vec<$t>>(), elements_are![$(eq($vals)),*]);
+ r.set(0, <$t as Default>::default());
+ assert_that!(r.get(0).expect("elem 0"), eq(<$t as Default>::default()));
+
+ r.clear();
+ assert!(r.is_empty(), "is_empty after clear");
+ assert!(r.iter().next().is_none(), "iter empty after clear");
+ assert!(r.into_iter().next().is_none(), "mut iter empty after clear");
+ })*
+ }
+ }
+ primitive_repeated_tests!(
+ u32 => [1,2,3],
+ i32 => [1,2],
+ f64 => [10.0, 0.1234f64],
+ bool => [false, true, true, false],
+ );
+ }
+}
diff --git a/rust/shared.rs b/rust/shared.rs
index 5aa054c..67ece90 100644
--- a/rust/shared.rs
+++ b/rust/shared.rs
@@ -13,18 +13,23 @@
use std::fmt;
+// There are a number of manual `Debug` and similar impls instead of using their
+// derives, in order to to avoid unnecessary bounds on a generic `T`.
+// This problem is referred to as "perfect derive".
+// https://smallcultfollowing.com/babysteps/blog/2022/04/12/implied-bounds-and-perfect-derive/
+
/// Everything in `__public` is re-exported in `protobuf.rs`.
/// These are the items protobuf users can access directly.
#[doc(hidden)]
pub mod __public {
- #[cfg(upb_kernel)]
- pub use crate::map::{MapMut, MapView};
+ pub use crate::r#enum::UnknownEnumValue;
+ pub use crate::map::{Map, MapMut, MapView};
pub use crate::optional::{AbsentField, FieldEntry, Optional, PresentField};
- pub use crate::primitive::{PrimitiveMut, SingularPrimitiveMut};
+ pub use crate::primitive::PrimitiveMut;
pub use crate::proxied::{
Mut, MutProxy, Proxied, ProxiedWithPresence, SettableValue, View, ViewProxy,
};
- pub use crate::repeated::{RepeatedFieldRef, RepeatedMut, RepeatedView};
+ pub use crate::repeated::{ProxiedInRepeated, Repeated, RepeatedMut, RepeatedView};
pub use crate::string::{BytesMut, ProtoStr, ProtoStrMut};
}
pub use __public::*;
@@ -45,8 +50,9 @@
#[path = "upb.rs"]
pub mod __runtime;
+#[path = "enum.rs"]
+mod r#enum;
mod macros;
-#[cfg(upb_kernel)]
mod map;
mod optional;
mod primitive;
diff --git a/rust/string.rs b/rust/string.rs
index 401dfc3..dfaa519 100644
--- a/rust/string.rs
+++ b/rust/string.rs
@@ -128,15 +128,11 @@
type PresentMutData<'msg> = BytesPresentMutData<'msg>;
type AbsentMutData<'msg> = BytesAbsentMutData<'msg>;
- fn clear_present_field<'a>(
- present_mutator: Self::PresentMutData<'a>,
- ) -> Self::AbsentMutData<'a> {
+ fn clear_present_field(present_mutator: Self::PresentMutData<'_>) -> Self::AbsentMutData<'_> {
present_mutator.clear()
}
- fn set_absent_to_default<'a>(
- absent_mutator: Self::AbsentMutData<'a>,
- ) -> Self::PresentMutData<'a> {
+ fn set_absent_to_default(absent_mutator: Self::AbsentMutData<'_>) -> Self::PresentMutData<'_> {
absent_mutator.set_absent_to_default()
}
}
@@ -185,7 +181,10 @@
}
impl SettableValue<[u8]> for &'_ [u8] {
- fn set_on(self, _private: Private, mutator: BytesMut<'_>) {
+ fn set_on<'msg>(self, _private: Private, mutator: Mut<'msg, [u8]>)
+ where
+ [u8]: 'msg,
+ {
// SAFETY: this is a `bytes` field with no restriction on UTF-8.
unsafe { mutator.inner.set(self) }
}
@@ -695,7 +694,10 @@
}
impl SettableValue<ProtoStr> for &'_ ProtoStr {
- fn set_on(self, _private: Private, mutator: ProtoStrMut<'_>) {
+ fn set_on<'b>(self, _private: Private, mutator: Mut<'b, ProtoStr>)
+ where
+ ProtoStr: 'b,
+ {
// SAFETY: A `ProtoStr` has the same UTF-8 validity requirement as the runtime.
unsafe { mutator.bytes.inner.set(self.as_bytes()) }
}
diff --git a/rust/test/BUILD b/rust/test/BUILD
index 1c8255c..2541732 100644
--- a/rust/test/BUILD
+++ b/rust/test/BUILD
@@ -7,10 +7,15 @@
load("@rules_cc//cc:defs.bzl", "cc_proto_library")
UNITTEST_PROTO_TARGET = "//src/google/protobuf:test_protos"
+
UNITTEST_CC_PROTO_TARGET = "//src/google/protobuf:cc_test_protos"
+
UNITTEST_PROTO3_TARGET = "//src/google/protobuf:test_protos"
+
UNITTEST_PROTO3_CC_TARGET = "//src/google/protobuf:cc_test_protos"
+
UNITTEST_PROTO3_OPTIONAL_TARGET = "//src/google/protobuf:test_protos"
+
UNITTEST_PROTO3_OPTIONAL_CC_TARGET = "//src/google/protobuf:cc_test_protos"
alias(
@@ -49,7 +54,7 @@
name = "unittest_proto3_rust_proto",
testonly = True,
visibility = [
- "//rust/test/shared:__subpackages__",
+ "//visibility:private", # Only private by automation, not intent. Owner may accept CLs adding visibility. See go/scheuklappen#explicit-private.
],
deps = [
UNITTEST_PROTO3_TARGET,
@@ -59,20 +64,14 @@
rust_cc_proto_library(
name = "unittest_proto3_cc_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/cpp:__subpackages__",
- "//rust/test/shared:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [UNITTEST_PROTO3_CC_TARGET],
)
rust_upb_proto_library(
name = "unittest_proto3_upb_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/cpp:__subpackages__",
- "//rust/test/shared:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [UNITTEST_PROTO3_TARGET],
)
@@ -80,7 +79,7 @@
name = "unittest_proto3_optional_rust_proto",
testonly = True,
visibility = [
- "//rust/test/shared:__subpackages__",
+ "//visibility:private", # Only private by automation, not intent. Owner may accept CLs adding visibility. See go/scheuklappen#explicit-private.
],
deps = [
UNITTEST_PROTO3_OPTIONAL_TARGET,
@@ -90,20 +89,14 @@
rust_cc_proto_library(
name = "unittest_proto3_optional_cc_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/cpp:__subpackages__",
- "//rust/test/shared:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [UNITTEST_PROTO3_OPTIONAL_CC_TARGET],
)
rust_upb_proto_library(
name = "unittest_proto3_optional_upb_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/cpp:__subpackages__",
- "//rust/test/shared:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [UNITTEST_PROTO3_OPTIONAL_TARGET],
)
@@ -187,6 +180,59 @@
)
proto_library(
+ name = "edition2023_proto",
+ testonly = True,
+ srcs = ["edition2023.proto"],
+)
+
+cc_proto_library(
+ name = "edition2023_cc_proto",
+ testonly = True,
+ deps = [":edition2023_proto"],
+)
+
+rust_cc_proto_library(
+ name = "edition2023_cc_rust_proto",
+ testonly = True,
+ visibility = ["//rust/test/shared:__subpackages__"],
+ deps = [":edition2023_cc_proto"],
+)
+
+rust_upb_proto_library(
+ name = "edition2023_upb_rust_proto",
+ testonly = True,
+ visibility = ["//rust/test/shared:__subpackages__"],
+ deps = [":edition2023_proto"],
+)
+
+proto_library(
+ name = "enums_proto",
+ testonly = True,
+ srcs = ["enums.proto"],
+ deps = ["//devtools/staticanalysis/pipeline/analyzers/proto_best_practices/proto:optouts_proto"],
+)
+
+cc_proto_library(
+ name = "enums_cc_proto",
+ testonly = True,
+ deps = [":enums_proto"],
+)
+
+rust_cc_proto_library(
+ name = "enums_cc_rust_proto",
+ testonly = True,
+ visibility = ["//rust/test/shared:__subpackages__"],
+ deps = [":enums_cc_proto"],
+)
+
+rust_upb_proto_library(
+ name = "enums_upb_rust_proto",
+ testonly = True,
+ visibility = ["//rust/test/shared:__subpackages__"],
+ deps = [":enums_proto"],
+)
+
+proto_library(
name = "no_package_import_proto",
testonly = True,
srcs = ["no_package_import.proto"],
@@ -250,20 +296,14 @@
rust_cc_proto_library(
name = "package_cc_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/cpp:__subpackages__",
- "//rust/test/shared:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [":package_cc_proto"],
)
rust_upb_proto_library(
name = "package_upb_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/shared:__subpackages__",
- "//rust/test/upb:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [":package_proto"],
)
@@ -282,20 +322,14 @@
rust_cc_proto_library(
name = "reserved_cc_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/cpp:__subpackages__",
- "//rust/test/shared:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [":reserved_cc_proto"],
)
rust_upb_proto_library(
name = "reserved_upb_rust_proto",
testonly = True,
- visibility = [
- "//rust/test/shared:__subpackages__",
- "//rust/test/upb:__subpackages__",
- ],
+ visibility = ["//rust/test/shared:__subpackages__"],
deps = [":reserved_proto"],
)
@@ -331,6 +365,21 @@
deps = [":nested_proto"],
)
+cc_proto_library(
+ name = "map_unittest_cc_proto",
+ testonly = True,
+ deps = ["//src/google/protobuf:map_unittest_proto"],
+)
+
+rust_cc_proto_library(
+ name = "map_unittest_cc_rust_proto",
+ testonly = True,
+ visibility = [
+ "//rust/test/shared:__subpackages__",
+ ],
+ deps = [":map_unittest_cc_proto"],
+)
+
rust_upb_proto_library(
name = "map_unittest_upb_rust_proto",
testonly = True,
diff --git a/rust/test/cpp/interop/BUILD b/rust/test/cpp/interop/BUILD
index 1a4d88d..abbf0d2 100644
--- a/rust/test/cpp/interop/BUILD
+++ b/rust/test/cpp/interop/BUILD
@@ -6,9 +6,9 @@
name = "test_utils",
srcs = ["test_utils.cc"],
deps = [
- "@com_google_absl//absl/strings",
"//rust/cpp_kernel:cpp_api",
"//rust/test:unittest_cc_proto",
+ "@com_google_absl//absl/strings",
],
)
@@ -23,5 +23,6 @@
":test_utils",
"//rust:protobuf_cpp",
"//rust/test:unittest_cc_rust_proto",
+ "@crate_index//:googletest",
],
)
diff --git a/rust/test/cpp/interop/main.rs b/rust/test/cpp/interop/main.rs
index e07e255..f8c4a52 100644
--- a/rust/test/cpp/interop/main.rs
+++ b/rust/test/cpp/interop/main.rs
@@ -5,6 +5,7 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+use googletest::prelude::*;
use protobuf_cpp::__internal::PtrAndLen;
use protobuf_cpp::__internal::RawMessage;
use unittest_proto::proto2_unittest::TestAllExtensions;
@@ -15,9 +16,9 @@
let lhs = &$lhs;
let rhs = &$rhs;
- assert_eq!(lhs.optional_int64(), rhs.optional_int64());
- assert_eq!(lhs.optional_bytes(), rhs.optional_bytes());
- assert_eq!(lhs.optional_bool(), rhs.optional_bool());
+ assert_that!(lhs.optional_int64(), eq(rhs.optional_int64()));
+ assert_that!(lhs.optional_bytes(), eq(rhs.optional_bytes()));
+ assert_that!(lhs.optional_bool(), eq(rhs.optional_bool()));
}};
}
@@ -40,9 +41,9 @@
}
let mut msg2 = TestAllTypes::new();
- msg2.optional_int64_set(Some(42));
+ msg2.optional_int64_mut().set(42);
msg2.optional_bytes_mut().set(b"something mysterious");
- msg2.optional_bool_set(Some(false));
+ msg2.optional_bool_mut().set(false);
proto_assert_eq!(msg1, msg2);
}
@@ -50,7 +51,7 @@
#[test]
fn deserialize_in_rust() {
let mut msg1 = TestAllTypes::new();
- msg1.optional_int64_set(Some(-1));
+ msg1.optional_int64_mut().set(-1);
msg1.optional_bytes_mut().set(b"some cool data I guess");
let serialized =
unsafe { SerializeTestAllTypes(msg1.__unstable_cpp_repr_grant_permission_to_break()) };
@@ -63,7 +64,7 @@
#[test]
fn deserialize_in_cpp() {
let mut msg1 = TestAllTypes::new();
- msg1.optional_int64_set(Some(-1));
+ msg1.optional_int64_mut().set(-1);
msg1.optional_bytes_mut().set(b"some cool data I guess");
let data = msg1.serialize();
diff --git a/rust/test/edition2023.proto b/rust/test/edition2023.proto
new file mode 100644
index 0000000..d5c48a2
--- /dev/null
+++ b/rust/test/edition2023.proto
@@ -0,0 +1,8 @@
+edition = "2023";
+
+package test;
+
+message EditionsMessage {
+ int32 plain_field = 1;
+ int32 implicit_presence_field = 2 [features.field_presence = IMPLICIT];
+}
diff --git a/rust/test/enums.proto b/rust/test/enums.proto
new file mode 100644
index 0000000..21182bc
--- /dev/null
+++ b/rust/test/enums.proto
@@ -0,0 +1,61 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+// LINT: LEGACY_NAMES
+
+// The names in this file are meant to test edge cases.
+syntax = "proto3";
+
+package enums;
+
+import "devtools/staticanalysis/pipeline/analyzers/proto_best_practices/proto/optouts.proto";
+
+option (proto_best_practices.file_optouts) = {
+ categories: ENUM_DEFAULT_VALUE_NAME_CONFLICT
+ categories: ENUM_VALUE_NAMES
+};
+
+// This should result in an enum with these accessible values:
+// - Unknown = 0
+// - Unrecognized = 0
+// - Foo = 1
+// - Bar = 2
+// - DifferentNameAlias = 2
+enum TestEnumWithDuplicateStrippedPrefixNames {
+ option allow_alias = true;
+
+ UNKNOWN = 0;
+ TestEnumWithDuplicateStrippedPrefixNamesUNRECOGNIZED = 0;
+
+ TestEnumWithDuplicateStrippedPrefixNames_FOO = 1;
+ TEST_ENUM_WITH_DUPLICATE_STRIPPED_PREFIX_NAMES_FOO = 1;
+ FOO = 1;
+
+ TestEnumWithDuplicateStrippedPrefixNamesBAR = 2;
+ TEST_ENUM_WITH_DUPLICATE_STRIPPED_PREFIX_NAMESBar = 2;
+ BAR = 2;
+ TEST_ENUM_WITH_DUPLICATE_STRIPPED_PREFIX_NAMES_DIFFERENT_NAME_ALIAS = 2;
+}
+
+// This should result in an enum with these accessible values:
+// - Unknown = 0
+// - _2020 = 1
+// - _2021 = 2
+// - _2022 = 3
+enum TestEnumWithNumericNames {
+ TestEnumWithNumericNamesUNKNOWN = 0;
+ TestEnumWithNumericNames_2020 = 1;
+ TEST_ENUM_WITH_NUMERIC_NAMES_2021 = 2;
+ TEST_ENUM_WITH_NUMERIC_NAMES2022 = 3;
+}
+
+// This should result in an enum with these accessible values:
+// - Unknown = 0
+// - TestEnumValueNameSameAsEnum = 1
+enum TestEnumValueNameSameAsEnum {
+ TEST_ENUM_VALUE_NAME_SAME_AS_ENUM_UNKNOWN = 0;
+ TEST_ENUM_VALUE_NAME_SAME_AS_ENUM = 1;
+}
diff --git a/rust/test/nested.proto b/rust/test/nested.proto
index 80b0c61..59aee22 100644
--- a/rust/test/nested.proto
+++ b/rust/test/nested.proto
@@ -11,8 +11,26 @@
message Outer {
message Inner {
- optional int32 num = 1;
- optional bool boolean = 2;
+ message InnerSubMsg {
+ optional bool flag = 1;
+ }
+
+ optional double double = 1;
+ optional float float = 2;
+ optional int32 int32 = 3;
+ optional int64 int64 = 4;
+ optional uint32 uint32 = 5;
+ optional uint64 uint64 = 6;
+ optional sint32 sint32 = 7;
+ optional sint64 sint64 = 8;
+ optional fixed32 fixed32 = 9;
+ optional fixed64 fixed64 = 10;
+ optional sfixed32 sfixed32 = 11;
+ optional sfixed64 sfixed64 = 12;
+ optional bool bool = 13;
+ optional string string = 14;
+ optional bytes bytes = 15;
+ optional InnerSubMsg innersubmsg = 16;
message SuperInner {
message DuperInner {
@@ -27,4 +45,15 @@
optional Inner inner = 1;
optional .nest.Outer.Inner.SuperInner.DuperInner.EvenMoreInner
.CantBelieveItsSoInner deep = 2;
+
+ optional NotInside notinside = 3;
+}
+
+message NotInside {
+ optional int32 num = 1;
+}
+
+message Recursive {
+ optional Recursive rec = 1;
+ optional int32 num = 2;
}
diff --git a/rust/test/shared/BUILD b/rust/test/shared/BUILD
index b5864a3..9fb9a1b 100644
--- a/rust/test/shared/BUILD
+++ b/rust/test/shared/BUILD
@@ -23,8 +23,8 @@
"//rust:protobuf_upb": "protobuf",
},
deps = [
- "@crate_index//:googletest",
"//rust:protobuf_upb",
+ "@crate_index//:googletest",
],
)
@@ -35,8 +35,8 @@
"//rust:protobuf_cpp": "protobuf",
},
deps = [
- "@crate_index//:googletest",
"//rust:protobuf_cpp",
+ "@crate_index//:googletest",
],
)
@@ -48,9 +48,9 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust/test:child_upb_rust_proto",
"//rust/test:parent_upb_rust_proto",
+ "@crate_index//:googletest",
],
)
@@ -62,9 +62,71 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust/test:child_cc_rust_proto",
"//rust/test:parent_cc_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "edition2023_cpp_test",
+ srcs = ["edition2023_test.rs"],
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust/test:edition2023_cc_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "edition2023_upb_test",
+ srcs = ["edition2023_test.rs"],
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust/test:edition2023_upb_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "enum_cpp_test",
+ srcs = ["enum_test.rs"],
+ aliases = {
+ "//rust:protobuf_cpp": "protobuf",
+ },
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust:protobuf_cpp",
+ "//rust/test:enums_cc_rust_proto",
+ "//rust/test:unittest_cc_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "enum_upb_test",
+ srcs = ["enum_test.rs"],
+ aliases = {
+ "//rust:protobuf_upb": "protobuf",
+ },
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust:protobuf_upb",
+ "//rust/test:enums_upb_rust_proto",
+ "//rust/test:unittest_upb_rust_proto",
+ "@crate_index//:googletest",
],
)
@@ -104,9 +166,9 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust/test:reserved_cc_rust_proto",
"//rust/test:unittest_cc_rust_proto",
+ "@crate_index//:googletest",
],
)
@@ -118,9 +180,9 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust/test:reserved_upb_rust_proto",
"//rust/test:unittest_upb_rust_proto",
+ "@crate_index//:googletest",
],
)
@@ -159,10 +221,10 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust:protobuf_cpp",
"//rust/test:unittest_cc_rust_proto",
"//rust/test/shared:matchers_cpp",
+ "@crate_index//:googletest",
],
)
@@ -181,10 +243,10 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust:protobuf_upb",
"//rust/test:unittest_upb_rust_proto",
"//rust/test/shared:matchers_upb",
+ "@crate_index//:googletest",
],
)
@@ -200,11 +262,11 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust:protobuf_cpp",
"//rust/test:unittest_proto3_cc_rust_proto",
"//rust/test:unittest_proto3_optional_cc_rust_proto",
"//rust/test/shared:matchers_cpp",
+ "@crate_index//:googletest",
],
)
@@ -220,11 +282,11 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust:protobuf_upb",
"//rust/test:unittest_proto3_optional_upb_rust_proto",
"//rust/test:unittest_proto3_upb_rust_proto",
"//rust/test/shared:matchers_upb",
+ "@crate_index//:googletest",
],
)
@@ -236,8 +298,8 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust/test:unittest_upb_rust_proto",
+ "@crate_index//:googletest",
],
)
@@ -249,8 +311,8 @@
"not_build:arm",
],
deps = [
- "@crate_index//:googletest",
"//rust/test:unittest_cc_rust_proto",
+ "@crate_index//:googletest",
],
)
@@ -261,7 +323,10 @@
# TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
"not_build:arm",
],
- deps = ["//rust/test:nested_cc_rust_proto"],
+ deps = [
+ "//rust/test:nested_cc_rust_proto",
+ "@crate_index//:googletest",
+ ],
)
rust_test(
@@ -271,7 +336,66 @@
# TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
"not_build:arm",
],
- deps = ["//rust/test:nested_upb_rust_proto"],
+ deps = [
+ "//rust/test:nested_upb_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "accessors_repeated_cpp_test",
+ srcs = ["accessors_repeated_test.rs"],
+ aliases = {
+ "//rust:protobuf_cpp": "protobuf",
+ },
+ proc_macro_deps = [
+ "@crate_index//:paste",
+ ],
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust:protobuf_cpp",
+ "//rust/test:unittest_cc_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "accessors_repeated_upb_test",
+ srcs = ["accessors_repeated_test.rs"],
+ aliases = {
+ "//rust:protobuf_upb": "protobuf",
+ },
+ proc_macro_deps = [
+ "@crate_index//:paste",
+ ],
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust:protobuf_upb",
+ "//rust/test:unittest_upb_rust_proto",
+ "@crate_index//:googletest",
+ ],
+)
+
+rust_test(
+ name = "accessors_map_cpp_test",
+ srcs = ["accessors_map_test.rs"],
+ proc_macro_deps = [
+ "@crate_index//:paste",
+ ],
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
+ deps = [
+ "//rust/test:map_unittest_cc_rust_proto",
+ "@crate_index//:googletest",
+ ],
)
rust_test(
@@ -280,8 +404,12 @@
proc_macro_deps = [
"@crate_index//:paste",
],
+ tags = [
+ # TODO: Enable testing on arm once we support sanitizers for Rust on Arm.
+ "not_build:arm",
+ ],
deps = [
- "@crate_index//:googletest",
"//rust/test:map_unittest_upb_rust_proto",
+ "@crate_index//:googletest",
],
)
diff --git a/rust/test/shared/accessors_map_test.rs b/rust/test/shared/accessors_map_test.rs
index a401d94..ecdd35a 100644
--- a/rust/test/shared/accessors_map_test.rs
+++ b/rust/test/shared/accessors_map_test.rs
@@ -41,3 +41,15 @@
(i32, f64, int32, double),
(bool, bool, bool, bool)
);
+
+#[test]
+fn test_string_maps() {
+ let mut msg = TestMap::new();
+ msg.map_string_string_mut().insert("hello", "world".into());
+ msg.map_string_string_mut().insert("fizz", "buzz".into());
+ assert_that!(msg.map_string_string().len(), eq(2));
+ assert_that!(msg.map_string_string().get("fizz").unwrap(), eq("buzz"));
+ assert_that!(msg.map_string_string().get("not found"), eq(None));
+ msg.map_string_string_mut().clear();
+ assert_that!(msg.map_string_string().len(), eq(0));
+}
diff --git a/rust/test/shared/accessors_proto3_test.rs b/rust/test/shared/accessors_proto3_test.rs
index 3378ba6..4369ae2 100644
--- a/rust/test/shared/accessors_proto3_test.rs
+++ b/rust/test/shared/accessors_proto3_test.rs
@@ -23,7 +23,7 @@
assert_that!(msg.optional_fixed32_mut().get(), eq(42));
assert_that!(msg.optional_fixed32(), eq(42));
- msg.optional_fixed32_mut().clear();
+ msg.optional_fixed32_mut().set(u32::default());
assert_that!(msg.optional_fixed32(), eq(0));
assert_that!(msg.optional_fixed32_mut().get(), eq(0));
}
@@ -38,7 +38,7 @@
assert_that!(msg.optional_bool(), eq(true));
assert_that!(msg.optional_bool_mut().get(), eq(true));
- msg.optional_bool_mut().clear();
+ msg.optional_bool_mut().set(bool::default());
assert_that!(msg.optional_bool(), eq(false));
assert_that!(msg.optional_bool_mut().get(), eq(false));
}
@@ -191,19 +191,31 @@
let mut msg = TestAllTypes::new();
assert_that!(msg.oneof_field(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
assert_that!(msg.oneof_uint32_opt(), eq(Optional::Set(7)));
assert_that!(msg.oneof_field(), matches_pattern!(OneofUint32(eq(7))));
- msg.oneof_uint32_set(None);
+ msg.oneof_uint32_mut().clear();
assert_that!(msg.oneof_uint32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.oneof_field(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ // TODO: the submessage api is still in progress so we can't yet
+ // cause a submsg to be set here.
+
+ // msg.oneof_nested_message_mut().or_default(); // Cause the nested_message
+ // field to become set.
+
+ // assert_that!(msg.oneof_bytes_opt(),
+ // eq(Optional::Unset(_))); assert_that!(msg.oneof_field(),
+ // matches_pattern!(OneofNestedMessage(_)));
+
+ msg.oneof_uint32_mut().set(7);
msg.oneof_bytes_mut().set(b"123");
assert_that!(msg.oneof_uint32_opt(), eq(Optional::Unset(0)));
-
assert_that!(msg.oneof_field(), matches_pattern!(OneofBytes(eq(b"123"))));
+
+ msg.oneof_bytes_mut().clear();
+ assert_that!(msg.oneof_field(), matches_pattern!(not_set(_)));
}
#[test]
@@ -213,13 +225,13 @@
let mut msg = TestAllTypes::new();
assert_that!(msg.oneof_field_mut(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
match msg.oneof_field_mut() {
OneofUint32(mut v) => {
- assert_eq!(v.get(), 7);
+ assert_that!(v.get(), eq(7));
v.set(8);
- assert_eq!(v.get(), 8);
+ assert_that!(v.get(), eq(8));
}
f => panic!("unexpected field_mut type! {:?}", f),
}
@@ -232,10 +244,10 @@
matches_pattern!(TestAllTypes_::OneofField::OneofUint32(eq(8)))
);
- msg.oneof_uint32_set(None);
+ msg.oneof_uint32_mut().clear();
assert_that!(msg.oneof_field_mut(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
msg.oneof_bytes_mut().set(b"123");
assert_that!(msg.oneof_field_mut(), matches_pattern!(OneofBytes(_)));
}
diff --git a/rust/test/shared/accessors_repeated_test.rs b/rust/test/shared/accessors_repeated_test.rs
new file mode 100644
index 0000000..1f44a52
--- /dev/null
+++ b/rust/test/shared/accessors_repeated_test.rs
@@ -0,0 +1,123 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+use googletest::prelude::*;
+use paste::paste;
+use unittest_proto::proto2_unittest::TestAllTypes;
+
+macro_rules! generate_repeated_numeric_test {
+ ($(($t: ty, $field: ident)),*) => {
+ paste! { $(
+ #[test]
+ fn [< test_repeated_ $field _accessors >]() {
+ let mut msg = TestAllTypes::new();
+ assert_that!(msg.[< repeated_ $field >]().len(), eq(0));
+ assert_that!(msg.[<repeated_ $field >]().get(0), none());
+
+ let mut mutator = msg.[<repeated_ $field _mut >]();
+ mutator.push(1 as $t);
+ assert_that!(mutator.len(), eq(1));
+ assert_that!(mutator.iter().len(), eq(1));
+ assert_that!(mutator.get(0), some(eq(1 as $t)));
+ mutator.set(0, 2 as $t);
+ assert_that!(mutator.get(0), some(eq(2 as $t)));
+ mutator.push(1 as $t);
+
+ mutator.push(3 as $t);
+ mutator.set(2, 4 as $t);
+ assert_that!(mutator.get(2), some(eq(4 as $t)));
+ mutator.set(2, 0 as $t);
+
+ assert_that!(
+ mutator.iter().collect::<Vec<_>>(),
+ eq(vec![2 as $t, 1 as $t, 0 as $t])
+ );
+ assert_that!(
+ (*mutator).into_iter().collect::<Vec<_>>(),
+ eq(vec![2 as $t, 1 as $t, 0 as $t])
+ );
+
+ for i in 0..mutator.len() {
+ mutator.set(i, 0 as $t);
+ }
+ assert_that!(
+ msg.[<repeated_ $field _mut >]().iter().all(|v| v == (0 as $t)),
+ eq(true)
+ );
+ }
+
+ #[test]
+ fn [< test_repeated_ $field _set >]() {
+ let mut msg = TestAllTypes::new();
+ let mut mutator = msg.[<repeated_ $field _mut>]();
+ let mut msg2 = TestAllTypes::new();
+ let mut mutator2 = msg2.[<repeated_ $field _mut>]();
+ for i in 0..5 {
+ mutator2.push(i as $t);
+ }
+ protobuf::MutProxy::set(&mut mutator, *mutator2);
+
+ assert_that!(
+ mutator.iter().collect::<Vec<_>>(),
+ eq(mutator2.iter().collect::<Vec<_>>())
+ );
+ }
+ )* }
+ };
+}
+
+generate_repeated_numeric_test!(
+ (i32, int32),
+ (u32, uint32),
+ (i64, int64),
+ (u64, uint64),
+ (f32, float),
+ (f64, double)
+);
+
+#[test]
+fn test_repeated_bool_accessors() {
+ let mut msg = TestAllTypes::new();
+ assert_that!(msg.repeated_bool().len(), eq(0));
+ assert_that!(msg.repeated_bool().get(0), none());
+
+ let mut mutator = msg.repeated_bool_mut();
+ mutator.push(true);
+ assert_that!(mutator.len(), eq(1));
+ assert_that!(mutator.get(0), some(eq(true)));
+ mutator.set(0, false);
+ assert_that!(mutator.get(0), some(eq(false)));
+ mutator.push(true);
+
+ mutator.push(false);
+ mutator.set(2, true);
+ assert_that!(mutator.get(2), some(eq(true)));
+ mutator.set(2, false);
+ assert_that!(mutator.get(2), some(eq(false)));
+
+ assert_that!(mutator.iter().collect::<Vec<_>>(), eq(vec![false, true, false]));
+ assert_that!((*mutator).into_iter().collect::<Vec<_>>(), eq(vec![false, true, false]));
+
+ for i in 0..mutator.len() {
+ mutator.set(i, false);
+ }
+ assert_that!(msg.repeated_bool().iter().all(|v| v), eq(false));
+}
+
+#[test]
+fn test_repeated_bool_set() {
+ let mut msg = TestAllTypes::new();
+ let mut mutator = msg.repeated_bool_mut();
+ let mut msg2 = TestAllTypes::new();
+ let mut mutator2 = msg2.repeated_bool_mut();
+ for _ in 0..5 {
+ mutator2.push(true);
+ }
+ protobuf::MutProxy::set(&mut mutator, *mutator2);
+
+ assert_that!(mutator.iter().collect::<Vec<_>>(), eq(mutator2.iter().collect::<Vec<_>>()));
+}
diff --git a/rust/test/shared/accessors_test.rs b/rust/test/shared/accessors_test.rs
index e5949ff..289f376 100644
--- a/rust/test/shared/accessors_test.rs
+++ b/rust/test/shared/accessors_test.rs
@@ -9,9 +9,8 @@
use googletest::prelude::*;
use matchers::{is_set, is_unset};
-use paste::paste;
use protobuf::Optional;
-use unittest_proto::proto2_unittest::{TestAllTypes, TestAllTypes_};
+use unittest_proto::proto2_unittest::{NestedTestAllTypes, TestAllTypes, TestAllTypes_};
#[test]
fn test_default_accessors() {
@@ -34,6 +33,8 @@
default_bool(): eq(true),
})
);
+ assert_that!(msg.default_string(), eq("hello"));
+ assert_that!(msg.default_bytes(), eq("world".as_bytes()));
}
#[test]
@@ -42,11 +43,11 @@
assert_that!(msg.optional_fixed32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_fixed32(), eq(0));
- msg.optional_fixed32_set(Some(99));
+ msg.optional_fixed32_mut().set(99);
assert_that!(msg.optional_fixed32_opt(), eq(Optional::Set(99)));
assert_that!(msg.optional_fixed32(), eq(99));
- msg.optional_fixed32_set(None);
+ msg.optional_fixed32_mut().clear();
assert_that!(msg.optional_fixed32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_fixed32(), eq(0));
}
@@ -84,11 +85,11 @@
assert_that!(msg.optional_fixed64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_fixed64(), eq(0));
- msg.optional_fixed64_set(Some(2000));
+ msg.optional_fixed64_mut().set(2000);
assert_that!(msg.optional_fixed64_opt(), eq(Optional::Set(2000)));
assert_that!(msg.optional_fixed64(), eq(2000));
- msg.optional_fixed64_set(None);
+ msg.optional_fixed64_mut().clear();
assert_that!(msg.optional_fixed64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_fixed64(), eq(0));
}
@@ -126,11 +127,11 @@
assert_that!(msg.optional_int32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_int32(), eq(0));
- msg.optional_int32_set(Some(1));
+ msg.optional_int32_mut().set(1);
assert_that!(msg.optional_int32_opt(), eq(Optional::Set(1)));
assert_that!(msg.optional_int32(), eq(1));
- msg.optional_int32_set(None);
+ msg.optional_int32_mut().clear();
assert_that!(msg.optional_int32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_int32(), eq(0));
}
@@ -168,11 +169,11 @@
assert_that!(msg.optional_int64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_int64(), eq(0));
- msg.optional_int64_set(Some(42));
+ msg.optional_int64_mut().set(42);
assert_that!(msg.optional_int64_opt(), eq(Optional::Set(42)));
assert_that!(msg.optional_int64(), eq(42));
- msg.optional_int64_set(None);
+ msg.optional_int64_mut().clear();
assert_that!(msg.optional_int64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_int64(), eq(0));
}
@@ -210,11 +211,11 @@
assert_that!(msg.optional_sint32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_sint32(), eq(0));
- msg.optional_sint32_set(Some(-22));
+ msg.optional_sint32_mut().set(-22);
assert_that!(msg.optional_sint32_opt(), eq(Optional::Set(-22)));
assert_that!(msg.optional_sint32(), eq(-22));
- msg.optional_sint32_set(None);
+ msg.optional_sint32_mut().clear();
assert_that!(msg.optional_sint32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_sint32(), eq(0));
}
@@ -252,11 +253,11 @@
assert_that!(msg.optional_sint64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_sint64(), eq(0));
- msg.optional_sint64_set(Some(7000));
+ msg.optional_sint64_mut().set(7000);
assert_that!(msg.optional_sint64_opt(), eq(Optional::Set(7000)));
assert_that!(msg.optional_sint64(), eq(7000));
- msg.optional_sint64_set(None);
+ msg.optional_sint64_mut().clear();
assert_that!(msg.optional_sint64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_sint64(), eq(0));
}
@@ -294,11 +295,11 @@
assert_that!(msg.optional_uint32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_uint32(), eq(0));
- msg.optional_uint32_set(Some(9001));
+ msg.optional_uint32_mut().set(9001);
assert_that!(msg.optional_uint32_opt(), eq(Optional::Set(9001)));
assert_that!(msg.optional_uint32(), eq(9001));
- msg.optional_uint32_set(None);
+ msg.optional_uint32_mut().clear();
assert_that!(msg.optional_uint32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_uint32(), eq(0));
}
@@ -336,11 +337,11 @@
assert_that!(msg.optional_uint64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_uint64(), eq(0));
- msg.optional_uint64_set(Some(42));
+ msg.optional_uint64_mut().set(42);
assert_that!(msg.optional_uint64_opt(), eq(Optional::Set(42)));
assert_that!(msg.optional_uint64(), eq(42));
- msg.optional_uint64_set(None);
+ msg.optional_uint64_mut().clear();
assert_that!(msg.optional_uint64_opt(), eq(Optional::Unset(0)));
assert_that!(msg.optional_uint64(), eq(0));
}
@@ -378,11 +379,11 @@
assert_that!(msg.optional_float_opt(), eq(Optional::Unset(0.0)));
assert_that!(msg.optional_float(), eq(0.0));
- msg.optional_float_set(Some(std::f32::consts::PI));
+ msg.optional_float_mut().set(std::f32::consts::PI);
assert_that!(msg.optional_float_opt(), eq(Optional::Set(std::f32::consts::PI)));
assert_that!(msg.optional_float(), eq(std::f32::consts::PI));
- msg.optional_float_set(None);
+ msg.optional_float_mut().clear();
assert_that!(msg.optional_float_opt(), eq(Optional::Unset(0.0)));
assert_that!(msg.optional_float(), eq(0.0));
}
@@ -420,11 +421,11 @@
assert_that!(msg.optional_double_opt(), eq(Optional::Unset(0.0)));
assert_that!(msg.optional_double(), eq(0.0));
- msg.optional_double_set(Some(-10.99));
+ msg.optional_double_mut().set(-10.99);
assert_that!(msg.optional_double_opt(), eq(Optional::Set(-10.99)));
assert_that!(msg.optional_double(), eq(-10.99));
- msg.optional_double_set(None);
+ msg.optional_double_mut().clear();
assert_that!(msg.optional_double_opt(), eq(Optional::Unset(0.0)));
assert_that!(msg.optional_double(), eq(0.0));
}
@@ -461,10 +462,10 @@
let mut msg = TestAllTypes::new();
assert_that!(msg.optional_bool_opt(), eq(Optional::Unset(false)));
- msg.optional_bool_set(Some(true));
+ msg.optional_bool_mut().set(true);
assert_that!(msg.optional_bool_opt(), eq(Optional::Set(true)));
- msg.optional_bool_set(None);
+ msg.optional_bool_mut().clear();
assert_that!(msg.optional_bool_opt(), eq(Optional::Unset(false)));
}
@@ -667,11 +668,16 @@
#[test]
fn test_singular_msg_field() {
- use crate::TestAllTypes_::NestedMessageView;
- let msg = TestAllTypes::new();
- // TODO: fetch the inner integer `bb`
- // call should look like msg.optional_nested_message().bb()
- let _msg: NestedMessageView = msg.optional_nested_message();
+ use crate::TestAllTypes_::{NestedMessageMut, NestedMessageView};
+
+ let mut msg = TestAllTypes::new();
+ let msg_view: NestedMessageView = msg.optional_nested_message();
+ // testing reading an int inside a view
+ assert_that!(msg_view.bb(), eq(0));
+
+ let msg_mut: NestedMessageMut = msg.optional_nested_message_mut();
+ // test reading an int inside a mut
+ assert_that!(msg_mut.bb(), eq(0));
}
#[test]
@@ -681,15 +687,15 @@
let mut msg = TestAllTypes::new();
assert_that!(msg.oneof_field(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
assert_that!(msg.oneof_uint32_opt(), eq(Optional::Set(7)));
assert_that!(msg.oneof_field(), matches_pattern!(OneofUint32(eq(7))));
- msg.oneof_uint32_set(None);
+ msg.oneof_uint32_mut().clear();
assert_that!(msg.oneof_uint32_opt(), eq(Optional::Unset(0)));
assert_that!(msg.oneof_field(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
msg.oneof_bytes_mut().set(b"123");
assert_that!(msg.oneof_uint32_opt(), eq(Optional::Unset(0)));
@@ -703,13 +709,13 @@
let mut msg = TestAllTypes::new();
assert_that!(msg.oneof_field_mut(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
match msg.oneof_field_mut() {
OneofUint32(mut v) => {
- assert_eq!(v.get(), 7);
+ assert_that!(v.get(), eq(7));
v.set(8);
- assert_eq!(v.get(), 8);
+ assert_that!(v.get(), eq(8));
}
f => panic!("unexpected field_mut type! {:?}", f),
}
@@ -722,127 +728,22 @@
matches_pattern!(TestAllTypes_::OneofField::OneofUint32(eq(8)))
);
- msg.oneof_uint32_set(None);
+ msg.oneof_uint32_mut().clear();
assert_that!(msg.oneof_field_mut(), matches_pattern!(not_set(_)));
- msg.oneof_uint32_set(Some(7));
+ msg.oneof_uint32_mut().set(7);
msg.oneof_bytes_mut().set(b"123");
assert_that!(msg.oneof_field_mut(), matches_pattern!(OneofBytes(_)));
}
-macro_rules! generate_repeated_numeric_test {
- ($(($t: ty, $field: ident)),*) => {
- paste! { $(
- #[test]
- fn [< test_repeated_ $field _accessors >]() {
- let mut msg = TestAllTypes::new();
- assert_that!(msg.[< repeated_ $field >]().len(), eq(0));
- assert_that!(msg.[<repeated_ $field >]().get(0), none());
-
- let mut mutator = msg.[<repeated_ $field _mut >]();
- mutator.push(1 as $t);
- assert_that!(mutator.len(), eq(1));
- assert_that!(mutator.get(0), some(eq(1 as $t)));
- mutator.set(0, 2 as $t);
- assert_that!(mutator.get(0), some(eq(2 as $t)));
- mutator.push(1 as $t);
-
- mutator.push(3 as $t);
- assert_that!(mutator.get_mut(2).is_some(), eq(true));
- let mut mut_elem = mutator.get_mut(2).unwrap();
- mut_elem.set(4 as $t);
- assert_that!(mut_elem.get(), eq(4 as $t));
- mut_elem.clear();
- assert_that!(mut_elem.get(), eq(0 as $t));
-
- assert_that!(
- mutator.iter().collect::<Vec<_>>(),
- eq(vec![2 as $t, 1 as $t, 0 as $t])
- );
- assert_that!(
- (*mutator).into_iter().collect::<Vec<_>>(),
- eq(vec![2 as $t, 1 as $t, 0 as $t])
- );
-
- for mut mutable_elem in msg.[<repeated_ $field _mut >]() {
- mutable_elem.set(0 as $t);
- }
- assert_that!(
- msg.[<repeated_ $field _mut >]().iter().all(|v| v == (0 as $t)),
- eq(true)
- );
- }
-
- #[test]
- fn [< test_repeated_ $field _set >]() {
- let mut msg = TestAllTypes::new();
- let mut mutator = msg.[<repeated_ $field _mut>]();
- let mut msg2 = TestAllTypes::new();
- let mut mutator2 = msg2.[<repeated_ $field _mut>]();
- for i in 0..5 {
- mutator2.push(i as $t);
- }
- protobuf::MutProxy::set(&mut mutator, *mutator2);
-
- assert_that!(
- mutator.iter().collect::<Vec<_>>(),
- eq(mutator2.iter().collect::<Vec<_>>())
- );
- }
- )* }
- };
-}
-
-generate_repeated_numeric_test!(
- (i32, int32),
- (u32, uint32),
- (i64, int64),
- (u64, uint64),
- (f32, float),
- (f64, double)
-);
-
#[test]
-fn test_repeated_bool_accessors() {
- let mut msg = TestAllTypes::new();
- assert_that!(msg.repeated_bool().len(), eq(0));
- assert_that!(msg.repeated_bool().get(0), none());
+fn test_set_message_from_view() {
+ use protobuf::MutProxy;
+ let mut m1 = NestedTestAllTypes::new();
- let mut mutator = msg.repeated_bool_mut();
- mutator.push(true);
- assert_that!(mutator.len(), eq(1));
- assert_that!(mutator.get(0), some(eq(true)));
- mutator.set(0, false);
- assert_that!(mutator.get(0), some(eq(false)));
- mutator.push(true);
+ let mut m2 = NestedTestAllTypes::new();
+ m2.payload_mut().optional_int32_mut().set(1);
- mutator.push(false);
- assert_that!(mutator.get_mut(2), pat!(Some(_)));
- let mut mut_elem = mutator.get_mut(2).unwrap();
- mut_elem.set(true);
- assert_that!(mut_elem.get(), eq(true));
- mut_elem.clear();
- assert_that!(mut_elem.get(), eq(false));
-
- assert_that!(mutator.iter().collect::<Vec<_>>(), eq(vec![false, true, false]));
- assert_that!((*mutator).into_iter().collect::<Vec<_>>(), eq(vec![false, true, false]));
-
- for mut mutable_elem in msg.repeated_bool_mut() {
- mutable_elem.set(false);
- }
- assert_that!(msg.repeated_bool().iter().all(|v| v), eq(false));
-}
-
-#[test]
-fn test_repeated_bool_set() {
- let mut msg = TestAllTypes::new();
- let mut mutator = msg.repeated_bool_mut();
- let mut msg2 = TestAllTypes::new();
- let mut mutator2 = msg2.repeated_bool_mut();
- for _ in 0..5 {
- mutator2.push(true);
- }
- protobuf::MutProxy::set(&mut mutator, *mutator2);
-
- assert_that!(mutator.iter().collect::<Vec<_>>(), eq(mutator2.iter().collect::<Vec<_>>()));
+ m1.payload_mut().set(m2.payload());
+ assert_that!(m1.payload().optional_int32(), eq(1));
}
diff --git a/rust/test/shared/edition2023_test.rs b/rust/test/shared/edition2023_test.rs
new file mode 100644
index 0000000..f5f631a
--- /dev/null
+++ b/rust/test/shared/edition2023_test.rs
@@ -0,0 +1,23 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+use googletest::prelude::*;
+
+// Tests that an proto file that declares edition="2023" works. Note that this
+// is _not_ a test for Rust Edition 2023 (which doesn't exist) but instead
+// Protobuf Edition 2023 (which exists).
+
+#[test]
+fn check_edition2023_works() {
+ let mut msg = edition2023_proto::test::EditionsMessage::new();
+
+ // plain_field supports presence.
+ assert_that!(msg.plain_field_mut().or_default().get(), eq(0));
+
+ // implicit presence fields' _mut() skips FieldEntry.
+ assert_that!(msg.implicit_presence_field_mut().get(), eq(0));
+}
diff --git a/rust/test/shared/enum_test.rs b/rust/test/shared/enum_test.rs
new file mode 100644
index 0000000..ced4c6c
--- /dev/null
+++ b/rust/test/shared/enum_test.rs
@@ -0,0 +1,213 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+//! Tests covering enum type generation.
+
+use enums_proto::enums;
+use googletest::prelude::*;
+use unittest_proto::proto2_unittest;
+
+#[test]
+fn test_nested_enum_values() {
+ assert_that!(i32::from(proto2_unittest::TestAllTypes_::NestedEnum::Foo), eq(1));
+ assert_that!(i32::from(proto2_unittest::TestAllTypes_::NestedEnum::Bar), eq(2));
+ assert_that!(i32::from(proto2_unittest::TestAllTypes_::NestedEnum::Baz), eq(3));
+ assert_that!(i32::from(proto2_unittest::TestAllTypes_::NestedEnum::Neg), eq(-1));
+}
+
+#[test]
+fn test_enum_value_name_same_as_enum() {
+ assert_that!(i32::from(enums::TestEnumValueNameSameAsEnum::TestEnumValueNameSameAsEnum), eq(1));
+}
+
+#[test]
+fn test_enum_defaults() {
+ assert_that!(
+ proto2_unittest::TestSparseEnum::default(),
+ eq(proto2_unittest::TestSparseEnum::SparseA)
+ );
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::default(),
+ eq(proto2_unittest::TestEnumWithDupValue::Foo1)
+ );
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::default(),
+ eq(proto2_unittest::TestEnumWithDupValue::Foo2)
+ );
+ assert_that!(
+ enums::TestEnumWithDuplicateStrippedPrefixNames::default(),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Unknown)
+ );
+ assert_that!(
+ proto2_unittest::TestAllTypes_::NestedEnum::default(),
+ eq(proto2_unittest::TestAllTypes_::NestedEnum::Foo)
+ );
+}
+
+#[test]
+#[deny(unreachable_patterns)]
+#[allow(clippy::let_unit_value)]
+fn test_closed_enum_is_nonexhaustive() {
+ let val = proto2_unittest::ForeignEnum::ForeignFoo;
+ let _it_compiles: () = match val {
+ proto2_unittest::ForeignEnum::ForeignFoo => (),
+ proto2_unittest::ForeignEnum::ForeignBar => (),
+ proto2_unittest::ForeignEnum::ForeignBaz => (),
+ proto2_unittest::ForeignEnum::ForeignBax => (),
+ _ => unreachable!(),
+ };
+}
+
+#[test]
+fn test_closed_enum_conversion() {
+ assert_that!(i32::from(proto2_unittest::TestSparseEnum::SparseA), eq(123));
+ assert_that!(
+ proto2_unittest::TestSparseEnum::try_from(123),
+ ok(eq(proto2_unittest::TestSparseEnum::SparseA))
+ );
+
+ assert_that!(i32::from(proto2_unittest::TestSparseEnum::SparseD), eq(-15));
+ assert_that!(
+ proto2_unittest::TestSparseEnum::try_from(-15),
+ ok(eq(proto2_unittest::TestSparseEnum::SparseD))
+ );
+
+ assert_that!(
+ proto2_unittest::TestSparseEnum::try_from(0),
+ ok(eq(proto2_unittest::TestSparseEnum::SparseF))
+ );
+ assert_that!(proto2_unittest::TestSparseEnum::try_from(1), err(anything()));
+}
+
+#[test]
+fn test_closed_aliased_enum_conversion() {
+ assert_that!(i32::from(proto2_unittest::TestEnumWithDupValue::Foo1), eq(1));
+ assert_that!(i32::from(proto2_unittest::TestEnumWithDupValue::Foo2), eq(1));
+ assert_that!(i32::from(proto2_unittest::TestEnumWithDupValue::Bar1), eq(2));
+ assert_that!(i32::from(proto2_unittest::TestEnumWithDupValue::Bar2), eq(2));
+ assert_that!(i32::from(proto2_unittest::TestEnumWithDupValue::Baz), eq(3));
+
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::try_from(1),
+ ok(eq(proto2_unittest::TestEnumWithDupValue::Foo1))
+ );
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::try_from(2),
+ ok(eq(proto2_unittest::TestEnumWithDupValue::Bar1))
+ );
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::try_from(3),
+ ok(eq(proto2_unittest::TestEnumWithDupValue::Baz))
+ );
+ assert_that!(proto2_unittest::TestEnumWithDupValue::try_from(0), err(anything()));
+ assert_that!(proto2_unittest::TestEnumWithDupValue::try_from(4), err(anything()));
+
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::Foo1,
+ eq(proto2_unittest::TestEnumWithDupValue::Foo2)
+ );
+ assert_that!(
+ proto2_unittest::TestEnumWithDupValue::Bar1,
+ eq(proto2_unittest::TestEnumWithDupValue::Bar2)
+ );
+}
+
+#[test]
+#[deny(unreachable_patterns)]
+#[allow(clippy::let_unit_value)]
+fn test_open_enum_is_nonexhaustive() {
+ let val = enums::TestEnumValueNameSameAsEnum::Unknown;
+ let _it_compiles: () = match val {
+ enums::TestEnumValueNameSameAsEnum::Unknown => (),
+ enums::TestEnumValueNameSameAsEnum::TestEnumValueNameSameAsEnum => (),
+ _ => unreachable!(),
+ };
+}
+
+#[test]
+fn test_open_enum_conversion() {
+ assert_that!(i32::from(enums::TestEnumWithNumericNames::Unknown), eq(0));
+ assert_that!(i32::from(enums::TestEnumWithNumericNames::_2020), eq(1));
+ assert_that!(i32::from(enums::TestEnumWithNumericNames::_2021), eq(2));
+ assert_that!(i32::from(enums::TestEnumWithNumericNames::_2022), eq(3));
+
+ assert_that!(
+ enums::TestEnumWithNumericNames::from(0),
+ eq(enums::TestEnumWithNumericNames::Unknown)
+ );
+ assert_that!(
+ enums::TestEnumWithNumericNames::from(1),
+ eq(enums::TestEnumWithNumericNames::_2020)
+ );
+ assert_that!(
+ enums::TestEnumWithNumericNames::from(2),
+ eq(enums::TestEnumWithNumericNames::_2021)
+ );
+ assert_that!(
+ enums::TestEnumWithNumericNames::from(3),
+ eq(enums::TestEnumWithNumericNames::_2022)
+ );
+ assert_that!(
+ enums::TestEnumWithNumericNames::from(4),
+ not(any![
+ eq(enums::TestEnumWithNumericNames::Unknown),
+ eq(enums::TestEnumWithNumericNames::_2020),
+ eq(enums::TestEnumWithNumericNames::_2021),
+ eq(enums::TestEnumWithNumericNames::_2022),
+ ])
+ );
+ assert_that!(i32::from(enums::TestEnumWithNumericNames::from(-1)), eq(-1));
+}
+
+#[test]
+fn test_open_aliased_enum_conversion() {
+ assert_that!(i32::from(enums::TestEnumWithDuplicateStrippedPrefixNames::Unknown), eq(0));
+ assert_that!(i32::from(enums::TestEnumWithDuplicateStrippedPrefixNames::Foo), eq(1));
+ assert_that!(i32::from(enums::TestEnumWithDuplicateStrippedPrefixNames::Bar), eq(2));
+ assert_that!(
+ i32::from(enums::TestEnumWithDuplicateStrippedPrefixNames::DifferentNameAlias),
+ eq(2)
+ );
+
+ assert_that!(
+ enums::TestEnumWithDuplicateStrippedPrefixNames::from(0),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Unknown)
+ );
+ assert_that!(
+ enums::TestEnumWithDuplicateStrippedPrefixNames::from(1),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Foo)
+ );
+ assert_that!(
+ enums::TestEnumWithDuplicateStrippedPrefixNames::from(2),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Bar)
+ );
+ assert_that!(
+ enums::TestEnumWithDuplicateStrippedPrefixNames::from(2),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::DifferentNameAlias)
+ );
+ assert_that!(
+ enums::TestEnumWithDuplicateStrippedPrefixNames::from(3),
+ not(any![
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Unknown),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Foo),
+ eq(enums::TestEnumWithDuplicateStrippedPrefixNames::Bar),
+ ])
+ );
+ assert_that!(i32::from(enums::TestEnumWithDuplicateStrippedPrefixNames::from(5)), eq(5));
+}
+
+#[test]
+fn test_enum_conversion_failure_display() {
+ let err = proto2_unittest::TestSparseEnum::try_from(1).unwrap_err();
+ assert_that!(format!("{err}"), eq("1 is not a known value for TestSparseEnum"));
+}
+
+#[test]
+fn test_enum_conversion_failure_impls_std_error() {
+ let err = proto2_unittest::TestSparseEnum::try_from(1).unwrap_err();
+ let _test_compiles: &dyn std::error::Error = &err;
+}
diff --git a/rust/test/shared/serialization_test.rs b/rust/test/shared/serialization_test.rs
index b5600bb..2ac49b9 100644
--- a/rust/test/shared/serialization_test.rs
+++ b/rust/test/shared/serialization_test.rs
@@ -11,8 +11,8 @@
#[test]
fn serialize_deserialize_message() {
let mut msg = TestAllTypes::new();
- msg.optional_int64_set(Some(42));
- msg.optional_bool_set(Some(true));
+ msg.optional_int64_mut().set(42);
+ msg.optional_bool_mut().set(true);
msg.optional_bytes_mut().set(b"serialize deserialize test");
let serialized = msg.serialize();
@@ -37,3 +37,13 @@
let data = b"not a serialized proto";
assert!(msg.deserialize(&*data).is_err());
}
+
+#[test]
+fn set_bytes_with_serialized_data() {
+ let mut msg = TestAllTypes::new();
+ msg.optional_int64_mut().set(42);
+ msg.optional_bool_mut().set(true);
+ let mut msg2 = TestAllTypes::new();
+ msg2.optional_bytes_mut().set(msg.serialize());
+ assert_that!(msg2.optional_bytes(), eq(msg.serialize().as_ref()));
+}
diff --git a/rust/test/shared/simple_nested_test.rs b/rust/test/shared/simple_nested_test.rs
index daa654c..c0932d3 100644
--- a/rust/test/shared/simple_nested_test.rs
+++ b/rust/test/shared/simple_nested_test.rs
@@ -5,21 +5,114 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+use googletest::prelude::*;
use nested_proto::nest::Outer;
-
-#[test]
-fn test_simple_nested_proto() {
- let outer_msg = Outer::new();
- assert_eq!(outer_msg.inner().num(), 0);
- assert!(!outer_msg.inner().boolean());
-}
+use nested_proto::nest::Outer_::InnerMut;
+use nested_proto::nest::Outer_::InnerView;
#[test]
fn test_deeply_nested_definition() {
let deep = nested_proto::nest::Outer_::Inner_::SuperInner_::DuperInner_::EvenMoreInner_
::CantBelieveItsSoInner::new();
- assert_eq!(deep.num(), 0);
+ assert_that!(deep.num(), eq(0));
let outer_msg = Outer::new();
- assert_eq!(outer_msg.deep().num(), 0);
+ assert_that!(outer_msg.deep().num(), eq(0));
+}
+
+#[test]
+fn test_nested_views() {
+ let outer_msg = Outer::new();
+ let inner_msg: InnerView<'_> = outer_msg.inner();
+ assert_that!(inner_msg.double(), eq(0.0));
+ assert_that!(inner_msg.float(), eq(0.0));
+ assert_that!(inner_msg.int32(), eq(0));
+ assert_that!(inner_msg.int64(), eq(0));
+ assert_that!(inner_msg.uint32(), eq(0));
+ assert_that!(inner_msg.uint64(), eq(0));
+ assert_that!(inner_msg.sint32(), eq(0));
+ assert_that!(inner_msg.sint64(), eq(0));
+ assert_that!(inner_msg.fixed32(), eq(0));
+ assert_that!(inner_msg.fixed64(), eq(0));
+ assert_that!(inner_msg.sfixed32(), eq(0));
+ assert_that!(inner_msg.sfixed64(), eq(0));
+ assert_that!(inner_msg.bool(), eq(false));
+ assert_that!(*inner_msg.string().as_bytes(), empty());
+ assert_that!(*inner_msg.bytes(), empty());
+ assert_that!(inner_msg.innersubmsg().flag(), eq(false));
+}
+
+#[test]
+fn test_nested_muts() {
+ // Covers the setting of a mut and the following assertion
+ // confirming the new value. Replacement example:
+ // old:
+ // inner_msg.double_mut().set(543.21);
+ // assert_that!(inner_msg.double_mut().get(), eq(543.21));
+ // new:
+ // set_and_test_mut!(inner_msg => double_mut, 543.21);
+ macro_rules! set_and_test_mut {
+ ( $a:expr => $($target_mut:ident, $val:literal;)* ) => {
+ $(
+ $a.$target_mut().set($val);
+ assert_that!($a.$target_mut().get(), eq($val));
+ )*
+ };
+}
+
+ let mut outer_msg = Outer::new();
+ let inner_msg: InnerMut<'_> = outer_msg.inner_mut();
+ assert_that!(
+ inner_msg,
+ matches_pattern!(InnerMut{
+ float(): eq(0.0),
+ double(): eq(0.0),
+ int32(): eq(0),
+ int64(): eq(0),
+ uint32(): eq(0),
+ uint64(): eq(0),
+ sint32(): eq(0),
+ sint64(): eq(0),
+ fixed32(): eq(0),
+ fixed64(): eq(0),
+ sfixed32(): eq(0),
+ sfixed64(): eq(0),
+ bool(): eq(false)
+ })
+ );
+ assert_that!(inner_msg.string_mut().get(), eq(""));
+ assert_that!(inner_msg.bytes_mut().get(), eq(b""));
+
+ set_and_test_mut!(inner_msg =>
+ double_mut, 543.21;
+ float_mut, 1.23;
+ int32_mut, 12;
+ int64_mut, 42;
+ uint32_mut, 13;
+ uint64_mut, 5000;
+ sint32_mut, -2;
+ sint64_mut, 322;
+ fixed32_mut, 77;
+ fixed64_mut, 999;
+ bool_mut, true;
+ string_mut, "hi";
+ bytes_mut, b"bye";
+ );
+}
+
+#[test]
+fn test_msg_from_outside() {
+ // let's make sure that we're not just working for messages nested inside
+ // messages, messages from without and within should work
+ let outer = nested_proto::nest::Outer::new();
+ assert_that!(outer.notinside().num(), eq(0));
+}
+
+#[test]
+fn test_recursive_msg() {
+ let rec = nested_proto::nest::Recursive::new();
+ assert_that!(rec.num(), eq(0));
+ assert_that!(rec.rec().num(), eq(0));
+ assert_that!(rec.rec().rec().num(), eq(0)); // turtles all the way down...
+ assert_that!(rec.rec().rec().rec().num(), eq(0)); // ... ad infinitum
}
diff --git a/rust/upb.rs b/rust/upb.rs
index dff07df..7b5af62 100644
--- a/rust/upb.rs
+++ b/rust/upb.rs
@@ -7,17 +7,24 @@
//! UPB FFI wrapper code for use by Rust Protobuf.
-use crate::__internal::{Private, PtrAndLen, RawArena, RawMap, RawMessage, RawRepeatedField};
+use crate::__internal::{Enum, Private, PtrAndLen, RawArena, RawMap, RawMessage, RawRepeatedField};
+use crate::{
+ Mut, ProtoStr, Proxied, ProxiedInRepeated, Repeated, RepeatedMut, RepeatedView, SettableValue,
+ View, ViewProxy,
+};
+use core::fmt::Debug;
+use paste::paste;
use std::alloc;
use std::alloc::Layout;
use std::cell::UnsafeCell;
+use std::ffi::c_int;
use std::fmt;
use std::marker::PhantomData;
-use std::mem::MaybeUninit;
+use std::mem::{size_of, MaybeUninit};
use std::ops::Deref;
use std::ptr::{self, NonNull};
use std::slice;
-use std::sync::Once;
+use std::sync::{Once, OnceLock};
/// See `upb/port/def.inc`.
const UPB_MALLOC_ALIGN: usize = 8;
@@ -210,11 +217,20 @@
}
}
+impl SettableValue<[u8]> for SerializedData {
+ fn set_on<'msg>(self, _private: Private, mut mutator: Mut<'msg, [u8]>)
+ where
+ [u8]: 'msg,
+ {
+ mutator.set(self.as_ref())
+ }
+}
+
// TODO: Investigate replacing this with direct access to UPB bits.
pub type BytesPresentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type BytesAbsentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type InnerBytesMut<'msg> = crate::vtable::RawVTableMutator<'msg, [u8]>;
-pub type InnerPrimitiveMut<'a, T> = crate::vtable::RawVTableMutator<'a, T>;
+pub type InnerPrimitiveMut<'msg, T> = crate::vtable::RawVTableMutator<'msg, T>;
/// The raw contents of every generated message.
#[derive(Debug)]
@@ -261,15 +277,27 @@
MutatorMessageRef { msg: msg.msg, arena: &msg.arena }
}
+ pub fn from_parent(
+ _private: Private,
+ parent_msg: &'msg mut MessageInner,
+ message_field_ptr: RawMessage,
+ ) -> Self {
+ MutatorMessageRef { msg: message_field_ptr, arena: &parent_msg.arena }
+ }
+
pub fn msg(&self) -> RawMessage {
self.msg
}
+
+ pub fn raw_arena(&self, _private: Private) -> RawArena {
+ self.arena.raw()
+ }
}
-pub fn copy_bytes_in_arena_if_needed_by_runtime<'a>(
- msg_ref: MutatorMessageRef<'a>,
- val: &'a [u8],
-) -> &'a [u8] {
+pub fn copy_bytes_in_arena_if_needed_by_runtime<'msg>(
+ msg_ref: MutatorMessageRef<'msg>,
+ val: &'msg [u8],
+) -> &'msg [u8] {
// SAFETY: the alignment of `[u8]` is less than `UPB_MALLOC_ALIGN`.
let new_alloc = unsafe { msg_ref.arena.alloc(Layout::for_value(val)) };
debug_assert_eq!(new_alloc.len(), val.len());
@@ -284,40 +312,50 @@
}
}
-/// RepeatedFieldInner contains a `upb_Array*` as well as a reference to an
-/// `Arena`, most likely that of the containing `Message`. upb requires an Arena
-/// to perform mutations on a repeated field.
+/// Opaque struct containing a upb_MiniTable.
+///
+/// This wrapper is a workaround until stabilization of [`extern type`].
+/// TODO: convert to extern type once stabilized.
+/// [`extern type`]: https://github.com/rust-lang/rust/issues/43467
+#[repr(C)]
+pub struct OpaqueMiniTable {
+ // TODO: consider importing a minitable struct declared in
+ // google3/third_party/upb/bits.
+ _data: [u8; 0],
+ _marker: std::marker::PhantomData<(*mut u8, ::std::marker::PhantomPinned)>,
+}
+
+extern "C" {
+ pub fn upb_Message_DeepCopy(
+ dst: RawMessage,
+ src: RawMessage,
+ mini_table: *const OpaqueMiniTable,
+ arena: RawArena,
+ );
+}
+
+/// The raw type-erased pointer version of `RepeatedMut`.
+///
+/// Contains a `upb_Array*` as well as `RawArena`, most likely that of the
+/// containing message. upb requires a `RawArena` to perform mutations on
+/// a repeated field.
+///
+/// An owned `Repeated` stores a `InnerRepeatedMut<'static>` and manages the
+/// contained `RawArena`.
#[derive(Clone, Copy, Debug)]
-pub struct RepeatedFieldInner<'msg> {
- pub raw: RawRepeatedField,
- pub arena: &'msg Arena,
+pub struct InnerRepeatedMut<'msg> {
+ pub(crate) raw: RawRepeatedField,
+ // Storing a `RawArena` instead of `&Arena` allows this to be used for
+ // both `RepeatedMut<T>` and `Repeated<T>`.
+ arena: RawArena,
+ _phantom: PhantomData<&'msg Arena>,
}
-#[derive(Debug)]
-pub struct RepeatedField<'msg, T: ?Sized> {
- inner: RepeatedFieldInner<'msg>,
- _phantom: PhantomData<&'msg mut T>,
-}
-
-// These use manual impls instead of derives to avoid unnecessary bounds on `T`.
-// This problem is referred to as "perfect derive".
-// https://smallcultfollowing.com/babysteps/blog/2022/04/12/implied-bounds-and-perfect-derive/
-impl<'msg, T: ?Sized> Copy for RepeatedField<'msg, T> {}
-impl<'msg, T: ?Sized> Clone for RepeatedField<'msg, T> {
- fn clone(&self) -> RepeatedField<'msg, T> {
- *self
- }
-}
-
-impl<'msg, T: ?Sized> RepeatedField<'msg, T> {
- pub fn len(&self) -> usize {
- unsafe { upb_Array_Size(self.inner.raw) }
- }
- pub fn is_empty(&self) -> bool {
- self.len() == 0
- }
- pub fn from_inner(_private: Private, inner: RepeatedFieldInner<'msg>) -> Self {
- Self { inner, _phantom: PhantomData }
+impl<'msg> InnerRepeatedMut<'msg> {
+ #[doc(hidden)]
+ #[allow(clippy::needless_pass_by_ref_mut)] // Sound construction requires mutable access.
+ pub fn new(_private: Private, raw: RawRepeatedField, arena: &'msg Arena) -> Self {
+ InnerRepeatedMut { raw, arena: arena.raw(), _phantom: PhantomData }
}
}
@@ -356,64 +394,76 @@
}
extern "C" {
- #[allow(dead_code)]
fn upb_Array_New(a: RawArena, r#type: std::ffi::c_int) -> RawRepeatedField;
fn upb_Array_Size(arr: RawRepeatedField) -> usize;
fn upb_Array_Set(arr: RawRepeatedField, i: usize, val: upb_MessageValue);
fn upb_Array_Get(arr: RawRepeatedField, i: usize) -> upb_MessageValue;
fn upb_Array_Append(arr: RawRepeatedField, val: upb_MessageValue, arena: RawArena);
- fn upb_Array_Resize(arr: RawRepeatedField, size: usize, arena: RawArena);
+ fn upb_Array_Resize(arr: RawRepeatedField, size: usize, arena: RawArena) -> bool;
+ fn upb_Array_MutableDataPtr(arr: RawRepeatedField) -> *mut std::ffi::c_void;
+ fn upb_Array_DataPtr(arr: RawRepeatedField) -> *const std::ffi::c_void;
}
macro_rules! impl_repeated_primitives {
- ($(($rs_type:ty, $union_field:ident, $upb_tag:expr)),*) => {
+ ($(($t:ty, $ufield:ident, $upb_tag:expr)),* $(,)?) => {
$(
- impl<'msg> RepeatedField<'msg, $rs_type> {
+ unsafe impl ProxiedInRepeated for $t {
#[allow(dead_code)]
- fn new(arena: &'msg Arena) -> Self {
- Self {
- inner: RepeatedFieldInner {
- raw: unsafe { upb_Array_New(arena.raw, $upb_tag as std::ffi::c_int) },
- arena,
- },
- _phantom: PhantomData,
+ fn repeated_new(_: Private) -> Repeated<$t> {
+ let arena = Arena::new();
+ let raw_arena = arena.raw();
+ std::mem::forget(arena);
+ unsafe {
+ Repeated::from_inner(InnerRepeatedMut {
+ raw: upb_Array_New(raw_arena, $upb_tag as c_int),
+ arena: raw_arena,
+ _phantom: PhantomData,
+ })
}
}
- pub fn push(&mut self, val: $rs_type) {
- unsafe { upb_Array_Append(
- self.inner.raw,
- upb_MessageValue { $union_field: val },
- self.inner.arena.raw(),
- ) }
- }
- pub fn get(&self, i: usize) -> Option<$rs_type> {
- if i >= self.len() {
- None
- } else {
- unsafe { Some(upb_Array_Get(self.inner.raw, i).$union_field) }
+ #[allow(dead_code)]
+ unsafe fn repeated_free(_: Private, f: &mut Repeated<$t>) {
+ // Freeing the array itself is handled by `Arena::Drop`
+ // SAFETY:
+ // - `f.raw_arena()` is a live `upb_Arena*` as
+ // - This function is only called once for `f`
+ unsafe {
+ upb_Arena_Free(f.inner().arena);
}
}
- pub fn set(&self, i: usize, val: $rs_type) {
- if i >= self.len() {
- return;
- }
- unsafe { upb_Array_Set(
- self.inner.raw,
- i,
- upb_MessageValue { $union_field: val },
- ) }
+ fn repeated_len(f: View<Repeated<$t>>) -> usize {
+ unsafe { upb_Array_Size(f.as_raw(Private)) }
}
- pub fn copy_from(&mut self, src: &RepeatedField<'_, $rs_type>) {
- // TODO: Optimize this copy_from implementation using memcopy.
- // NOTE: `src` cannot be `self` because this would violate borrowing rules.
- unsafe { upb_Array_Resize(self.inner.raw, 0, self.inner.arena.raw()) };
- // `upb_Array_DeepClone` is not used here because it returns
- // a new `upb_Array*`. The contained `RawRepeatedField` must
- // then be set to this new pointer, but other copies of this
- // pointer may exist because of re-borrowed `RepeatedMut`s.
- // Alternatively, a `clone_into` method could be exposed by upb.
- for i in 0..src.len() {
- self.push(src.get(i).unwrap());
+ fn repeated_push(mut f: Mut<Repeated<$t>>, v: View<$t>) {
+ unsafe {
+ upb_Array_Append(
+ f.as_raw(Private),
+ upb_MessageValue { $ufield: v },
+ f.raw_arena(Private))
+ }
+ }
+ fn repeated_clear(mut f: Mut<Repeated<$t>>) {
+ unsafe { upb_Array_Resize(f.as_raw(Private), 0, f.raw_arena(Private)); }
+ }
+ unsafe fn repeated_get_unchecked(f: View<Repeated<$t>>, i: usize) -> View<$t> {
+ unsafe { upb_Array_Get(f.as_raw(Private), i).$ufield }
+ }
+ unsafe fn repeated_set_unchecked(mut f: Mut<Repeated<$t>>, i: usize, v: View<$t>) {
+ unsafe { upb_Array_Set(f.as_raw(Private), i, upb_MessageValue { $ufield: v.into() }) }
+ }
+ fn repeated_copy_from(src: View<Repeated<$t>>, mut dest: Mut<Repeated<$t>>) {
+ // SAFETY:
+ // - `upb_Array_Resize` is unsafe but assumed to be always sound to call.
+ // - `copy_nonoverlapping` is unsafe but here we guarantee that both pointers
+ // are valid, the pointers are `#[repr(u8)]`, and the size is correct.
+ unsafe {
+ if (!upb_Array_Resize(dest.as_raw(Private), src.len(), dest.inner.arena)) {
+ panic!("upb_Array_Resize failed.");
+ }
+ ptr::copy_nonoverlapping(
+ upb_Array_DataPtr(src.as_raw(Private)).cast::<u8>(),
+ upb_Array_MutableDataPtr(dest.as_raw(Private)).cast::<u8>(),
+ size_of::<$t>() * src.len());
}
}
}
@@ -421,6 +471,14 @@
}
}
+impl<'msg, T: ?Sized> RepeatedMut<'msg, T> {
+ // Returns a `RawArena` which is live for at least `'msg`
+ #[doc(hidden)]
+ pub fn raw_arena(&self, _private: Private) -> RawArena {
+ self.inner.arena
+ }
+}
+
impl_repeated_primitives!(
(bool, bool_val, UpbCType::Bool),
(f32, float_val, UpbCType::Float),
@@ -428,29 +486,54 @@
(i32, int32_val, UpbCType::Int32),
(u32, uint32_val, UpbCType::UInt32),
(i64, int64_val, UpbCType::Int64),
- (u64, uint64_val, UpbCType::UInt64)
+ (u64, uint64_val, UpbCType::UInt64),
);
-/// Returns a static thread-local empty RepeatedFieldInner for use in a
-/// RepeatedView.
-///
-/// # Safety
-/// The returned array must never be mutated.
-///
-/// TODO: Split RepeatedFieldInner into mut and const variants to
-/// enforce safety. The returned array must never be mutated.
-pub unsafe fn empty_array() -> RepeatedFieldInner<'static> {
- // TODO: Consider creating empty array in C.
- fn new_repeated_field_inner() -> RepeatedFieldInner<'static> {
- let arena = Box::leak::<'static>(Box::new(Arena::new()));
- // Provide `i32` as a placeholder type.
- RepeatedField::<'static, i32>::new(arena).inner
- }
- thread_local! {
- static REPEATED_FIELD: RepeatedFieldInner<'static> = new_repeated_field_inner();
- }
+/// Cast a `RepeatedView<SomeEnum>` to `RepeatedView<i32>`.
+pub fn cast_enum_repeated_view<E: Enum + ProxiedInRepeated>(
+ private: Private,
+ repeated: RepeatedView<E>,
+) -> RepeatedView<i32> {
+ // SAFETY: Reading an enum array as an i32 array is sound.
+ unsafe { RepeatedView::from_raw(private, repeated.as_raw(Private)) }
+}
- REPEATED_FIELD.with(|inner| *inner)
+/// Cast a `RepeatedMut<SomeEnum>` to `RepeatedMut<i32>`.
+///
+/// Writing an unknown value is sound because all enums
+/// are representationally open.
+pub fn cast_enum_repeated_mut<E: Enum + ProxiedInRepeated>(
+ private: Private,
+ repeated: RepeatedMut<E>,
+) -> RepeatedMut<i32> {
+ // SAFETY:
+ // - Reading an enum array as an i32 array is sound.
+ // - No shared mutation is possible through the output.
+ unsafe {
+ let InnerRepeatedMut { arena, raw, .. } = repeated.into_inner();
+ RepeatedMut::from_inner(private, InnerRepeatedMut { arena, raw, _phantom: PhantomData })
+ }
+}
+
+/// Returns a static empty RepeatedView.
+pub fn empty_array<T: ?Sized + ProxiedInRepeated>() -> RepeatedView<'static, T> {
+ // TODO: Consider creating a static empty array in C.
+
+ // Use `i32` for a shared empty repeated for all repeated types on a thread.
+ static EMPTY_REPEATED_VIEW: OnceLock<RepeatedView<'static, i32>> = OnceLock::new();
+
+ // SAFETY:
+ // - Because the repeated is never mutated, the repeated type is unused and
+ // therefore valid for `T`.
+ // - The view is leaked for `'static`.
+ unsafe {
+ RepeatedView::from_raw(
+ Private,
+ EMPTY_REPEATED_VIEW
+ .get_or_init(|| Box::leak(Box::new(Repeated::new())).as_mut().into_view())
+ .as_raw(Private),
+ )
+ }
}
/// Returns a static thread-local empty MapInner for use in a
@@ -461,175 +544,191 @@
///
/// TODO: Split MapInner into mut and const variants to
/// enforce safety. The returned array must never be mutated.
-pub unsafe fn empty_map() -> MapInner<'static> {
- fn new_map_inner() -> MapInner<'static> {
+pub unsafe fn empty_map<K: ?Sized + 'static, V: ?Sized + 'static>() -> MapInner<'static, K, V> {
+ fn new_map_inner() -> MapInner<'static, i32, i32> {
// TODO: Consider creating empty map in C.
let arena = Box::leak::<'static>(Box::new(Arena::new()));
// Provide `i32` as a placeholder type.
- Map::<'static, i32, i32>::new(arena).inner
+ MapInner::<'static, i32, i32>::new(arena)
}
thread_local! {
- static MAP: MapInner<'static> = new_map_inner();
+ static MAP: MapInner<'static, i32, i32> = new_map_inner();
}
- MAP.with(|inner| *inner)
-}
-
-#[derive(Clone, Copy, Debug)]
-pub struct MapInner<'msg> {
- pub raw: RawMap,
- pub arena: &'msg Arena,
+ MAP.with(|inner| MapInner {
+ raw: inner.raw,
+ arena: inner.arena,
+ _phantom_key: PhantomData,
+ _phantom_value: PhantomData,
+ })
}
#[derive(Debug)]
-pub struct Map<'msg, K: ?Sized, V: ?Sized> {
- inner: MapInner<'msg>,
- _phantom_key: PhantomData<&'msg mut K>,
- _phantom_value: PhantomData<&'msg mut V>,
+pub struct MapInner<'msg, K: ?Sized, V: ?Sized> {
+ pub raw: RawMap,
+ pub arena: &'msg Arena,
+ pub _phantom_key: PhantomData<&'msg mut K>,
+ pub _phantom_value: PhantomData<&'msg mut V>,
}
-// These use manual impls instead of derives to avoid unnecessary bounds on `K`
-// and `V`. This problem is referred to as "perfect derive".
-// https://smallcultfollowing.com/babysteps/blog/2022/04/12/implied-bounds-and-perfect-derive/
-impl<'msg, K: ?Sized, V: ?Sized> Copy for Map<'msg, K, V> {}
-impl<'msg, K: ?Sized, V: ?Sized> Clone for Map<'msg, K, V> {
- fn clone(&self) -> Map<'msg, K, V> {
+impl<'msg, K: ?Sized, V: ?Sized> Copy for MapInner<'msg, K, V> {}
+impl<'msg, K: ?Sized, V: ?Sized> Clone for MapInner<'msg, K, V> {
+ fn clone(&self) -> MapInner<'msg, K, V> {
*self
}
}
-impl<'msg, K: ?Sized, V: ?Sized> Map<'msg, K, V> {
- pub fn len(&self) -> usize {
- unsafe { upb_Map_Size(self.inner.raw) }
- }
+macro_rules! generate_map_key_ops_traits {
+ ($($t:ty, $sized_t:ty;)*) => {
+ paste! {
+ $(
+ pub trait [< MapWith $t:camel KeyOps >] : Proxied {
+ fn new_map(a: RawArena) -> RawMap;
+ fn clear(m: RawMap) {
+ unsafe { upb_Map_Clear(m) }
+ }
+ fn size(m: RawMap) -> usize {
+ unsafe { upb_Map_Size(m) }
+ }
+ fn insert(m: RawMap, a: RawArena, key: $sized_t, value: View<'_, Self>) -> bool;
+ fn get<'msg>(m: RawMap, key: $sized_t) -> Option<View<'msg, Self>>;
+ fn remove(m: RawMap, key: $sized_t) -> bool;
+ }
- pub fn is_empty(&self) -> bool {
- self.len() == 0
- }
+ impl<'msg, V: [< MapWith $t:camel KeyOps >] + ?Sized> MapInner<'msg, $t, V> {
- pub fn from_inner(_private: Private, inner: MapInner<'msg>) -> Self {
- Map { inner, _phantom_key: PhantomData, _phantom_value: PhantomData }
- }
+ pub fn new(arena: &'msg mut Arena) -> Self {
+ MapInner {
+ raw: V::new_map(arena.raw()),
+ arena,
+ _phantom_key: PhantomData,
+ _phantom_value: PhantomData
+ }
+ }
- pub fn clear(&mut self) {
- unsafe { upb_Map_Clear(self.inner.raw) }
+ pub fn size(&self) -> usize {
+ V::size(self.raw)
+ }
+
+ pub fn clear(&mut self) {
+ V::clear(self.raw)
+ }
+
+ pub fn get<'a>(&self, key: $sized_t) -> Option<View<'a, V>> {
+ V::get(self.raw, key)
+ }
+
+ pub fn remove(&mut self, key: $sized_t) -> bool {
+ V::remove(self.raw, key)
+ }
+
+ pub fn insert(&mut self, key: $sized_t, value: View<'_, V>) -> bool {
+ V::insert(self.raw, self.arena.raw(), key, value)
+ }
+ }
+ )*
+ }
}
}
-/// # Safety
-/// Implementers of this trait must ensure that `pack_message_value` returns
-/// a `upb_MessageValue` with the active variant indicated by `Self`.
-pub unsafe trait MapType {
- /// # Safety
- /// The active variant of `outer` must be the `type PrimitiveValue`
- unsafe fn unpack_message_value(_private: Private, outer: upb_MessageValue) -> Self;
+generate_map_key_ops_traits!(
+ i32, i32;
+ u32, u32;
+ i64, i64;
+ u64, u64;
+ bool, bool;
+ ProtoStr, &ProtoStr;
+);
- fn pack_message_value(_private: Private, inner: Self) -> upb_MessageValue;
-
- fn upb_ctype(_private: Private) -> UpbCType;
-
- fn zero_value(_private: Private) -> Self;
-}
-
-/// Types implementing this trait can be used as map keys.
-pub trait MapKeyType: MapType {}
-
-/// Types implementing this trait can be used as map values.
-pub trait MapValueType: MapType {}
-
-macro_rules! impl_scalar_map_value_types {
- ($($type:ty, $union_field:ident, $upb_tag:expr, $zero_val:literal;)*) => {
- $(
- unsafe impl MapType for $type {
- unsafe fn unpack_message_value(_private: Private, outer: upb_MessageValue) -> Self {
- unsafe { outer.$union_field }
+macro_rules! impl_scalar_map_key_op_for_scalar_values {
+ ($key_t:ty, $key_msg_val:expr, $key_upb_tag:expr, $trait:ident for $($t:ty, $msg_val:expr, $from_msg_val:expr, $upb_tag:expr, $zero_val:literal;)*) => {
+ $(
+ impl $trait for $t {
+ fn new_map(a: RawArena) -> RawMap {
+ unsafe { upb_Map_New(a, $key_upb_tag, $upb_tag) }
}
- fn pack_message_value(_private: Private, inner: Self) -> upb_MessageValue {
- upb_MessageValue { $union_field: inner }
+ fn insert(m: RawMap, a: RawArena, key: $key_t, value: View<'_, Self>) -> bool {
+ unsafe {
+ upb_Map_Set(
+ m,
+ $key_msg_val(key),
+ $msg_val(value),
+ a
+ )
+ }
}
- fn upb_ctype(_private: Private) -> UpbCType {
- $upb_tag
+ fn get<'msg>(m: RawMap, key: $key_t) -> Option<View<'msg, Self>> {
+ let mut val = $msg_val($zero_val);
+ let found = unsafe {
+ upb_Map_Get(m, $key_msg_val(key), &mut val)
+ };
+ if !found {
+ return None;
+ }
+ Some($from_msg_val(val))
}
- fn zero_value(_private: Private) -> Self {
- $zero_val
+ fn remove(m: RawMap, key: $key_t) -> bool {
+ let mut val = $msg_val($zero_val);
+ unsafe {
+ upb_Map_Delete(m, $key_msg_val(key), &mut val)
+ }
}
}
+ )*
+ }
+}
- impl MapValueType for $type {}
- )*
+macro_rules! scalar_to_msg {
+ ($ufield:ident) => {
+ |val| upb_MessageValue { $ufield: val }
};
}
-impl_scalar_map_value_types!(
- f32, float_val, UpbCType::Float, 0f32;
- f64, double_val, UpbCType::Double, 0f64;
- i32, int32_val, UpbCType::Int32, 0i32;
- u32, uint32_val, UpbCType::UInt32, 0u32;
- i64, int64_val, UpbCType::Int64, 0i64;
- u64, uint64_val, UpbCType::UInt64, 0u64;
- bool, bool_val, UpbCType::Bool, false;
-);
-
-macro_rules! impl_scalar_map_key_types {
- ($($type:ty;)*) => {
- $(
- impl MapKeyType for $type {}
- )*
+macro_rules! scalar_from_msg {
+ ($ufield:ident) => {
+ |msg: upb_MessageValue| unsafe { msg.$ufield }
};
}
-impl_scalar_map_key_types!(
- i32; u32; i64; u64; bool;
-);
+fn str_to_msg<'msg>(val: impl Into<&'msg ProtoStr>) -> upb_MessageValue {
+ upb_MessageValue { str_val: val.into().as_bytes().into() }
+}
-impl<'msg, K: MapKeyType, V: MapValueType> Map<'msg, K, V> {
- pub fn new(arena: &'msg Arena) -> Self {
- unsafe {
- let raw_map = upb_Map_New(arena.raw(), K::upb_ctype(Private), V::upb_ctype(Private));
- Map {
- inner: MapInner { raw: raw_map, arena },
- _phantom_key: PhantomData,
- _phantom_value: PhantomData,
- }
- }
- }
+fn msg_to_str<'msg>(msg: upb_MessageValue) -> &'msg ProtoStr {
+ unsafe { ProtoStr::from_utf8_unchecked(msg.str_val.as_ref()) }
+}
- pub fn get(&self, key: K) -> Option<V> {
- let mut val = V::pack_message_value(Private, V::zero_value(Private));
- let found =
- unsafe { upb_Map_Get(self.inner.raw, K::pack_message_value(Private, key), &mut val) };
- if !found {
- return None;
+macro_rules! impl_map_key_ops_for_scalar_values {
+ ($($t:ty, $t_sized:ty, $key_msg_val:expr, $upb_tag:expr;)*) => {
+ paste! {
+ $(
+ impl_scalar_map_key_op_for_scalar_values!($t_sized, $key_msg_val, $upb_tag, [< MapWith $t:camel KeyOps >] for
+ f32, scalar_to_msg!(float_val), scalar_from_msg!(float_val), UpbCType::Float, 0f32;
+ f64, scalar_to_msg!(double_val), scalar_from_msg!(double_val), UpbCType::Double, 0f64;
+ i32, scalar_to_msg!(int32_val), scalar_from_msg!(int32_val), UpbCType::Int32, 0i32;
+ u32, scalar_to_msg!(uint32_val), scalar_from_msg!(uint32_val), UpbCType::UInt32, 0u32;
+ i64, scalar_to_msg!(int64_val), scalar_from_msg!(int64_val), UpbCType::Int64, 0i64;
+ u64, scalar_to_msg!(uint64_val), scalar_from_msg!(uint64_val), UpbCType::UInt64, 0u64;
+ bool, scalar_to_msg!(bool_val), scalar_from_msg!(bool_val), UpbCType::Bool, false;
+ ProtoStr, str_to_msg, msg_to_str, UpbCType::String, "";
+ );
+ )*
}
- Some(unsafe { V::unpack_message_value(Private, val) })
- }
-
- pub fn insert(&mut self, key: K, value: V) -> bool {
- unsafe {
- upb_Map_Set(
- self.inner.raw,
- K::pack_message_value(Private, key),
- V::pack_message_value(Private, value),
- self.inner.arena.raw(),
- )
- }
- }
-
- pub fn remove(&mut self, key: K) -> Option<V> {
- let mut val = V::pack_message_value(Private, V::zero_value(Private));
- let removed = unsafe {
- upb_Map_Delete(self.inner.raw, K::pack_message_value(Private, key), &mut val)
- };
- if !removed {
- return None;
- }
- Some(unsafe { V::unpack_message_value(Private, val) })
}
}
+impl_map_key_ops_for_scalar_values!(
+ i32, i32, scalar_to_msg!(int32_val), UpbCType::Int32;
+ u32, u32, scalar_to_msg!(uint32_val), UpbCType::UInt32;
+ i64, i64, scalar_to_msg!(int64_val), UpbCType::Int64;
+ u64, u64, scalar_to_msg!(uint64_val), UpbCType::UInt64;
+ bool, bool, scalar_to_msg!(bool_val), UpbCType::Bool;
+ ProtoStr, &ProtoStr, |val: &ProtoStr| upb_MessageValue { str_val: val.as_bytes().into() }, UpbCType::String;
+);
+
extern "C" {
fn upb_Map_New(arena: RawArena, key_type: UpbCType, value_type: UpbCType) -> RawMap;
fn upb_Map_Size(map: RawMap) -> usize;
@@ -649,6 +748,18 @@
}
#[cfg(test)]
+pub(crate) fn new_map_i32_i64() -> MapInner<'static, i32, i64> {
+ let arena = Box::leak::<'static>(Box::new(Arena::new()));
+ MapInner::<'static, i32, i64>::new(arena)
+}
+
+#[cfg(test)]
+pub(crate) fn new_map_str_str() -> MapInner<'static, ProtoStr, ProtoStr> {
+ let arena = Box::leak::<'static>(Box::new(Arena::new()));
+ MapInner::<'static, ProtoStr, ProtoStr>::new(arena)
+}
+
+#[cfg(test)]
mod tests {
use super::*;
use googletest::prelude::*;
@@ -676,75 +787,94 @@
}
#[test]
- fn i32_array() {
- let arena = Arena::new();
- let mut arr = RepeatedField::<i32>::new(&arena);
- assert_that!(arr.len(), eq(0));
- arr.push(1);
- assert_that!(arr.get(0), eq(Some(1)));
- assert_that!(arr.len(), eq(1));
- arr.set(0, 3);
- assert_that!(arr.get(0), eq(Some(3)));
- for i in 0..2048 {
- arr.push(i);
- assert_that!(arr.get(arr.len() - 1), eq(Some(i)));
- }
- }
- #[test]
- fn u32_array() {
- let mut arena = Arena::new();
- let mut arr = RepeatedField::<u32>::new(&mut arena);
- assert_that!(arr.len(), eq(0));
- arr.push(1);
- assert_that!(arr.get(0), eq(Some(1)));
- assert_that!(arr.len(), eq(1));
- arr.set(0, 3);
- assert_that!(arr.get(0), eq(Some(3)));
- for i in 0..2048 {
- arr.push(i);
- assert_that!(arr.get(arr.len() - 1), eq(Some(i)));
- }
- }
-
- #[test]
fn i32_i32_map() {
- let arena = Arena::new();
- let mut map = Map::<'_, i32, i32>::new(&arena);
- assert_that!(map.len(), eq(0));
+ let mut arena = Arena::new();
+ let mut map = MapInner::<'_, i32, i32>::new(&mut arena);
+ assert_that!(map.size(), eq(0));
assert_that!(map.insert(1, 2), eq(true));
assert_that!(map.get(1), eq(Some(2)));
assert_that!(map.get(3), eq(None));
- assert_that!(map.len(), eq(1));
+ assert_that!(map.size(), eq(1));
- assert_that!(map.remove(1), eq(Some(2)));
- assert_that!(map.len(), eq(0));
- assert_that!(map.remove(1), eq(None));
+ assert_that!(map.remove(1), eq(true));
+ assert_that!(map.size(), eq(0));
+ assert_that!(map.remove(1), eq(false));
assert_that!(map.insert(4, 5), eq(true));
assert_that!(map.insert(6, 7), eq(true));
map.clear();
- assert_that!(map.len(), eq(0));
+ assert_that!(map.size(), eq(0));
}
#[test]
fn i64_f64_map() {
- let arena = Arena::new();
- let mut map = Map::<'_, i64, f64>::new(&arena);
- assert_that!(map.len(), eq(0));
+ let mut arena = Arena::new();
+ let mut map = MapInner::<'_, i64, f64>::new(&mut arena);
+ assert_that!(map.size(), eq(0));
assert_that!(map.insert(1, 2.5), eq(true));
assert_that!(map.get(1), eq(Some(2.5)));
assert_that!(map.get(3), eq(None));
- assert_that!(map.len(), eq(1));
+ assert_that!(map.size(), eq(1));
- assert_that!(map.remove(1), eq(Some(2.5)));
- assert_that!(map.len(), eq(0));
- assert_that!(map.remove(1), eq(None));
+ assert_that!(map.remove(1), eq(true));
+ assert_that!(map.size(), eq(0));
+ assert_that!(map.remove(1), eq(false));
assert_that!(map.insert(4, 5.1), eq(true));
assert_that!(map.insert(6, 7.2), eq(true));
map.clear();
- assert_that!(map.len(), eq(0));
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn str_str_map() {
+ let mut arena = Arena::new();
+ let mut map = MapInner::<'_, ProtoStr, ProtoStr>::new(&mut arena);
+ assert_that!(map.size(), eq(0));
+
+ map.insert("fizz".into(), "buzz".into());
+ assert_that!(map.size(), eq(1));
+ assert_that!(map.remove("fizz".into()), eq(true));
+ map.clear();
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn u64_str_map() {
+ let mut arena = Arena::new();
+ let mut map = MapInner::<'_, u64, ProtoStr>::new(&mut arena);
+ assert_that!(map.size(), eq(0));
+
+ map.insert(1, "fizz".into());
+ map.insert(2, "buzz".into());
+ assert_that!(map.size(), eq(2));
+ assert_that!(map.remove(1), eq(true));
+ map.clear();
+ assert_that!(map.size(), eq(0));
+ }
+
+ #[test]
+ fn test_all_maps_can_be_constructed() {
+ macro_rules! gen_proto_values {
+ ($key_t:ty, $($value_t:ty),*) => {
+ let mut arena = Arena::new();
+ $(
+ let map = MapInner::<'_, $key_t, $value_t>::new(&mut arena);
+ assert_that!(map.size(), eq(0));
+ )*
+ }
+ }
+
+ macro_rules! gen_proto_keys {
+ ($($key_t:ty),*) => {
+ $(
+ gen_proto_values!($key_t, f32, f64, i32, u32, i64, bool, ProtoStr);
+ )*
+ }
+ }
+
+ gen_proto_keys!(i32, u32, i64, u64, bool, ProtoStr);
}
}
diff --git a/rust/upb_kernel/BUILD b/rust/upb_kernel/BUILD
index b06f182..c98774a 100644
--- a/rust/upb_kernel/BUILD
+++ b/rust/upb_kernel/BUILD
@@ -4,11 +4,12 @@
name = "upb_c_api",
srcs = ["upb_api.c"],
visibility = [
- "//src/google/protobuf:__subpackages__",
"//rust:__subpackages__",
+ "//src/google/protobuf:__subpackages__",
],
deps = [
- "//upb:collections",
"//upb:mem",
+ "//upb:message",
+ "//upb:message_copy",
],
)
diff --git a/rust/upb_kernel/upb_api.c b/rust/upb_kernel/upb_api.c
index e2a67eb..e168b02 100644
--- a/rust/upb_kernel/upb_api.c
+++ b/rust/upb_kernel/upb_api.c
@@ -8,6 +8,7 @@
#define UPB_BUILD_API
-#include "upb/collections/map.h" // IWYU pragma: keep
-#include "upb/collections/array.h" // IWYU pragma: keep
-#include "upb/mem/arena.h" // IWYU pragma: keep
+#include "upb/mem/arena.h" // IWYU pragma: keep
+#include "upb/message/array.h" // IWYU pragma: keep
+#include "upb/message/copy.h" // IWYU pragma: keep
+#include "upb/message/map.h" // IWYU pragma: keep
\ No newline at end of file
diff --git a/rust/utf8.rs b/rust/utf8.rs
index 56a1c20..a452e8f 100644
--- a/rust/utf8.rs
+++ b/rust/utf8.rs
@@ -31,6 +31,7 @@
/// # Examples
///
/// ```
+/// use googletest::prelude::*;
/// use utf8::Utf8Chunks;
///
/// // An invalid UTF-8 string
@@ -40,10 +41,10 @@
/// let chunk = Utf8Chunks::new(bytes).next().unwrap();
///
/// // The first three characters are valid UTF-8
-/// assert_eq!("foo", chunk.valid());
+/// assert_that!("foo", eq(chunk.valid()));
///
/// // The fourth character is broken
-/// assert_eq!(b"\xF1\x80", chunk.invalid());
+/// assert_that!(b"\xF1\x80", eq(chunk.invalid()));
/// ```
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Utf8Chunk<'a> {
diff --git a/rust/vtable.rs b/rust/vtable.rs
index 2327e56..5adca11 100644
--- a/rust/vtable.rs
+++ b/rust/vtable.rs
@@ -6,12 +6,16 @@
// https://developers.google.com/open-source/licenses/bsd
use crate::__internal::{Private, PtrAndLen, RawMessage};
-use crate::__runtime::{copy_bytes_in_arena_if_needed_by_runtime, MutatorMessageRef};
+use crate::__runtime::{
+ copy_bytes_in_arena_if_needed_by_runtime, InnerPrimitiveMut, MutatorMessageRef,
+};
use crate::{
- AbsentField, FieldEntry, Mut, MutProxy, Optional, PresentField, Proxied, ProxiedWithPresence,
- View, ViewProxy,
+ AbsentField, FieldEntry, Mut, MutProxy, Optional, PresentField, PrimitiveMut, Proxied,
+ ProxiedWithPresence, View, ViewProxy,
};
use std::fmt::{self, Debug};
+use std::marker::PhantomData;
+use std::ptr::NonNull;
/// A proxied type that can use a vtable to provide get/set access for a
/// present field.
@@ -65,7 +69,8 @@
AbsentMutData<'msg> = RawVTableOptionalMutatorData<'msg, T>,
>,
{
- let data = RawVTableOptionalMutatorData { msg_ref, vtable: optional_vtable };
+ // SAFETY: safe as promised by the caller of the function
+ let data = unsafe { RawVTableOptionalMutatorData::new(Private, msg_ref, optional_vtable) };
if is_set {
Optional::Set(PresentField::from_inner(Private, data))
} else {
@@ -87,26 +92,29 @@
///
/// [`RawVTableOptionalMutatorData`] is similar, but also includes the
/// capability to has/clear.
-pub struct RawVTableMutator<'msg, T: ProxiedWithRawVTable + ?Sized> {
+pub struct RawVTableMutator<'msg, T: ?Sized> {
msg_ref: MutatorMessageRef<'msg>,
- vtable: &'static T::VTable,
+ /// Stores `&'static <T as ProxiedWithRawVTable>::Vtable`
+ /// as a type-erased pointer to avoid a bound on the struct.
+ vtable: NonNull<()>,
+ _phantom: PhantomData<&'msg T>,
}
// These use manual impls instead of derives to avoid unnecessary bounds on `T`.
// This problem is referred to as "perfect derive".
// https://smallcultfollowing.com/babysteps/blog/2022/04/12/implied-bounds-and-perfect-derive/
-impl<'msg, T: ProxiedWithRawVTable + ?Sized> Clone for RawVTableMutator<'msg, T> {
+impl<'msg, T: ?Sized> Clone for RawVTableMutator<'msg, T> {
fn clone(&self) -> Self {
*self
}
}
-impl<'msg, T: ProxiedWithRawVTable + ?Sized> Copy for RawVTableMutator<'msg, T> {}
+impl<'msg, T: ?Sized> Copy for RawVTableMutator<'msg, T> {}
impl<'msg, T: ProxiedWithRawVTable + ?Sized> Debug for RawVTableMutator<'msg, T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("RawVTableMutator")
.field("msg_ref", &self.msg_ref)
- .field("vtable", &self.vtable)
+ .field("vtable", self.vtable())
.finish()
}
}
@@ -123,7 +131,12 @@
msg_ref: MutatorMessageRef<'msg>,
vtable: &'static T::VTable,
) -> Self {
- RawVTableMutator { msg_ref, vtable }
+ RawVTableMutator { msg_ref, vtable: NonNull::from(vtable).cast(), _phantom: PhantomData }
+ }
+
+ fn vtable(self) -> &'static T::VTable {
+ // SAFETY: This was cast from `&'static T::VTable`.
+ unsafe { self.vtable.cast().as_ref() }
}
}
@@ -136,30 +149,27 @@
///
/// This has the same representation for "present" and "absent" data;
/// differences like default values are obviated by the vtable.
-pub struct RawVTableOptionalMutatorData<'msg, T: ProxiedWithRawOptionalVTable + ?Sized> {
+pub struct RawVTableOptionalMutatorData<'msg, T: ?Sized> {
msg_ref: MutatorMessageRef<'msg>,
- vtable: &'static T::OptionalVTable,
+ /// Stores `&'static <T as ProxiedWithRawOptionalVTable>::Vtable`
+ /// as a type-erased pointer to avoid a bound on the struct.
+ optional_vtable: NonNull<()>,
+ _phantom: PhantomData<&'msg T>,
}
-unsafe impl<'msg, T: ProxiedWithRawOptionalVTable + ?Sized> Sync
- for RawVTableOptionalMutatorData<'msg, T>
-{
-}
+// SAFETY: all `T` that can perform mutations don't mutate through a shared
+// reference.
+unsafe impl<'msg, T: ?Sized> Sync for RawVTableOptionalMutatorData<'msg, T> {}
// These use manual impls instead of derives to avoid unnecessary bounds on `T`.
// This problem is referred to as "perfect derive".
// https://smallcultfollowing.com/babysteps/blog/2022/04/12/implied-bounds-and-perfect-derive/
-impl<'msg, T: ProxiedWithRawOptionalVTable + ?Sized> Clone
- for RawVTableOptionalMutatorData<'msg, T>
-{
+impl<'msg, T: ?Sized> Clone for RawVTableOptionalMutatorData<'msg, T> {
fn clone(&self) -> Self {
*self
}
}
-impl<'msg, T: ProxiedWithRawOptionalVTable + ?Sized> Copy
- for RawVTableOptionalMutatorData<'msg, T>
-{
-}
+impl<'msg, T: ?Sized> Copy for RawVTableOptionalMutatorData<'msg, T> {}
impl<'msg, T: ProxiedWithRawOptionalVTable + ?Sized> Debug
for RawVTableOptionalMutatorData<'msg, T>
@@ -167,7 +177,7 @@
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("RawVTableOptionalMutatorData")
.field("msg_ref", &self.msg_ref)
- .field("vtable", &self.vtable)
+ .field("vtable", self.optional_vtable())
.finish()
}
}
@@ -184,11 +194,23 @@
msg_ref: MutatorMessageRef<'msg>,
vtable: &'static T::OptionalVTable,
) -> Self {
- Self { msg_ref, vtable }
+ Self { msg_ref, optional_vtable: NonNull::from(vtable).cast(), _phantom: PhantomData }
+ }
+
+ fn optional_vtable(self) -> &'static T::OptionalVTable {
+ // SAFETY: This was cast from `&'static T::OptionalVTable` in `new`.
+ unsafe { self.optional_vtable.cast().as_ref() }
}
fn into_raw_mut(self) -> RawVTableMutator<'msg, T> {
- RawVTableMutator { msg_ref: self.msg_ref, vtable: T::upcast_vtable(Private, self.vtable) }
+ // SAFETY: the safety requirements have been met by the caller of `new`.
+ unsafe {
+ RawVTableMutator::new(
+ Private,
+ self.msg_ref,
+ T::upcast_vtable(Private, self.optional_vtable()),
+ )
+ }
}
}
@@ -291,32 +313,6 @@
}
}
-macro_rules! impl_raw_vtable_mutator_get_set {
- ($($t:ty),*) => {
- $(
- impl RawVTableMutator<'_, $t> {
- pub(crate) fn get(self) -> $t {
- // SAFETY:
- // - `msg_ref` is valid for the lifetime of `RawVTableMutator` as promised by the
- // caller of `new`.
- unsafe { (self.vtable.getter)(self.msg_ref.msg()) }
- }
-
- /// # Safety
- /// - `msg_ref` must be valid for the lifetime of `RawVTableMutator`.
- pub(crate) unsafe fn set(self, val: $t) {
- // SAFETY:
- // - `msg_ref` is valid for the lifetime of `RawVTableMutator` as promised by the
- // caller of `new`.
- unsafe { (self.vtable.setter)(self.msg_ref.msg(), val) }
- }
- }
- )*
- }
-}
-
-impl_raw_vtable_mutator_get_set!(bool, f32, f64, i32, i64, u32, u64);
-
/// A generic thunk vtable for mutating a present `bytes` or `string` field.
#[doc(hidden)]
#[derive(Debug)]
@@ -366,7 +362,7 @@
// - `msg_ref` is valid for `'msg` as promised by the caller of `new`.
// - The caller of `BytesMutVTable` promised that the returned `PtrAndLen` is
// valid for `'msg`.
- unsafe { (self.vtable.getter)(self.msg_ref.msg()).as_ref() }
+ unsafe { (self.vtable().getter)(self.msg_ref.msg()).as_ref() }
}
/// # Safety
@@ -377,7 +373,7 @@
let val = copy_bytes_in_arena_if_needed_by_runtime(self.msg_ref, val);
// SAFETY:
// - `msg_ref` is valid for `'msg` as promised by the caller of `new`.
- unsafe { (self.vtable.setter)(self.msg_ref.msg(), val.into()) }
+ unsafe { (self.vtable().setter)(self.msg_ref.msg(), val.into()) }
}
pub(crate) fn truncate(&self, len: usize) {
@@ -397,7 +393,7 @@
pub(crate) fn set_absent_to_default(self) -> Self {
// SAFETY: The default value is UTF-8 if required by the
// runtime as promised by the caller of `BytesOptionalMutVTable::new`.
- unsafe { self.set(self.vtable.default) }
+ unsafe { self.set(self.optional_vtable().default) }
}
/// # Safety
@@ -407,7 +403,7 @@
let val = copy_bytes_in_arena_if_needed_by_runtime(self.msg_ref, val);
// SAFETY:
// - `msg_ref` is valid for `'msg` as promised by the caller.
- unsafe { (self.vtable.base.setter)(self.msg_ref.msg(), val.into()) }
+ unsafe { (self.optional_vtable().base.setter)(self.msg_ref.msg(), val.into()) }
self
}
@@ -416,40 +412,96 @@
// - `msg_ref` is valid for `'msg` as promised by the caller.
// - The caller of `new` promised that the returned `PtrAndLen` is valid for
// `'msg`.
- unsafe { (self.vtable.clearer)(self.msg_ref.msg()) }
+ unsafe { (self.optional_vtable().clearer)(self.msg_ref.msg()) }
self
}
}
-macro_rules! impl_raw_vtable_optional_mutator_data {
- ($($t:ty),*) => {
- $(
- impl<'msg> RawVTableOptionalMutatorData<'msg, $t> {
- pub(crate) fn set_absent_to_default(self) -> Self {
- // SAFETY:
- // - `msg_ref` is valid for the lifetime of `RawVTableOptionalMutatorData` as
- // promised by the caller of `new`.
- self.set(self.vtable.default)
- }
-
- pub(crate) fn set(self, val: $t) -> Self {
- // SAFETY:
- // - `msg_ref` is valid for the lifetime of `RawVTableOptionalMutatorData` as
- // promised by the caller of `new`.
- unsafe { (self.vtable.base.setter)(self.msg_ref.msg(), val.into()) }
- self
- }
-
- pub(crate) fn clear(self) -> Self {
- // SAFETY:
- // - `msg_ref` is valid for the lifetime of `RawVTableOptionalMutatorData` as
- // promised by the caller of `new`.
- unsafe { (self.vtable.clearer)(self.msg_ref.msg()) }
- self
- }
- }
- )*
- }
+/// Primitive types using a vtable for message access that are trivial to copy
+/// and have a `'static` lifetime.
+///
+/// Implementing this trait automatically implements `ProxiedWithRawVTable`,
+/// `ProxiedWithRawOptionalVTable`, and get/set/clear methods on
+/// `RawVTableMutator` and `RawVTableOptionalMutatorData` that use the vtable.
+///
+/// It doesn't implement `Proxied`, `ViewProxy`, `SettableValue` or
+/// `ProxiedWithPresence` for `Self` to avoid future conflicting blanket impls
+/// on those traits.
+pub trait PrimitiveWithRawVTable:
+ Copy
+ + Debug
+ + 'static
+ + ProxiedWithPresence
+ + Sync
+ + Send
+ + for<'msg> Proxied<View<'msg> = Self, Mut<'msg> = PrimitiveMut<'msg, Self>>
+{
}
-impl_raw_vtable_optional_mutator_data!(bool, f32, f64, i32, i64, u32, u64);
+impl<T: PrimitiveWithRawVTable> ProxiedWithRawVTable for T {
+ type VTable = PrimitiveVTable<T>;
+
+ fn make_view(_private: Private, mut_inner: InnerPrimitiveMut<'_, Self>) -> Self {
+ mut_inner.get()
+ }
+
+ fn make_mut(_private: Private, inner: InnerPrimitiveMut<'_, Self>) -> PrimitiveMut<'_, Self> {
+ // SAFETY: `inner` is valid for the necessary lifetime and `T` as promised by
+ // the caller of `InnerPrimitiveMut::new`.
+ unsafe { PrimitiveMut::from_inner(Private, inner) }
+ }
+}
+
+impl<T: PrimitiveWithRawVTable> ProxiedWithRawOptionalVTable for T {
+ type OptionalVTable = PrimitiveOptionalMutVTable<T>;
+
+ fn upcast_vtable(
+ _private: Private,
+ optional_vtable: &'static Self::OptionalVTable,
+ ) -> &'static Self::VTable {
+ &optional_vtable.base
+ }
+}
+
+impl<T: PrimitiveWithRawVTable> RawVTableMutator<'_, T> {
+ pub(crate) fn get(self) -> T {
+ // SAFETY:
+ // - `msg_ref` is valid for the lifetime of `RawVTableMutator` as promised by
+ // the caller of `new`.
+ unsafe { (self.vtable().getter)(self.msg_ref.msg()) }
+ }
+
+ /// # Safety
+ /// - `msg_ref` must be valid for the lifetime of `RawVTableMutator`.
+ pub(crate) unsafe fn set(self, val: T) {
+ // SAFETY:
+ // - `msg_ref` is valid for the lifetime of `RawVTableMutator` as promised by
+ // the caller of `new`.
+ unsafe { (self.vtable().setter)(self.msg_ref.msg(), val) }
+ }
+}
+
+impl<'msg, T: PrimitiveWithRawVTable> RawVTableOptionalMutatorData<'msg, T> {
+ pub fn set_absent_to_default(self, private: Private) -> Self {
+ // SAFETY:
+ // - `msg_ref` is valid for the lifetime of `RawVTableOptionalMutatorData` as
+ // promised by the caller of `new`.
+ self.set(private, self.optional_vtable().default)
+ }
+
+ pub fn set(self, _private: Private, val: T) -> Self {
+ // SAFETY:
+ // - `msg_ref` is valid for the lifetime of `RawVTableOptionalMutatorData` as
+ // promised by the caller of `new`.
+ unsafe { (self.optional_vtable().base.setter)(self.msg_ref.msg(), val) }
+ self
+ }
+
+ pub fn clear(self, _private: Private) -> Self {
+ // SAFETY:
+ // - `msg_ref` is valid for the lifetime of `RawVTableOptionalMutatorData` as
+ // promised by the caller of `new`.
+ unsafe { (self.optional_vtable().clearer)(self.msg_ref.msg()) }
+ self
+ }
+}
diff --git a/src/file_lists.cmake b/src/file_lists.cmake
index d8ac434..52c856d 100644
--- a/src/file_lists.cmake
+++ b/src/file_lists.cmake
@@ -116,7 +116,6 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor.h
${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor.pb.h
${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor_database.h
- ${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor_legacy.h
${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor_lite.h
${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor_visitor.h
${protobuf_SOURCE_DIR}/src/google/protobuf/dynamic_message.h
@@ -287,10 +286,8 @@
# @//pkg:protoc
set(libprotoc_srcs
- ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/allowlists/editions.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/allowlists/empty_package.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/allowlists/open_enum.cc
- ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/allowlists/unused_imports.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/code_generator.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/command_line_interface.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/cpp/enum.cc
@@ -385,6 +382,7 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/retention.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/ruby/ruby_generator.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/accessors.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/helpers.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/map.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/repeated_scalar.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/singular_message.cc
@@ -392,13 +390,16 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/singular_string.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/unsupported_field.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/context.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/enum.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/generator.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/message.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/naming.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/oneof.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/relative_path.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/subprocess.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/versions.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/zip_writer.cc
+ ${protobuf_SOURCE_DIR}/upb_generator/mangle.cc
)
# @//pkg:protoc
@@ -502,7 +503,9 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/ruby/ruby_generator.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/accessor_generator.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/accessors.h
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/accessors/helpers.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/context.h
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/enum.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/generator.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/message.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/rust/naming.h
@@ -512,6 +515,7 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/subprocess.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/versions.h
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/zip_writer.h
+ ${protobuf_SOURCE_DIR}/upb_generator/mangle.h
)
# @//src/google/protobuf:well_known_type_protos
@@ -649,6 +653,7 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/annotation_test_util.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/reflection_tester.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/test_util.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/unredacted_debug_format_for_test.cc
)
# @//pkg:test_util
@@ -662,8 +667,10 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/map_test_util.inc
${protobuf_SOURCE_DIR}/src/google/protobuf/message_unittest.inc
${protobuf_SOURCE_DIR}/src/google/protobuf/reflection_tester.h
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/repeated_field_reflection_unittest.inc
${protobuf_SOURCE_DIR}/src/google/protobuf/test_util.h
${protobuf_SOURCE_DIR}/src/google/protobuf/test_util.inc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/unredacted_debug_format_for_test.h
${protobuf_SOURCE_DIR}/src/google/protobuf/wire_format_unittest.inc
)
@@ -706,6 +713,8 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/string_block_test.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/text_format_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/unknown_field_set_unittest.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/unredacted_debug_format_for_test.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/unredacted_debug_format_for_test_test.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/varint_shuffle_test.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/well_known_types_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/wire_format_unittest.cc
@@ -793,9 +802,11 @@
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/objectivec/names_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/objectivec/text_format_decode_data_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/parser_unittest.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/php/generator_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/python/plugin_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/retention_unittest.cc
${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc
+ ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/versions_test.cc
)
# @//src/google/protobuf/compiler:test_proto_srcs
diff --git a/src/google/protobuf/BUILD.bazel b/src/google/protobuf/BUILD.bazel
index 682992e..5e7f547 100644
--- a/src/google/protobuf/BUILD.bazel
+++ b/src/google/protobuf/BUILD.bazel
@@ -239,6 +239,7 @@
deps = [
":port_def",
":varint_shuffle",
+ "@com_google_absl//absl/base:config",
"@com_google_absl//absl/log:absl_check",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
@@ -337,6 +338,7 @@
"@com_google_absl//absl/log:absl_check",
"@com_google_absl//absl/log:absl_log",
"@com_google_absl//absl/synchronization",
+ "@com_google_absl//absl/utility:if_constexpr",
],
)
@@ -439,6 +441,7 @@
"//src/google/protobuf/stubs:lite",
"//third_party/utf8_range:utf8_validity",
"@com_google_absl//absl/base",
+ "@com_google_absl//absl/base:config",
"@com_google_absl//absl/container:btree",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/hash",
@@ -483,7 +486,6 @@
"descriptor.h",
"descriptor.pb.h",
"descriptor_database.h",
- "descriptor_legacy.h",
"descriptor_visitor.h",
"dynamic_message.h",
"feature_resolver.h",
@@ -579,20 +581,6 @@
)
cc_library(
- name = "descriptor_legacy",
- hdrs = ["descriptor_legacy.h"],
- copts = COPTS,
- linkopts = LINK_OPTS,
- strip_include_prefix = "/src",
- visibility = ["//:__subpackages__"],
- deps = [
- ":port_def",
- ":protobuf_nowkt",
- "@com_google_absl//absl/strings",
- ],
-)
-
-cc_library(
name = "descriptor_visitor",
hdrs = ["descriptor_visitor.h"],
copts = COPTS,
@@ -796,6 +784,7 @@
visibility = [
"//:__pkg__",
"//python:__pkg__",
+ "//ruby:__pkg__",
],
)
@@ -887,6 +876,7 @@
visibility = ["//:__subpackages__"],
deps = [
":cc_lite_test_protos",
+ ":port_def",
":test_util2",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/log:absl_check",
@@ -907,6 +897,7 @@
"map_test_util.inc",
"message_unittest.inc",
"reflection_tester.h",
+ "repeated_field_reflection_unittest.inc",
"test_util.h",
"test_util.inc",
"test_util_lite.h",
@@ -1039,7 +1030,6 @@
}),
deps = [
":cc_test_protos",
- ":descriptor_legacy",
":protobuf",
":test_textproto",
"//src/google/protobuf/compiler:importer",
@@ -1335,7 +1325,6 @@
}),
deps = [
":cc_test_protos",
- ":descriptor_legacy",
":protobuf",
":test_util",
"//src/google/protobuf/stubs",
@@ -1389,7 +1378,10 @@
cc_test(
name = "repeated_field_reflection_unittest",
- srcs = ["repeated_field_reflection_unittest.cc"],
+ srcs = [
+ "repeated_field_reflection_unittest.cc",
+ "repeated_field_reflection_unittest.inc",
+ ],
copts = COPTS + select({
"//build_defs:config_msvc": [],
"//conditions:default": [
@@ -1424,6 +1416,7 @@
"//src/google/protobuf/io",
"//src/google/protobuf/stubs",
"//src/google/protobuf/testing",
+ "@com_google_absl//absl/random",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
@@ -1564,6 +1557,30 @@
],
)
+cc_library(
+ name = "unredacted_debug_format_for_test",
+ testonly = True,
+ srcs = ["unredacted_debug_format_for_test.cc"],
+ hdrs = ["unredacted_debug_format_for_test.h"],
+ strip_include_prefix = "/src",
+ visibility = ["//visibility:public"],
+ deps = [
+ ":protobuf",
+ ],
+)
+
+cc_test(
+ name = "unredacted_debug_format_for_test_test",
+ srcs = ["unredacted_debug_format_for_test_test.cc"],
+ deps = [
+ ":cc_lite_test_protos",
+ ":cc_test_protos",
+ ":protobuf",
+ ":unredacted_debug_format_for_test",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
################################################################################
# Helper targets for Kotlin tests
################################################################################
diff --git a/src/google/protobuf/any.pb.cc b/src/google/protobuf/any.pb.cc
index 48db0e7..de4a905 100644
--- a/src/google/protobuf/any.pb.cc
+++ b/src/google/protobuf/any.pb.cc
@@ -124,9 +124,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fany_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fany_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fany_2eproto(&descriptor_table_google_2fprotobuf_2fany_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -198,12 +195,15 @@
const ::google::protobuf::MessageLite::ClassData*
Any::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Any::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Any, _impl_._cached_size_),
+ false,
+ },
+ &Any::MergeImpl,
+ &Any::kDescriptorMethods,
};
return &_data_;
}
@@ -322,7 +322,7 @@
}
-void Any::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Any::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Any*>(&to_msg);
auto& from = static_cast<const Any&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Any)
@@ -360,9 +360,9 @@
}
::google::protobuf::Metadata Any::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fany_2eproto_getter, &descriptor_table_google_2fprotobuf_2fany_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fany_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fany_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fany_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fany_2eproto[0]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -375,4 +375,8 @@
#if defined(__llvm__)
#pragma clang diagnostic pop
#endif // __llvm__
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fany_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/any.pb.h b/src/google/protobuf/any.pb.h
index 996eaf8..2595f04 100644
--- a/src/google/protobuf/any.pb.h
+++ b/src/google/protobuf/any.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -71,21 +65,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Any final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Any) */ {
+class PROTOBUF_EXPORT Any final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Any) */ {
public:
inline Any() : Any(nullptr) {}
~Any() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Any(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Any(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Any(const Any& from)
- : Any(nullptr, from) {}
- Any(Any&& from) noexcept
- : Any() {
- *this = ::std::move(from);
- }
-
+ inline Any(const Any& from) : Any(nullptr, from) {}
+ inline Any(Any&& from) noexcept
+ : Any(nullptr, std::move(from)) {}
inline Any& operator=(const Any& from) {
CopyFrom(from);
return *this;
@@ -93,9 +84,9 @@
inline Any& operator=(Any&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -127,12 +118,11 @@
}
static inline const Any* internal_default_instance() {
return reinterpret_cast<const Any*>(
- &_Any_default_instance_);
+ &_Any_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- // implements Any -----------------------------------------------
+ static constexpr int kIndexInFileMessages = 0;
+ // implements Any
+ // -----------------------------------------------
bool PackFrom(const ::google::protobuf::Message& message) {
ABSL_DCHECK_NE(&message, this);
@@ -150,34 +140,43 @@
const ::google::protobuf::Message& message,
const ::google::protobuf::FieldDescriptor** type_url_field,
const ::google::protobuf::FieldDescriptor** value_field);
- template <typename T, class = typename std::enable_if<!std::is_convertible<T, const ::google::protobuf::Message&>::value>::type>
+ template <
+ typename T,
+ class = typename std::enable_if<!std::is_convertible<
+ T, const ::google::protobuf::Message&>::value>::type>
bool PackFrom(const T& message) {
return _impl_._any_metadata_.PackFrom<T>(GetArena(), message);
}
- template <typename T, class = typename std::enable_if<!std::is_convertible<T, const ::google::protobuf::Message&>::value>::type>
+ template <
+ typename T,
+ class = typename std::enable_if<!std::is_convertible<
+ T, const ::google::protobuf::Message&>::value>::type>
bool PackFrom(const T& message,
::absl::string_view type_url_prefix) {
- return _impl_._any_metadata_.PackFrom<T>(GetArena(), message, type_url_prefix);}
- template <typename T, class = typename std::enable_if<!std::is_convertible<T, const ::google::protobuf::Message&>::value>::type>
+ return _impl_._any_metadata_.PackFrom<T>(GetArena(), message, type_url_prefix);
+ }
+ template <
+ typename T,
+ class = typename std::enable_if<!std::is_convertible<
+ T, const ::google::protobuf::Message&>::value>::type>
bool UnpackTo(T* message) const {
return _impl_._any_metadata_.UnpackTo<T>(message);
}
- template<typename T> bool Is() const {
+
+ template <typename T>
+ bool Is() const {
return _impl_._any_metadata_.Is<T>();
}
static bool ParseAnyTypeUrl(::absl::string_view type_url,
std::string* full_type_name);
- friend void swap(Any& a, Any& b) {
- a.Swap(&b);
- }
+ friend void swap(Any& a, Any& b) { a.Swap(&b); }
inline void Swap(Any* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -197,11 +196,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Any& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Any& from) {
- Any::MergeImpl(*this, from);
- }
+ void MergeFrom(const Any& from) { Any::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -209,31 +210,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Any* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Any";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Any"; }
+
+ protected:
explicit Any(::google::protobuf::Arena* arena);
Any(::google::protobuf::Arena* arena, const Any& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Any(::google::protobuf::Arena* arena, Any&& from) noexcept
+ : Any(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kTypeUrlFieldNumber = 1,
kValueFieldNumber = 2,
@@ -273,7 +276,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Any)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -285,14 +287,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ArenaStringPtr type_url_;
::google::protobuf::internal::ArenaStringPtr value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
@@ -333,7 +334,6 @@
inline PROTOBUF_ALWAYS_INLINE void Any::set_type_url(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.type_url_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Any.type_url)
}
@@ -348,12 +348,10 @@
}
inline void Any::_internal_set_type_url(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.type_url_.Set(value, GetArena());
}
inline std::string* Any::_internal_mutable_type_url() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.type_url_.Mutable( GetArena());
}
inline std::string* Any::release_type_url() {
@@ -386,7 +384,6 @@
inline PROTOBUF_ALWAYS_INLINE void Any::set_value(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Any.value)
}
@@ -401,12 +398,10 @@
}
inline void Any::_internal_set_value(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_.Set(value, GetArena());
}
inline std::string* Any::_internal_mutable_value() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.value_.Mutable( GetArena());
}
inline std::string* Any::release_value() {
diff --git a/src/google/protobuf/api.pb.cc b/src/google/protobuf/api.pb.cc
index d77f025..10ce649 100644
--- a/src/google/protobuf/api.pb.cc
+++ b/src/google/protobuf/api.pb.cc
@@ -238,9 +238,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fapi_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fapi_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fapi_2eproto(&descriptor_table_google_2fprotobuf_2fapi_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -250,15 +247,8 @@
using HasBits = decltype(std::declval<Api>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(Api, _impl_._has_bits_);
- static const ::google::protobuf::SourceContext& source_context(const Api* msg);
- static void set_has_source_context(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::SourceContext& Api::_Internal::source_context(const Api* msg) {
- return *msg->_impl_.source_context_;
-}
void Api::clear_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
_impl_.options_.Clear();
@@ -335,12 +325,15 @@
const ::google::protobuf::MessageLite::ClassData*
Api::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Api::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Api, _impl_._cached_size_),
+ false,
+ },
+ &Api::MergeImpl,
+ &Api::kDescriptorMethods,
};
return &_data_;
}
@@ -493,8 +486,7 @@
// .google.protobuf.SourceContext source_context = 5;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 5, _Internal::source_context(this),
- _Internal::source_context(this).GetCachedSize(), target, stream);
+ 5, *_impl_.source_context_, _impl_.source_context_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.Mixin mixins = 6;
@@ -576,7 +568,7 @@
}
-void Api::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Api::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Api*>(&to_msg);
auto& from = static_cast<const Api&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -597,7 +589,8 @@
if (!from._internal_version().empty()) {
_this->_internal_set_version(from._internal_version());
}
- if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) {
+ cached_has_bits = from._impl_._has_bits_[0];
+ if (cached_has_bits & 0x00000001u) {
ABSL_DCHECK(from._impl_.source_context_ != nullptr);
if (_this->_impl_.source_context_ == nullptr) {
_this->_impl_.source_context_ =
@@ -605,11 +598,11 @@
} else {
_this->_impl_.source_context_->MergeFrom(*from._impl_.source_context_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (from._internal_syntax() != 0) {
- _this->_internal_set_syntax(from._internal_syntax());
+ _this->_impl_.syntax_ = from._impl_.syntax_;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -644,9 +637,9 @@
}
::google::protobuf::Metadata Api::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fapi_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fapi_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fapi_2eproto[0]);
}
// ===================================================================
@@ -724,12 +717,15 @@
const ::google::protobuf::MessageLite::ClassData*
Method::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Method::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Method, _impl_._cached_size_),
+ false,
+ },
+ &Method::MergeImpl,
+ &Method::kDescriptorMethods,
};
return &_data_;
}
@@ -953,7 +949,7 @@
}
-void Method::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Method::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Method*>(&to_msg);
auto& from = static_cast<const Method&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Method)
@@ -973,13 +969,13 @@
_this->_internal_set_response_type_url(from._internal_response_type_url());
}
if (from._internal_request_streaming() != 0) {
- _this->_internal_set_request_streaming(from._internal_request_streaming());
+ _this->_impl_.request_streaming_ = from._impl_.request_streaming_;
}
if (from._internal_response_streaming() != 0) {
- _this->_internal_set_response_streaming(from._internal_response_streaming());
+ _this->_impl_.response_streaming_ = from._impl_.response_streaming_;
}
if (from._internal_syntax() != 0) {
- _this->_internal_set_syntax(from._internal_syntax());
+ _this->_impl_.syntax_ = from._impl_.syntax_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1013,9 +1009,9 @@
}
::google::protobuf::Metadata Method::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fapi_2eproto[1]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fapi_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fapi_2eproto[1]);
}
// ===================================================================
@@ -1071,12 +1067,15 @@
const ::google::protobuf::MessageLite::ClassData*
Mixin::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Mixin::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Mixin, _impl_._cached_size_),
+ false,
+ },
+ &Mixin::MergeImpl,
+ &Mixin::kDescriptorMethods,
};
return &_data_;
}
@@ -1198,7 +1197,7 @@
}
-void Mixin::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Mixin::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Mixin*>(&to_msg);
auto& from = static_cast<const Mixin&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Mixin)
@@ -1236,9 +1235,9 @@
}
::google::protobuf::Metadata Mixin::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fapi_2eproto[2]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fapi_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fapi_2eproto[2]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -1248,4 +1247,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fapi_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/api.pb.h b/src/google/protobuf/api.pb.h
index f0c5428..fbaa6c5 100644
--- a/src/google/protobuf/api.pb.h
+++ b/src/google/protobuf/api.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -79,21 +73,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Mixin final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Mixin) */ {
+class PROTOBUF_EXPORT Mixin final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Mixin) */ {
public:
inline Mixin() : Mixin(nullptr) {}
~Mixin() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Mixin(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Mixin(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Mixin(const Mixin& from)
- : Mixin(nullptr, from) {}
- Mixin(Mixin&& from) noexcept
- : Mixin() {
- *this = ::std::move(from);
- }
-
+ inline Mixin(const Mixin& from) : Mixin(nullptr, from) {}
+ inline Mixin(Mixin&& from) noexcept
+ : Mixin(nullptr, std::move(from)) {}
inline Mixin& operator=(const Mixin& from) {
CopyFrom(from);
return *this;
@@ -101,9 +92,9 @@
inline Mixin& operator=(Mixin&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -135,22 +126,17 @@
}
static inline const Mixin* internal_default_instance() {
return reinterpret_cast<const Mixin*>(
- &_Mixin_default_instance_);
+ &_Mixin_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 2;
-
- friend void swap(Mixin& a, Mixin& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 2;
+ friend void swap(Mixin& a, Mixin& b) { a.Swap(&b); }
inline void Swap(Mixin* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -170,11 +156,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Mixin& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Mixin& from) {
- Mixin::MergeImpl(*this, from);
- }
+ void MergeFrom(const Mixin& from) { Mixin::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -182,31 +170,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Mixin* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Mixin";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Mixin"; }
+
+ protected:
explicit Mixin(::google::protobuf::Arena* arena);
Mixin(::google::protobuf::Arena* arena, const Mixin& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Mixin(::google::protobuf::Arena* arena, Mixin&& from) noexcept
+ : Mixin(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kRootFieldNumber = 2,
@@ -246,7 +236,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Mixin)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -258,14 +247,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ArenaStringPtr name_;
::google::protobuf::internal::ArenaStringPtr root_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
@@ -273,23 +261,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fapi_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Method final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Method) */ {
+class PROTOBUF_EXPORT Method final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Method) */ {
public:
inline Method() : Method(nullptr) {}
~Method() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Method(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Method(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Method(const Method& from)
- : Method(nullptr, from) {}
- Method(Method&& from) noexcept
- : Method() {
- *this = ::std::move(from);
- }
-
+ inline Method(const Method& from) : Method(nullptr, from) {}
+ inline Method(Method&& from) noexcept
+ : Method(nullptr, std::move(from)) {}
inline Method& operator=(const Method& from) {
CopyFrom(from);
return *this;
@@ -297,9 +283,9 @@
inline Method& operator=(Method&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -331,22 +317,17 @@
}
static inline const Method* internal_default_instance() {
return reinterpret_cast<const Method*>(
- &_Method_default_instance_);
+ &_Method_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 1;
-
- friend void swap(Method& a, Method& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 1;
+ friend void swap(Method& a, Method& b) { a.Swap(&b); }
inline void Swap(Method* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -366,11 +347,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Method& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Method& from) {
- Method::MergeImpl(*this, from);
- }
+ void MergeFrom(const Method& from) { Method::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -378,31 +361,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Method* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Method";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Method"; }
+
+ protected:
explicit Method(::google::protobuf::Arena* arena);
Method(::google::protobuf::Arena* arena, const Method& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Method(::google::protobuf::Arena* arena, Method&& from) noexcept
+ : Method(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kOptionsFieldNumber = 6,
kNameFieldNumber = 1,
@@ -420,16 +405,15 @@
public:
void clear_options() ;
::google::protobuf::Option* mutable_options(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >*
- mutable_options();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* mutable_options();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& _internal_options() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* _internal_mutable_options();
public:
const ::google::protobuf::Option& options(int index) const;
::google::protobuf::Option* add_options();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >&
- options() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& options() const;
// string name = 1;
void clear_name() ;
const std::string& name() const;
@@ -511,7 +495,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Method)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 7, 1,
@@ -523,14 +506,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::Option > options_;
::google::protobuf::internal::ArenaStringPtr name_;
::google::protobuf::internal::ArenaStringPtr request_type_url_;
@@ -543,23 +525,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fapi_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Api final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Api) */ {
+class PROTOBUF_EXPORT Api final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Api) */ {
public:
inline Api() : Api(nullptr) {}
~Api() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Api(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Api(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Api(const Api& from)
- : Api(nullptr, from) {}
- Api(Api&& from) noexcept
- : Api() {
- *this = ::std::move(from);
- }
-
+ inline Api(const Api& from) : Api(nullptr, from) {}
+ inline Api(Api&& from) noexcept
+ : Api(nullptr, std::move(from)) {}
inline Api& operator=(const Api& from) {
CopyFrom(from);
return *this;
@@ -567,9 +547,9 @@
inline Api& operator=(Api&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -601,22 +581,17 @@
}
static inline const Api* internal_default_instance() {
return reinterpret_cast<const Api*>(
- &_Api_default_instance_);
+ &_Api_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(Api& a, Api& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(Api& a, Api& b) { a.Swap(&b); }
inline void Swap(Api* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -636,11 +611,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Api& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Api& from) {
- Api::MergeImpl(*this, from);
- }
+ void MergeFrom(const Api& from) { Api::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -648,31 +625,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Api* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Api";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Api"; }
+
+ protected:
explicit Api(::google::protobuf::Arena* arena);
Api(::google::protobuf::Arena* arena, const Api& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Api(::google::protobuf::Arena* arena, Api&& from) noexcept
+ : Api(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kMethodsFieldNumber = 2,
kOptionsFieldNumber = 3,
@@ -690,16 +669,15 @@
public:
void clear_methods() ;
::google::protobuf::Method* mutable_methods(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Method >*
- mutable_methods();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Method>* mutable_methods();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Method>& _internal_methods() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Method>* _internal_mutable_methods();
public:
const ::google::protobuf::Method& methods(int index) const;
::google::protobuf::Method* add_methods();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Method >&
- methods() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Method>& methods() const;
// repeated .google.protobuf.Option options = 3;
int options_size() const;
private:
@@ -708,16 +686,15 @@
public:
void clear_options() ;
::google::protobuf::Option* mutable_options(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >*
- mutable_options();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* mutable_options();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& _internal_options() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* _internal_mutable_options();
public:
const ::google::protobuf::Option& options(int index) const;
::google::protobuf::Option* add_options();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >&
- options() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& options() const;
// repeated .google.protobuf.Mixin mixins = 6;
int mixins_size() const;
private:
@@ -726,16 +703,15 @@
public:
void clear_mixins() ;
::google::protobuf::Mixin* mutable_mixins(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Mixin >*
- mutable_mixins();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Mixin>* mutable_mixins();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Mixin>& _internal_mixins() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Mixin>* _internal_mutable_mixins();
public:
const ::google::protobuf::Mixin& mixins(int index) const;
::google::protobuf::Mixin* add_mixins();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Mixin >&
- mixins() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Mixin>& mixins() const;
// string name = 1;
void clear_name() ;
const std::string& name() const;
@@ -796,7 +772,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Api)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 7, 4,
@@ -808,14 +783,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::Method > methods_;
@@ -861,7 +835,6 @@
inline PROTOBUF_ALWAYS_INLINE void Api::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Api.name)
}
@@ -876,12 +849,10 @@
}
inline void Api::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Api::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Api::release_name() {
@@ -1008,7 +979,6 @@
inline PROTOBUF_ALWAYS_INLINE void Api::set_version(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.version_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Api.version)
}
@@ -1023,12 +993,10 @@
}
inline void Api::_internal_set_version(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.version_.Set(value, GetArena());
}
inline std::string* Api::_internal_mutable_version() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.version_.Mutable( GetArena());
}
inline std::string* Api::release_version() {
@@ -1105,7 +1073,6 @@
}
inline ::google::protobuf::SourceContext* Api::_internal_mutable_source_context() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.source_context_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::SourceContext>(GetArena());
_impl_.source_context_ = reinterpret_cast<::google::protobuf::SourceContext*>(p);
@@ -1113,6 +1080,7 @@
return _impl_.source_context_;
}
inline ::google::protobuf::SourceContext* Api::mutable_source_context() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::SourceContext* _msg = _internal_mutable_source_context();
// @@protoc_insertion_point(field_mutable:google.protobuf.Api.source_context)
return _msg;
@@ -1206,7 +1174,6 @@
}
inline void Api::_internal_set_syntax(::google::protobuf::Syntax value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.syntax_ = value;
}
@@ -1228,7 +1195,6 @@
inline PROTOBUF_ALWAYS_INLINE void Method::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Method.name)
}
@@ -1243,12 +1209,10 @@
}
inline void Method::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Method::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Method::release_name() {
@@ -1281,7 +1245,6 @@
inline PROTOBUF_ALWAYS_INLINE void Method::set_request_type_url(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.request_type_url_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Method.request_type_url)
}
@@ -1296,12 +1259,10 @@
}
inline void Method::_internal_set_request_type_url(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.request_type_url_.Set(value, GetArena());
}
inline std::string* Method::_internal_mutable_request_type_url() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.request_type_url_.Mutable( GetArena());
}
inline std::string* Method::release_request_type_url() {
@@ -1339,7 +1300,6 @@
}
inline void Method::_internal_set_request_streaming(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.request_streaming_ = value;
}
@@ -1357,7 +1317,6 @@
inline PROTOBUF_ALWAYS_INLINE void Method::set_response_type_url(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.response_type_url_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Method.response_type_url)
}
@@ -1372,12 +1331,10 @@
}
inline void Method::_internal_set_response_type_url(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.response_type_url_.Set(value, GetArena());
}
inline std::string* Method::_internal_mutable_response_type_url() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.response_type_url_.Mutable( GetArena());
}
inline std::string* Method::release_response_type_url() {
@@ -1415,7 +1372,6 @@
}
inline void Method::_internal_set_response_streaming(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.response_streaming_ = value;
}
@@ -1483,7 +1439,6 @@
}
inline void Method::_internal_set_syntax(::google::protobuf::Syntax value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.syntax_ = value;
}
@@ -1505,7 +1460,6 @@
inline PROTOBUF_ALWAYS_INLINE void Mixin::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Mixin.name)
}
@@ -1520,12 +1474,10 @@
}
inline void Mixin::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Mixin::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Mixin::release_name() {
@@ -1558,7 +1510,6 @@
inline PROTOBUF_ALWAYS_INLINE void Mixin::set_root(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.root_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Mixin.root)
}
@@ -1573,12 +1524,10 @@
}
inline void Mixin::_internal_set_root(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.root_.Set(value, GetArena());
}
inline std::string* Mixin::_internal_mutable_root() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.root_.Mutable( GetArena());
}
inline std::string* Mixin::release_root() {
diff --git a/src/google/protobuf/arena.cc b/src/google/protobuf/arena.cc
index c854413..023e9c2 100644
--- a/src/google/protobuf/arena.cc
+++ b/src/google/protobuf/arena.cc
@@ -26,10 +26,6 @@
#include "google/protobuf/thread_safe_arena.h"
-#ifdef ADDRESS_SANITIZER
-#include <sanitizer/asan_interface.h>
-#endif // ADDRESS_SANITIZER
-
// Must be included last.
#include "google/protobuf/port_def.inc"
@@ -91,11 +87,9 @@
space_allocated_(space_allocated) {}
void operator()(SizedPtr mem) const {
-#ifdef ADDRESS_SANITIZER
// This memory was provided by the underlying allocator as unpoisoned,
// so return it in an unpoisoned state.
- ASAN_UNPOISON_MEMORY_REGION(mem.p, mem.n);
-#endif // ADDRESS_SANITIZER
+ PROTOBUF_UNPOISON_MEMORY_REGION(mem.p, mem.n);
if (dealloc_) {
dealloc_(mem.p, mem.n);
} else {
@@ -272,9 +266,7 @@
// Previous writes must take effect before writing new head.
head_.store(new_head, std::memory_order_release);
-#ifdef ADDRESS_SANITIZER
- ASAN_POISON_MEMORY_REGION(ptr(), limit_ - ptr());
-#endif // ADDRESS_SANITIZER
+ PROTOBUF_POISON_MEMORY_REGION(ptr(), limit_ - ptr());
}
uint64_t SerialArena::SpaceUsed() const {
@@ -681,10 +673,8 @@
size_t space_allocated = 0;
auto mem = Free(&space_allocated);
if (alloc_policy_.is_user_owned_initial_block()) {
-#ifdef ADDRESS_SANITIZER
// Unpoison the initial block, now that it's going back to the user.
- ASAN_UNPOISON_MEMORY_REGION(mem.p, mem.n);
-#endif // ADDRESS_SANITIZER
+ PROTOBUF_UNPOISON_MEMORY_REGION(mem.p, mem.n);
space_allocated += mem.n;
} else if (mem.n > 0) {
GetDeallocator(alloc_policy_.get(), &space_allocated)(mem);
diff --git a/src/google/protobuf/arena.h b/src/google/protobuf/arena.h
index 4370990..c52219b 100644
--- a/src/google/protobuf/arena.h
+++ b/src/google/protobuf/arena.h
@@ -10,7 +10,10 @@
#ifndef GOOGLE_PROTOBUF_ARENA_H__
#define GOOGLE_PROTOBUF_ARENA_H__
+#include <cstddef>
+#include <cstdint>
#include <limits>
+#include <new>
#include <string>
#include <type_traits>
#include <utility>
@@ -26,8 +29,11 @@
#include <typeinfo>
#endif
+#include "absl/base/attributes.h"
#include "absl/log/absl_check.h"
+#include "absl/utility/internal/if_constexpr.h"
#include "google/protobuf/arena_align.h"
+#include "google/protobuf/arena_allocation_policy.h"
#include "google/protobuf/port.h"
#include "google/protobuf/serial_arena.h"
#include "google/protobuf/thread_safe_arena.h"
@@ -48,6 +54,9 @@
class MessageLite;
template <typename Key, typename T>
class Map;
+namespace internal {
+struct RepeatedFieldBase;
+} // namespace internal
namespace arena_metrics {
@@ -65,6 +74,7 @@
class InternalMetadata; // defined in metadata_lite.h
class LazyField; // defined in lazy_field.h
class EpsCopyInputStream; // defined in parse_context.h
+class UntypedMapBase; // defined in map.h
class RepeatedPtrFieldBase; // defined in repeated_ptr_field.h
class TcParser; // defined in generated_message_tctable_impl.h
@@ -209,7 +219,7 @@
internal::ThreadSafeArena::kBlockHeaderSize +
internal::ThreadSafeArena::kSerialArenaSize;
- inline ~Arena() {}
+ inline ~Arena() = default;
// API to create proto2 message objects on the arena. If the arena passed in
// is nullptr, then a heap allocated object is returned. Type T must be a
@@ -242,27 +252,31 @@
return CreateMessageInternal<Type>(arena, std::forward<Args>(args)...);
}
- // API to create any objects on the arena. Note that only the object will
- // be created on the arena; the underlying ptrs (in case of a proto2 message)
- // will be still heap allocated. Proto messages should usually be allocated
- // with CreateMessage<T>() instead.
+ // API to create any objects on the arena.
//
- // Note that even if T satisfies the arena message construction protocol
- // (InternalArenaConstructable_ trait and optional DestructorSkippable_
- // trait), as described above, this function does not follow the protocol;
- // instead, it treats T as a black-box type, just as if it did not have these
- // traits. Specifically, T's constructor arguments will always be only those
- // passed to Create<T>() -- no additional arena pointer is implicitly added.
- // Furthermore, the destructor will always be called at arena destruction time
- // (unless the destructor is trivial). Hence, from T's point of view, it is as
- // if the object were allocated on the heap (except that the underlying memory
- // is obtained from the arena).
+ // If an object is arena-constructable, this API behaves like
+ // Arena::CreateMessage. Arena constructable types are expected to accept
+ // Arena* as the first argument and one is implicitly added by the API.
+ //
+ // If the object is not arena-constructable, only the object will be created
+ // on the arena; the underlying ptrs will be still heap allocated.
template <typename T, typename... Args>
PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) {
- if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
- return new T(std::forward<Args>(args)...);
- }
- return new (arena->AllocateInternal<T>()) T(std::forward<Args>(args)...);
+ return absl::utility_internal::IfConstexprElse<
+ is_arena_constructable<T>::value>(
+ // Arena-constructable
+ [arena](auto&&... args) {
+ return CreateMessage<T>(arena, std::forward<Args>(args)...);
+ },
+ // Non arena-constructable
+ [arena](auto&&... args) {
+ if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
+ return new T(std::forward<Args>(args)...);
+ }
+ return new (arena->AllocateInternal<T>())
+ T(std::forward<Args>(args)...);
+ },
+ std::forward<Args>(args)...);
}
// API to delete any objects not on an arena. This can be used to safely
@@ -659,6 +673,8 @@
template <typename>
friend class RepeatedField; // For ReturnArrayMemory
friend class internal::RepeatedPtrFieldBase; // For ReturnArrayMemory
+ friend class internal::UntypedMapBase; // For ReturnArenaMemory
+
friend struct internal::ArenaTestPeer;
};
diff --git a/src/google/protobuf/arena_test_util.h b/src/google/protobuf/arena_test_util.h
index 40b44c1..5857056 100644
--- a/src/google/protobuf/arena_test_util.h
+++ b/src/google/protobuf/arena_test_util.h
@@ -16,6 +16,9 @@
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
+// Must be included last.
+#include "google/protobuf/port_def.inc"
+
namespace google {
namespace protobuf {
@@ -31,7 +34,12 @@
out.SetSerializationDeterministic(true);
message.SerializePartialToCodedStream(&out);
}
+#if defined(PROTOBUF_ASAN) || defined(PROTOBUF_TSAN) || defined(PROTOBUF_MSAN)
+ // Make the test smaller in sanitizer mode.
+ const int kMaxIters = 200;
+#else
const int kMaxIters = 900;
+#endif
const int stride = s.size() <= kMaxIters ? 1 : s.size() / kMaxIters;
const int start = stride == 1 || use_arena ? 0 : (stride + 1) / 2;
for (int i = start; i < s.size(); i += stride) {
@@ -135,4 +143,6 @@
} // namespace protobuf
} // namespace google
+#include "google/protobuf/port_undef.inc"
+
#endif // GOOGLE_PROTOBUF_ARENA_TEST_UTIL_H__
diff --git a/src/google/protobuf/arena_unittest.cc b/src/google/protobuf/arena_unittest.cc
index 673e3e6..d1afa07 100644
--- a/src/google/protobuf/arena_unittest.cc
+++ b/src/google/protobuf/arena_unittest.cc
@@ -11,12 +11,12 @@
#include <array>
#include <atomic>
#include <cstddef>
+#include <cstdint>
#include <cstring>
#include <memory>
#include <string>
#include <thread>
#include <type_traits>
-#include <typeinfo>
#include <utility>
#include <vector>
@@ -26,6 +26,7 @@
#include "absl/log/absl_log.h"
#include "absl/strings/string_view.h"
#include "absl/synchronization/barrier.h"
+#include "absl/utility/utility.h"
#include "google/protobuf/arena_test_util.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/extension_set.h"
@@ -47,7 +48,7 @@
#include "google/protobuf/port_def.inc"
using proto2_arena_unittest::ArenaMessage;
-using protobuf_unittest::ForeignMessage;
+using protobuf_unittest::NestedTestAllTypes;
using protobuf_unittest::TestAllExtensions;
using protobuf_unittest::TestAllTypes;
using protobuf_unittest::TestEmptyMessage;
@@ -316,6 +317,80 @@
strlen(arena_message->optional_string().c_str()));
}
+TEST(ArenaTest, MoveCtorOnArena) {
+ Arena arena;
+
+ ASSERT_EQ(arena.SpaceUsed(), 0);
+
+ auto* original = Arena::CreateMessage<NestedTestAllTypes>(&arena);
+ TestUtil::SetAllFields(original->mutable_payload());
+ TestUtil::ExpectAllFieldsSet(original->payload());
+
+ auto usage_original = arena.SpaceUsed();
+ auto* moved =
+ Arena::CreateMessage<NestedTestAllTypes>(&arena, std::move(*original));
+ auto usage_by_move = arena.SpaceUsed() - usage_original;
+
+ TestUtil::ExpectAllFieldsSet(moved->payload());
+
+ // The only extra allocation with moves is sizeof(NestedTestAllTypes).
+ EXPECT_EQ(usage_by_move, sizeof(NestedTestAllTypes));
+ EXPECT_LT(usage_by_move + sizeof(TestAllTypes), usage_original);
+
+ // Status after move is unspecified and must not be assumed. It's merely
+ // checking current implementation specifics for protobuf internal.
+ TestUtil::ExpectClear(original->payload());
+}
+
+TEST(ArenaTest, RepeatedFieldMoveCtorOnArena) {
+ Arena arena;
+
+ auto* original = Arena::CreateMessage<RepeatedField<int32_t>>(&arena);
+ original->Add(1);
+ original->Add(2);
+ ASSERT_EQ(original->size(), 2);
+ ASSERT_EQ(original->Get(0), 1);
+ ASSERT_EQ(original->Get(1), 2);
+
+ auto* moved = Arena::CreateMessage<RepeatedField<int32_t>>(
+ &arena, std::move(*original));
+
+ EXPECT_EQ(moved->size(), 2);
+ EXPECT_EQ(moved->Get(0), 1);
+ EXPECT_EQ(moved->Get(1), 2);
+
+ // Status after move is unspecified and must not be assumed. It's merely
+ // checking current implementation specifics for protobuf internal.
+ EXPECT_EQ(original->size(), 0);
+}
+
+TEST(ArenaTest, RepeatedPtrFieldMoveCtorOnArena) {
+ Arena arena;
+
+ ASSERT_EQ(arena.SpaceUsed(), 0);
+
+ auto* original = Arena::CreateMessage<RepeatedPtrField<TestAllTypes>>(&arena);
+ auto* msg = original->Add();
+ TestUtil::SetAllFields(msg);
+ TestUtil::ExpectAllFieldsSet(*msg);
+
+ auto usage_original = arena.SpaceUsed();
+ auto* moved = Arena::CreateMessage<RepeatedPtrField<TestAllTypes>>(
+ &arena, std::move(*original));
+ auto usage_by_move = arena.SpaceUsed() - usage_original;
+
+ EXPECT_EQ(moved->size(), 1);
+ TestUtil::ExpectAllFieldsSet(moved->Get(0));
+
+ // The only extra allocation with moves is sizeof(RepeatedPtrField).
+ EXPECT_EQ(usage_by_move, sizeof(internal::RepeatedPtrFieldBase));
+ EXPECT_LT(usage_by_move + sizeof(TestAllTypes), usage_original);
+
+ // Status after move is unspecified and must not be assumed. It's merely
+ // checking current implementation specifics for protobuf internal.
+ EXPECT_EQ(original->size(), 0);
+}
+
struct OnlyArenaConstructible {
using InternalArenaConstructable_ = void;
explicit OnlyArenaConstructible(Arena* arena) {}
@@ -375,6 +450,29 @@
return nullptr;
}
+TEST(ArenaTest, CreateArenaConstructable) {
+ TestAllTypes original;
+ TestUtil::SetAllFields(&original);
+
+ Arena arena;
+ auto copied = Arena::Create<TestAllTypes>(&arena, original);
+
+ TestUtil::ExpectAllFieldsSet(*copied);
+ EXPECT_EQ(copied->GetArena(), &arena);
+ EXPECT_EQ(copied->optional_nested_message().GetArena(), &arena);
+}
+
+TEST(ArenaTest, CreateRepeatedPtrField) {
+ Arena arena;
+ auto repeated = Arena::Create<RepeatedPtrField<TestAllTypes>>(&arena);
+ TestUtil::SetAllFields(repeated->Add());
+
+ TestUtil::ExpectAllFieldsSet(repeated->Get(0));
+ EXPECT_EQ(repeated->GetArena(), &arena);
+ EXPECT_EQ(repeated->Get(0).GetArena(), &arena);
+ EXPECT_EQ(repeated->Get(0).optional_nested_message().GetArena(), &arena);
+}
+
TEST(ArenaTest, CreateMessageDispatchesToSpecialFunctions) {
hook_called = "";
Arena::CreateMessage<DispatcherTestProto>(nullptr);
@@ -855,20 +953,6 @@
}
TEST(ArenaTest, RepeatedPtrFieldAddClearedTest) {
-#ifndef PROTOBUF_FUTURE_REMOVE_CLEARED_API
- {
- PROTOBUF_IGNORE_DEPRECATION_START
- RepeatedPtrField<TestAllTypes> repeated_field;
- EXPECT_TRUE(repeated_field.empty());
- EXPECT_EQ(0, repeated_field.size());
- // Ownership is passed to repeated_field.
- TestAllTypes* cleared = new TestAllTypes();
- repeated_field.AddCleared(cleared);
- EXPECT_TRUE(repeated_field.empty());
- EXPECT_EQ(0, repeated_field.size());
- PROTOBUF_IGNORE_DEPRECATION_STOP
- }
-#endif // !PROTOBUF_FUTURE_REMOVE_CLEARED_API
{
RepeatedPtrField<TestAllTypes> repeated_field;
EXPECT_TRUE(repeated_field.empty());
@@ -1571,7 +1655,7 @@
}
TEST(ArenaTest, SpaceReusePoisonsAndUnpoisonsMemory) {
-#ifdef ADDRESS_SANITIZER
+#ifdef PROTOBUF_ASAN
char buf[1024]{};
constexpr int kSize = 32;
{
@@ -1605,9 +1689,9 @@
ASSERT_FALSE(__asan_address_is_poisoned(&c));
}
-#else // ADDRESS_SANITIZER
+#else // PROTOBUF_ASAN
GTEST_SKIP();
-#endif // ADDRESS_SANITIZER
+#endif // PROTOBUF_ASAN
}
diff --git a/src/google/protobuf/bridge/message_set.proto b/src/google/protobuf/bridge/message_set.proto
index 2f23f9b..83e8bb0 100644
--- a/src/google/protobuf/bridge/message_set.proto
+++ b/src/google/protobuf/bridge/message_set.proto
@@ -72,5 +72,5 @@
message MessageSet {
option message_set_wire_format = true;
- extensions 4 to max;
+ extensions 4 to max [verification = UNVERIFIED];
}
diff --git a/src/google/protobuf/compiler/BUILD.bazel b/src/google/protobuf/compiler/BUILD.bazel
index 84d406d..13a340e 100644
--- a/src/google/protobuf/compiler/BUILD.bazel
+++ b/src/google/protobuf/compiler/BUILD.bazel
@@ -82,6 +82,9 @@
cc_library(
name = "versions",
+ srcs = [
+ "versions.cc",
+ ],
hdrs = [
"versions.h",
],
@@ -90,7 +93,25 @@
visibility = [
"//src/google/protobuf/compiler:__subpackages__",
],
- deps = ["@com_google_absl//absl/strings"],
+ deps = [
+ ":code_generator",
+ "//src/google/protobuf:port_def",
+ "@com_google_absl//absl/log:absl_check",
+ "@com_google_absl//absl/strings",
+ ],
+)
+
+cc_test(
+ name = "versions_test",
+ size = "small",
+ srcs = ["versions_test.cc"],
+ deps = [
+ ":versions",
+ "//src/google/protobuf:test_textproto",
+ "@com_google_absl//absl/memory",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
+ ],
)
cc_library(
@@ -112,7 +133,6 @@
":code_generator",
":importer",
":retention",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler/allowlists",
"@com_google_absl//absl/algorithm",
@@ -243,6 +263,7 @@
visibility = [
"//:__pkg__",
"//python:__pkg__",
+ "//ruby:__pkg__",
],
)
@@ -257,7 +278,6 @@
deps = [
":code_generator",
"//src/google/protobuf:cc_test_protos",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:descriptor_visitor",
"//src/google/protobuf/io",
"//src/google/protobuf/stubs",
diff --git a/src/google/protobuf/compiler/allowlists/BUILD.bazel b/src/google/protobuf/compiler/allowlists/BUILD.bazel
index e6671c0..dc84829 100644
--- a/src/google/protobuf/compiler/allowlists/BUILD.bazel
+++ b/src/google/protobuf/compiler/allowlists/BUILD.bazel
@@ -21,10 +21,8 @@
cc_library(
name = "allowlists",
srcs = [
- "editions.cc",
"empty_package.cc",
"open_enum.cc",
- "unused_imports.cc",
],
hdrs = ["allowlists.h"],
copts = COPTS,
diff --git a/src/google/protobuf/compiler/allowlists/editions.cc b/src/google/protobuf/compiler/allowlists/editions.cc
deleted file mode 100644
index f883ece..0000000
--- a/src/google/protobuf/compiler/allowlists/editions.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2023 Google LLC. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-#include "absl/strings/string_view.h"
-#include "google/protobuf/compiler/allowlists/allowlist.h"
-#include "google/protobuf/compiler/allowlists/allowlists.h"
-
-namespace google {
-namespace protobuf {
-namespace compiler {
-
-// NOTE: These files have early default access to go/editions. The protoc flag
-// `--experimental_editions` can also be used to enable editions.
-
-static constexpr auto kEarlyEditionsFile = internal::MakeAllowlist(
- {
-// Intentionally left blank.
- "google/protobuf/",
- "upb/",
- },
- internal::AllowlistFlags::kMatchPrefix);
-
-bool IsEarlyEditionsFile(absl::string_view file) {
- return kEarlyEditionsFile.Allows(file);
-}
-} // namespace compiler
-} // namespace protobuf
-} // namespace google
diff --git a/src/google/protobuf/compiler/allowlists/unused_imports.cc b/src/google/protobuf/compiler/allowlists/unused_imports.cc
deleted file mode 100644
index d9d4b6f..0000000
--- a/src/google/protobuf/compiler/allowlists/unused_imports.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-#include "absl/strings/string_view.h"
-#include "google/protobuf/compiler/allowlists/allowlist.h"
-#include "google/protobuf/compiler/allowlists/allowlists.h"
-
-namespace google {
-namespace protobuf {
-namespace compiler {
-
-// NOTE: Allowlists in this file are not accepting new entries unless otherwise
-// specified.
-// TODO: Remove when empty.
-static constexpr auto kUnusedImports = internal::MakeAllowlist({
-// Intentionally left blank.
-});
-
-bool IsUnusedImportFile(absl::string_view file) {
- return kUnusedImports.Allows(file);
-}
-} // namespace compiler
-} // namespace protobuf
-} // namespace google
diff --git a/src/google/protobuf/compiler/code_generator_unittest.cc b/src/google/protobuf/compiler/code_generator_unittest.cc
index a98214b..5ad6812 100644
--- a/src/google/protobuf/compiler/code_generator_unittest.cc
+++ b/src/google/protobuf/compiler/code_generator_unittest.cc
@@ -33,6 +33,8 @@
namespace compiler {
namespace {
+#define ASSERT_OK(x) ASSERT_TRUE(x.ok()) << x.message();
+
using ::testing::HasSubstr;
using ::testing::NotNull;
@@ -168,7 +170,7 @@
TEST_F(CodeGeneratorTest, GetResolvedSourceFeaturesRoot) {
TestGenerator generator;
generator.set_feature_extensions({GetExtensionReflection(pb::test)});
- pool_.SetFeatureSetDefaults(*generator.BuildFeatureSetDefaults());
+ ASSERT_OK(pool_.SetFeatureSetDefaults(*generator.BuildFeatureSetDefaults()));
ASSERT_THAT(BuildFile(DescriptorProto::descriptor()->file()), NotNull());
ASSERT_THAT(BuildFile(pb::TestMessage::descriptor()->file()), NotNull());
@@ -201,7 +203,7 @@
TEST_F(CodeGeneratorTest, GetResolvedSourceFeaturesInherited) {
TestGenerator generator;
generator.set_feature_extensions({GetExtensionReflection(pb::test)});
- pool_.SetFeatureSetDefaults(*generator.BuildFeatureSetDefaults());
+ ASSERT_OK(pool_.SetFeatureSetDefaults(*generator.BuildFeatureSetDefaults()));
ASSERT_THAT(BuildFile(DescriptorProto::descriptor()->file()), NotNull());
ASSERT_THAT(BuildFile(pb::TestMessage::descriptor()->file()), NotNull());
diff --git a/src/google/protobuf/compiler/command_line_interface.cc b/src/google/protobuf/compiler/command_line_interface.cc
index a749f79..e879f14 100644
--- a/src/google/protobuf/compiler/command_line_interface.cc
+++ b/src/google/protobuf/compiler/command_line_interface.cc
@@ -17,11 +17,11 @@
#include "absl/algorithm/container.h"
#include "absl/container/btree_set.h"
#include "absl/container/flat_hash_map.h"
+#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/types/span.h"
#include "google/protobuf/compiler/allowlists/allowlists.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/descriptor_visitor.h"
#include "google/protobuf/feature_resolver.h"
@@ -978,7 +978,8 @@
bool ContainsProto3Optional(const Descriptor* desc) {
for (int i = 0; i < desc->field_count(); i++) {
- if (FieldDescriptorLegacy(desc->field(i)).has_optional_keyword()) {
+ if (desc->field(i)->real_containing_oneof() == nullptr &&
+ desc->field(i)->containing_oneof() != nullptr) {
return true;
}
}
@@ -991,8 +992,7 @@
}
bool ContainsProto3Optional(const FileDescriptor* file) {
- if (FileDescriptorLegacy(file).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO3) {
+ if (file->edition() == Edition::EDITION_PROTO3) {
for (int i = 0; i < file->message_type_count(); i++) {
if (ContainsProto3Optional(file->message_type(i))) {
return true;
@@ -1556,7 +1556,8 @@
ABSL_LOG(ERROR) << defaults.status();
return false;
}
- pool.SetFeatureSetDefaults(std::move(defaults).value());
+ absl::Status status = pool.SetFeatureSetDefaults(std::move(defaults).value());
+ ABSL_CHECK(status.ok()) << status.message();
return true;
}
@@ -1596,9 +1597,10 @@
}
parsed_files->push_back(parsed_file);
- if (!experimental_editions_ && !IsEarlyEditionsFile(parsed_file->name())) {
- if (FileDescriptorLegacy(parsed_file).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS) {
+ if (!experimental_editions_ &&
+ !absl::StartsWith(parsed_file->name(), "google/protobuf/") &&
+ !absl::StartsWith(parsed_file->name(), "upb/")) {
+ if (parsed_file->edition() >= Edition::EDITION_2023) {
std::cerr
<< parsed_file->name()
<< ": This file uses editions, but --experimental_editions has not "
@@ -2549,29 +2551,44 @@
bool CommandLineInterface::EnforceEditionsSupport(
const std::string& codegen_name, uint64_t supported_features,
+ Edition minimum_edition, Edition maximum_edition,
const std::vector<const FileDescriptor*>& parsed_files) const {
- if (supported_features & CodeGenerator::FEATURE_SUPPORTS_EDITIONS) {
- // This generator explicitly supports editions.
- return true;
- }
if (experimental_editions_) {
// The user has explicitly specified the experimental flag.
return true;
}
for (const auto* fd : parsed_files) {
- // Skip enforcement for allowlisted files.
- if (IsEarlyEditionsFile(fd->name())) continue;
+ if (fd->edition() < Edition::EDITION_2023) {
+ // Legacy proto2/proto3 files don't need any checks.
+ continue;
+ }
- if (FileDescriptorLegacy(fd).syntax() ==
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
- std::cerr
- << fd->name() << ": is an editions file, but code generator "
- << codegen_name
- << " hasn't been updated to support editions yet. Please ask "
- "the owner of this code generator to add support or "
- "switch back to proto2/proto3.\n\nSee "
- "https://protobuf.dev/editions/overview/ for more information."
- << std::endl;
+ if (absl::StartsWith(fd->name(), "google/protobuf/") ||
+ absl::StartsWith(fd->name(), "upb/")) {
+ continue;
+ }
+ if ((supported_features & CodeGenerator::FEATURE_SUPPORTS_EDITIONS) == 0) {
+ std::cerr << absl::Substitute(
+ "$0: is an editions file, but code generator $1 hasn't been "
+ "updated to support editions yet. Please ask the owner of this code "
+ "generator to add support or switch back to proto2/proto3.\n\nSee "
+ "https://protobuf.dev/editions/overview/ for more information.",
+ fd->name(), codegen_name);
+ return false;
+ }
+ if (fd->edition() < minimum_edition) {
+ std::cerr << absl::Substitute(
+ "$0: is a file using edition $2, which isn't supported by code "
+ "generator $1. Please upgrade your file to at least edition $3.",
+ fd->name(), codegen_name, fd->edition(), minimum_edition);
+ return false;
+ }
+ if (fd->edition() > maximum_edition) {
+ std::cerr << absl::Substitute(
+ "$0: is a file using edition $2, which isn't supported by code "
+ "generator $1. Please ask the owner of this code generator to add "
+ "support or switch back to a maximum of edition $3.",
+ fd->name(), codegen_name, fd->edition(), maximum_edition);
return false;
}
}
@@ -2620,7 +2637,9 @@
if (!EnforceEditionsSupport(
output_directive.name,
- output_directive.generator->GetSupportedFeatures(), parsed_files)) {
+ output_directive.generator->GetSupportedFeatures(),
+ output_directive.generator->GetMinimumEdition(),
+ output_directive.generator->GetMaximumEdition(), parsed_files)) {
return false;
}
@@ -2824,11 +2843,15 @@
// Generator returned an error.
*error = response.error();
return false;
- } else if (!EnforceProto3OptionalSupport(
- plugin_name, response.supported_features(), parsed_files)) {
+ }
+ if (!EnforceProto3OptionalSupport(plugin_name, response.supported_features(),
+ parsed_files)) {
return false;
- } else if (!EnforceEditionsSupport(plugin_name, response.supported_features(),
- parsed_files)) {
+ }
+ if (!EnforceEditionsSupport(plugin_name, response.supported_features(),
+ static_cast<Edition>(response.minimum_edition()),
+ static_cast<Edition>(response.maximum_edition()),
+ parsed_files)) {
return false;
}
diff --git a/src/google/protobuf/compiler/command_line_interface.h b/src/google/protobuf/compiler/command_line_interface.h
index 107c618..4bfee6a 100644
--- a/src/google/protobuf/compiler/command_line_interface.h
+++ b/src/google/protobuf/compiler/command_line_interface.h
@@ -224,6 +224,7 @@
bool EnforceEditionsSupport(
const std::string& codegen_name, uint64_t supported_features,
+ Edition minimum_edition, Edition maximum_edition,
const std::vector<const FileDescriptor*>& parsed_files) const;
diff --git a/src/google/protobuf/compiler/command_line_interface_unittest.cc b/src/google/protobuf/compiler/command_line_interface_unittest.cc
index 88e7412..d993798 100644
--- a/src/google/protobuf/compiler/command_line_interface_unittest.cc
+++ b/src/google/protobuf/compiler/command_line_interface_unittest.cc
@@ -1530,6 +1530,74 @@
"google.protobuf.FeatureSet");
}
+TEST_F(CommandLineInterfaceTest, Plugin_DeprecatedEdition) {
+ CreateTempFile("foo.proto", R"schema(
+ edition = "2023";
+ message Foo {
+ int32 i = 1;
+ }
+ )schema");
+
+ SetMockGeneratorTestCase("high_minimum");
+ Run("protocol_compiler "
+ "--proto_path=$tmpdir foo.proto --plug_out=$tmpdir");
+
+ ExpectErrorSubstring(
+ "foo.proto: This file uses editions, but --experimental_editions has not "
+ "been enabled. This syntax is experimental and should be avoided.");
+}
+
+TEST_F(CommandLineInterfaceTest, Plugin_FutureEdition) {
+ CreateTempFile("foo.proto", R"schema(
+ edition = "2023";
+ message Foo {
+ int32 i = 1;
+ }
+ )schema");
+
+ SetMockGeneratorTestCase("low_maximum");
+ Run("protocol_compiler "
+ "--proto_path=$tmpdir foo.proto --plug_out=$tmpdir");
+
+ ExpectErrorSubstring(
+ "foo.proto: This file uses editions, but --experimental_editions has not "
+ "been enabled. This syntax is experimental and should be avoided.");
+}
+
+TEST_F(CommandLineInterfaceTest, Plugin_VersionSkewFuture) {
+ CreateTempFile("foo.proto", R"schema(
+ edition = "99997_TEST_ONLY";
+ message Foo {
+ int32 i = 1;
+ }
+ )schema");
+
+ SetMockGeneratorTestCase("high_maximum");
+ Run("protocol_compiler "
+ "--proto_path=$tmpdir foo.proto --plug_out=$tmpdir");
+
+ ExpectErrorSubstring(
+ "foo.proto:2:5: Edition 99997_TEST_ONLY is later than the maximum "
+ "supported edition 2023");
+}
+
+TEST_F(CommandLineInterfaceTest, Plugin_VersionSkewPast) {
+ CreateTempFile("foo.proto", R"schema(
+ edition = "1_TEST_ONLY";
+ message Foo {
+ int32 i = 1;
+ }
+ )schema");
+
+ SetMockGeneratorTestCase("low_minimum");
+ Run("protocol_compiler "
+ "--proto_path=$tmpdir foo.proto --plug_out=$tmpdir");
+
+ ExpectErrorSubstring(
+ "foo.proto:2:5: Edition 1_TEST_ONLY is earlier than the minimum "
+ "supported edition PROTO2");
+}
+
TEST_F(CommandLineInterfaceTest, Plugin_MissingFeatureExtensionError) {
CreateTempFile("foo.proto", R"schema(
edition = "2023";
diff --git a/src/google/protobuf/compiler/cpp/extension.cc b/src/google/protobuf/compiler/cpp/extension.cc
index a13aae2..a06128b 100644
--- a/src/google/protobuf/compiler/cpp/extension.cc
+++ b/src/google/protobuf/compiler/cpp/extension.cc
@@ -12,6 +12,7 @@
#include "google/protobuf/compiler/cpp/extension.h"
#include <string>
+#include <vector>
#include "absl/strings/str_cat.h"
#include "absl/strings/str_replace.h"
@@ -26,8 +27,6 @@
namespace compiler {
namespace cpp {
-using ::google::protobuf::internal::cpp::IsLazilyInitializedFile;
-
ExtensionGenerator::ExtensionGenerator(const FieldDescriptor* descriptor,
const Options& options,
MessageSCCAnalyzer* scc_analyzer)
@@ -68,6 +67,7 @@
variables_["constant_name"] = FieldConstantName(descriptor_);
variables_["field_type"] =
absl::StrCat(static_cast<int>(descriptor_->type()));
+ variables_["repeated"] = descriptor_->is_repeated() ? "true" : "false";
variables_["packed"] = descriptor_->is_packed() ? "true" : "false";
variables_["dllexport_decl"] = options.dllexport_decl;
@@ -122,8 +122,8 @@
} else if (descriptor_->message_type()) {
// We have to initialize the default instance for extensions at
// registration time.
- return absl::StrCat(FieldMessageTypeName(descriptor_, options_),
- "::default_instance()");
+ return absl::StrCat("&", QualifiedDefaultInstanceName(
+ descriptor_->message_type(), options_));
} else {
return DefaultValue(options_, descriptor_);
}
@@ -162,58 +162,13 @@
}},
{"define_extension_id",
[&] {
- if (IsLazilyInitializedFile(descriptor_->file()->name())) {
- p->Emit(R"cc(
- PROTOBUF_CONSTINIT$ dllexport_decl$
- PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
- ExtensionIdentifier<$extendee$, ::_pbi::$type_traits$,
- $field_type$, $packed$>
- $scoped_name$($constant_name$);
- )cc");
- return;
- }
-
- bool should_verify =
- // Only verify msgs.
- descriptor_->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
- // Options say to verify.
- ShouldVerify(descriptor_->message_type(), options_,
- scc_analyzer_) &&
- ShouldVerify(descriptor_->containing_type(), options_,
- scc_analyzer_);
-
- if (!should_verify) {
- p->Emit(R"cc(
- $dllexport_decl $PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
- ExtensionIdentifier<$extendee$, ::_pbi::$type_traits$,
- $field_type$, $packed$>
- $scoped_name$($constant_name$, $default_str$);
- )cc");
- return;
- }
-
- const auto& options = descriptor_->options();
- if (options.has_lazy()) {
- p->Emit(
- {{"is_lazy", options.lazy() ? "kLazy" : "kEager"}},
- R"cc(
- $dllexport_decl $PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
- ExtensionIdentifier<$extendee$, ::_pbi::$type_traits$,
- $field_type$, $packed$>
- $scoped_name$($constant_name$, $default_str$,
- &$message_type$::InternalVerify,
- ::_pbi::LazyAnnotation::$is_lazy$);
- )cc");
- } else {
- p->Emit(
- R"cc(
- $dllexport_decl $PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
- ExtensionIdentifier<$extendee$, ::_pbi::$type_traits$,
- $field_type$, $packed$>
- $scoped_name$($constant_name$, $default_str$,
- &$message_type$::InternalVerify);
- )cc");
- }
+ p->Emit(R"cc(
+ PROTOBUF_CONSTINIT$ dllexport_decl$
+ PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
+ ExtensionIdentifier<$extendee$, ::_pbi::$type_traits$,
+ $field_type$, $packed$>
+ $scoped_name$($constant_name$, $default_str$);
+ )cc");
}},
},
R"cc(
@@ -223,6 +178,80 @@
)cc");
}
+void ExtensionGenerator::GenerateRegistration(io::Printer* p) {
+ auto vars = p->WithVars(variables_);
+ switch (descriptor_->cpp_type()) {
+ case FieldDescriptor::CPPTYPE_ENUM:
+ p->Emit({{"enum_name", ClassName(descriptor_->enum_type(), true)}},
+ R"cc(
+ ::_pbi::ExtensionSet::RegisterEnumExtension(
+ &$extendee$::default_instance(), $number$, $field_type$,
+ $repeated$, $packed$, $enum_name$_IsValid),
+ )cc");
+ break;
+ case FieldDescriptor::CPPTYPE_MESSAGE: {
+ const bool should_verify =
+ // Only verify msgs.
+ descriptor_->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
+ // Options say to verify.
+ ShouldVerify(descriptor_->message_type(), options_, scc_analyzer_) &&
+ ShouldVerify(descriptor_->containing_type(), options_, scc_analyzer_);
+ const auto message_type = FieldMessageTypeName(descriptor_, options_);
+ auto v = p->WithVars(
+ {{"verify", should_verify
+ ? absl::StrCat("&", message_type, "::InternalVerify")
+ : "nullptr"},
+ {"message_type", message_type},
+ {"lazy", descriptor_->options().has_lazy()
+ ? descriptor_->options().lazy() ? "kLazy" : "kEager"
+ : "kUndefined"}});
+ if (UsingImplicitWeakDescriptor(descriptor_->file(), options_)) {
+ const auto find_index = [](auto* desc) {
+ const std::vector<const Descriptor*> msgs =
+ FlattenMessagesInFile(desc->file());
+ return absl::c_find(msgs, desc) - msgs.begin();
+ };
+ p->Emit(
+ {
+ {"extendee_table",
+ DescriptorTableName(descriptor_->containing_type()->file(),
+ options_)},
+ {"extendee_index", find_index(descriptor_->containing_type())},
+ {"extension_table",
+ DescriptorTableName(descriptor_->message_type()->file(),
+ options_)},
+ {"extension_index", find_index(descriptor_->message_type())},
+ },
+ R"cc(
+ ::_pbi::ExtensionSet::RegisterMessageExtension(
+ ::_pbi::GetPrototypeForWeakDescriptor(&$extendee_table$,
+ $extendee_index$),
+ $number$, $field_type$, $repeated$, $packed$,
+ ::_pbi::GetPrototypeForWeakDescriptor(&$extension_table$,
+ $extension_index$),
+ $verify$, ::_pbi::LazyAnnotation::$lazy$),
+ )cc");
+ } else {
+ p->Emit(R"cc(
+ ::_pbi::ExtensionSet::RegisterMessageExtension(
+ &$extendee$::default_instance(), $number$, $field_type$,
+ $repeated$, $packed$, &$message_type$::default_instance(),
+ $verify$, ::_pbi::LazyAnnotation::$lazy$),
+ )cc");
+ }
+ break;
+ }
+ default:
+ p->Emit(
+ R"cc(
+ ::_pbi::ExtensionSet::RegisterExtension(
+ &$extendee$::default_instance(), $number$, $field_type$,
+ $repeated$, $packed$),
+ )cc");
+ break;
+ }
+}
+
} // namespace cpp
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/cpp/extension.h b/src/google/protobuf/compiler/cpp/extension.h
index aab3b64..0558d65 100644
--- a/src/google/protobuf/compiler/cpp/extension.h
+++ b/src/google/protobuf/compiler/cpp/extension.h
@@ -56,6 +56,8 @@
// Source file stuff.
void GenerateDefinition(io::Printer* p);
+ void GenerateRegistration(io::Printer* p);
+
bool IsScoped() const;
private:
diff --git a/src/google/protobuf/compiler/cpp/field.cc b/src/google/protobuf/compiler/cpp/field.cc
index d2fee86..8c357cf 100644
--- a/src/google/protobuf/compiler/cpp/field.cc
+++ b/src/google/protobuf/compiler/cpp/field.cc
@@ -43,6 +43,8 @@
// This will eventually be renamed to "field", once the existing "field"
// variable is replaced with "field_" everywhere.
{"name", FieldName(field)},
+ // Same as above, but represents internal use.
+ {"name_internal", FieldName(field)},
{"index", field->index()},
{"number", field->number()},
@@ -262,9 +264,8 @@
void HasBitVars(const FieldDescriptor* field, const Options& opts,
absl::optional<uint32_t> idx, std::vector<Sub>& vars) {
if (!idx.has_value()) {
- vars.emplace_back("set_hasbit", "");
- vars.emplace_back("this_set_hasbit", "");
- vars.emplace_back("clear_hasbit", "");
+ vars.emplace_back(Sub("set_hasbit", "").WithSuffix(";"));
+ vars.emplace_back(Sub("clear_hasbit", "").WithSuffix(";"));
return;
}
@@ -284,9 +285,6 @@
vars.emplace_back("has_hasbit", has);
vars.emplace_back(Sub("set_hasbit", set).WithSuffix(";"));
vars.emplace_back(Sub("clear_hasbit", clr).WithSuffix(";"));
-
- set = absl::StrFormat("_this->%s[%d] |= %s;", has_bits, index, mask);
- vars.emplace_back(Sub("this_set_hasbit", set).WithSuffix(";"));
}
void InlinedStringVars(const FieldDescriptor* field, const Options& opts,
@@ -297,7 +295,7 @@
}
// The first bit is the tracking bit for on demand registering ArenaDtor.
- ABSL_CHECK_GT(*idx, 0)
+ ABSL_CHECK_GT(*idx, 0u)
<< "_inlined_string_donated_'s bit 0 is reserved for arena dtor tracking";
int32_t index = *idx / 32;
diff --git a/src/google/protobuf/compiler/cpp/field.h b/src/google/protobuf/compiler/cpp/field.h
index d24d816..764c87f 100644
--- a/src/google/protobuf/compiler/cpp/field.h
+++ b/src/google/protobuf/compiler/cpp/field.h
@@ -121,10 +121,6 @@
virtual void GenerateNonInlineAccessorDefinitions(io::Printer* p) const {}
- virtual void GenerateInternalAccessorDefinitions(io::Printer* p) const {}
-
- virtual void GenerateInternalAccessorDeclarations(io::Printer* p) const {}
-
virtual void GenerateClearingCode(io::Printer* p) const = 0;
virtual void GenerateMessageClearingCode(io::Printer* p) const {
@@ -334,18 +330,6 @@
impl_->GenerateNonInlineAccessorDefinitions(p);
}
- // Generates declarations of accessors that are for internal purposes only.
- void GenerateInternalAccessorDefinitions(io::Printer* p) const {
- auto vars = PushVarsForCall(p);
- impl_->GenerateInternalAccessorDefinitions(p);
- }
-
- // Generates definitions of accessors that are for internal purposes only.
- void GenerateInternalAccessorDeclarations(io::Printer* p) const {
- auto vars = PushVarsForCall(p);
- impl_->GenerateInternalAccessorDeclarations(p);
- }
-
// Generates statements which clear the field.
//
// This is used to define the clear_$name$() method.
diff --git a/src/google/protobuf/compiler/cpp/field_generators/cord_field.cc b/src/google/protobuf/compiler/cpp/field_generators/cord_field.cc
index 62cbbae..8924bef 100644
--- a/src/google/protobuf/compiler/cpp/field_generators/cord_field.cc
+++ b/src/google/protobuf/compiler/cpp/field_generators/cord_field.cc
@@ -119,8 +119,10 @@
void GenerateInlineAccessorDefinitions(io::Printer* printer) const override;
void GenerateNonInlineAccessorDefinitions(
io::Printer* printer) const override;
+ bool RequiresArena(GeneratorFunction func) const override;
void GenerateClearingCode(io::Printer* printer) const override;
void GenerateSwappingCode(io::Printer* printer) const override;
+ void GenerateMergingCode(io::Printer* printer) const override;
void GenerateConstructorCode(io::Printer* printer) const override {}
void GenerateArenaDestructorCode(io::Printer* printer) const override;
// Overrides CordFieldGenerator behavior.
@@ -172,7 +174,7 @@
io::Printer* printer) const {
auto v = printer->WithVars(variables_);
printer->Emit(R"cc(
- inline const ::absl::Cord& $classname$::_internal_$name$() const {
+ inline const ::absl::Cord& $classname$::_internal_$name_internal$() const {
return $field$;
}
)cc");
@@ -181,18 +183,20 @@
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_get$;
// @@protoc_insertion_point(field_get:$full_name$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
)cc");
printer->Emit(R"cc(
- inline void $classname$::_internal_set_$name$(const ::absl::Cord& value) {
+ inline void $classname$::_internal_set_$name_internal$(
+ const ::absl::Cord& value) {
$set_hasbit$;
$field$ = value;
}
)cc");
printer->Emit(R"cc(
inline void $classname$::set_$name$(const ::absl::Cord& value) {
- $PrepareSplitMessageForWrite$ _internal_set_$name$(value);
+ $PrepareSplitMessageForWrite$;
+ _internal_set_$name_internal$(value);
$annotate_set$;
// @@protoc_insertion_point(field_set:$full_name$)
}
@@ -207,7 +211,7 @@
}
)cc");
printer->Emit(R"cc(
- inline ::absl::Cord* $classname$::_internal_mutable_$name$() {
+ inline ::absl::Cord* $classname$::_internal_mutable_$name_internal$() {
$set_hasbit$;
return &$field$;
}
@@ -331,7 +335,7 @@
io::Printer* printer) const {
auto v = printer->WithVars(variables_);
printer->Emit(R"cc(
- inline const ::absl::Cord& $classname$::_internal_$name$() const {
+ inline const ::absl::Cord& $classname$::_internal_$name_internal$() const {
if ($has_field$) {
return *$field$;
}
@@ -343,25 +347,21 @@
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_get$;
// @@protoc_insertion_point(field_get:$full_name$)
- return _internal_$name$();
- }
- )cc");
- printer->Emit(R"cc(
- inline void $classname$::_internal_set_$name$(const ::absl::Cord& value) {
- if ($not_has_field$) {
- clear_$oneof_name$();
- set_has_$name$();
- $field$ = new ::absl::Cord;
- if (GetArena() != nullptr) {
- GetArena()->Own($field$);
- }
- }
- *$field$ = value;
+ return _internal_$name_internal$();
}
)cc");
printer->Emit(R"cc(
inline void $classname$::set_$name$(const ::absl::Cord& value) {
- _internal_set_$name$(value);
+ if ($not_has_field$) {
+ clear_$oneof_name$();
+ set_has_$name_internal$();
+ $field$ = new ::absl::Cord;
+ ::$proto_ns$::Arena* arena = GetArena();
+ if (arena != nullptr) {
+ arena->Own($field$);
+ }
+ }
+ *$field$ = value;
$annotate_set$;
// @@protoc_insertion_point(field_set:$full_name$)
}
@@ -370,10 +370,11 @@
inline void $classname$::set_$name$(::absl::string_view value) {
if ($not_has_field$) {
clear_$oneof_name$();
- set_has_$name$();
+ set_has_$name_internal$();
$field$ = new ::absl::Cord;
- if (GetArena() != nullptr) {
- GetArena()->Own($field$);
+ ::$proto_ns$::Arena* arena = GetArena();
+ if (arena != nullptr) {
+ arena->Own($field$);
}
}
*$field$ = value;
@@ -382,13 +383,14 @@
}
)cc");
printer->Emit(R"cc(
- inline ::absl::Cord* $classname$::_internal_mutable_$name$() {
+ inline ::absl::Cord* $classname$::_internal_mutable_$name_internal$() {
if ($not_has_field$) {
clear_$oneof_name$();
- set_has_$name$();
+ set_has_$name_internal$();
$field$ = new ::absl::Cord;
- if (GetArena() != nullptr) {
- GetArena()->Own($field$);
+ ::$proto_ns$::Arena* arena = GetArena();
+ if (arena != nullptr) {
+ arena->Own($field$);
}
}
return $field$;
@@ -408,6 +410,14 @@
}
}
+bool CordOneofFieldGenerator::RequiresArena(GeneratorFunction func) const {
+ switch (func) {
+ case GeneratorFunction::kMergeFrom:
+ return true;
+ }
+ return false;
+}
+
void CordOneofFieldGenerator::GenerateClearingCode(io::Printer* printer) const {
Formatter format(printer, variables_);
format(
@@ -426,6 +436,15 @@
// default behavior here.
}
+void CordOneofFieldGenerator::GenerateMergingCode(io::Printer* printer) const {
+ printer->Emit(R"cc(
+ if (oneof_needs_init) {
+ _this->$field$ = ::$proto_ns$::Arena::Create<absl::Cord>(arena);
+ }
+ *_this->$field$ = *from.$field$;
+ )cc");
+}
+
// ===================================================================
} // namespace
diff --git a/src/google/protobuf/compiler/cpp/field_generators/enum_field.cc b/src/google/protobuf/compiler/cpp/field_generators/enum_field.cc
index 51a20ce..8f3a7f1 100644
--- a/src/google/protobuf/compiler/cpp/field_generators/enum_field.cc
+++ b/src/google/protobuf/compiler/cpp/field_generators/enum_field.cc
@@ -74,7 +74,7 @@
void GenerateMergingCode(io::Printer* p) const override {
p->Emit(R"cc(
- _this->_internal_set_$name$(from._internal_$name$());
+ _this->$field_$ = from.$field_$;
)cc");
}
@@ -167,43 +167,46 @@
inline $Enum$ $Msg$::$name$() const {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return _internal_$name$();
- }
- inline void $Msg$::set_$name$($Enum$ value) {
- $PrepareSplitMessageForWrite$;
- _internal_set_$name$(value);
- $annotate_set$;
- // @@protoc_insertion_point(field_set:$pkg.Msg.field$)
+ return _internal_$name_internal$();
}
)cc");
if (is_oneof()) {
p->Emit(R"cc(
- inline $Enum$ $Msg$::_internal_$name$() const {
+ inline void $Msg$::set_$name$($Enum$ value) {
+ $PrepareSplitMessageForWrite$;
+ $assert_valid$;
+ if ($not_has_field$) {
+ clear_$oneof_name$();
+ set_has_$name_internal$();
+ }
+ $field_$ = value;
+ $annotate_set$;
+ // @@protoc_insertion_point(field_set:$pkg.Msg.field$)
+ }
+ inline $Enum$ $Msg$::_internal_$name_internal$() const {
if ($has_field$) {
return static_cast<$Enum$>($field_$);
}
return static_cast<$Enum$>($kDefault$);
}
- inline void $Msg$::_internal_set_$name$($Enum$ value) {
- $assert_valid$;
- if ($not_has_field$) {
- clear_$oneof_name$();
- set_has_$name$();
- }
- $field_$ = value;
- }
)cc");
} else {
p->Emit(R"cc(
- inline $Enum$ $Msg$::_internal_$name$() const {
+ inline void $Msg$::set_$name$($Enum$ value) {
+ $PrepareSplitMessageForWrite$;
+ _internal_set_$name_internal$(value);
+ $set_hasbit$;
+ $annotate_set$;
+ // @@protoc_insertion_point(field_set:$pkg.Msg.field$)
+ }
+ inline $Enum$ $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return static_cast<$Enum$>($field_$);
}
- inline void $Msg$::_internal_set_$name$($Enum$ value) {
+ inline void $Msg$::_internal_set_$name_internal$($Enum$ value) {
$TsanDetectConcurrentMutation$;
$assert_valid$;
- $set_hasbit$;
$field_$ = value;
}
)cc");
@@ -397,13 +400,13 @@
inline $Enum$ $Msg$::$name$(int index) const {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return static_cast<$Enum$>(_internal_$name$().Get(index));
+ return static_cast<$Enum$>(_internal_$name_internal$().Get(index));
}
)cc");
p->Emit(R"cc(
inline void $Msg$::set_$name$(int index, $Enum$ value) {
$assert_valid$;
- _internal_mutable_$name$()->Set(index, value);
+ _internal_mutable_$name_internal$()->Set(index, value);
$annotate_set$
// @@protoc_insertion_point(field_set:$pkg.Msg.field$)
}
@@ -412,7 +415,7 @@
inline void $Msg$::add_$name$($Enum$ value) {
$assert_valid$;
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add(value);
+ _internal_mutable_$name_internal$()->Add(value);
$annotate_add$
// @@protoc_insertion_point(field_add:$pkg.Msg.field$)
}
@@ -422,7 +425,7 @@
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_list$;
// @@protoc_insertion_point(field_list:$pkg.Msg.field$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
)cc");
p->Emit(R"cc(
@@ -431,16 +434,17 @@
$annotate_mutable_list$;
// @@protoc_insertion_point(field_mutable_list:$pkg.Msg.field$)
$TsanDetectConcurrentMutation$;
- return _internal_mutable_$name$();
+ return _internal_mutable_$name_internal$();
}
)cc");
if (should_split()) {
p->Emit(R"cc(
- inline const $pb$::RepeatedField<int>& $Msg$::_internal_$name$() const {
+ inline const $pb$::RepeatedField<int>& $Msg$::_internal_$name_internal$()
+ const {
$TsanDetectConcurrentRead$;
return *$field_$;
}
- inline $pb$::RepeatedField<int>* $Msg$::_internal_mutable_$name$() {
+ inline $pb$::RepeatedField<int>* $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentRead$;
$PrepareSplitMessageForWrite$;
if ($field_$.IsDefault()) {
@@ -452,11 +456,12 @@
)cc");
} else {
p->Emit(R"cc(
- inline const $pb$::RepeatedField<int>& $Msg$::_internal_$name$() const {
+ inline const $pb$::RepeatedField<int>& $Msg$::_internal_$name_internal$()
+ const {
$TsanDetectConcurrentRead$;
return $field_$;
}
- inline $pb$::RepeatedField<int>* $Msg$::_internal_mutable_$name$() {
+ inline $pb$::RepeatedField<int>* $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentRead$;
return &$field_$;
}
diff --git a/src/google/protobuf/compiler/cpp/field_generators/map_field.cc b/src/google/protobuf/compiler/cpp/field_generators/map_field.cc
index 13bcd63..7969096 100644
--- a/src/google/protobuf/compiler/cpp/field_generators/map_field.cc
+++ b/src/google/protobuf/compiler/cpp/field_generators/map_field.cc
@@ -215,7 +215,7 @@
void Map::GenerateInlineAccessorDefinitions(io::Printer* p) const {
p->Emit(R"cc(
- inline const $Map$& $Msg$::_internal_$name$() const {
+ inline const $Map$& $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return $field_$.GetMap();
}
@@ -224,11 +224,11 @@
inline const $Map$& $Msg$::$name$() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_get$;
// @@protoc_insertion_point(field_map:$pkg.Msg.field$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
)cc");
p->Emit(R"cc(
- inline $Map$* $Msg$::_internal_mutable_$name$() {
+ inline $Map$* $Msg$::_internal_mutable_$name_internal$() {
$PrepareSplitMessageForWrite$;
$TsanDetectConcurrentMutation$;
return $field_$.MutableMap();
@@ -238,7 +238,7 @@
inline $Map$* $Msg$::mutable_$name$() ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_mutable$;
// @@protoc_insertion_point(field_mutable_map:$pkg.Msg.field$)
- return _internal_mutable_$name$();
+ return _internal_mutable_$name_internal$();
}
)cc");
}
diff --git a/src/google/protobuf/compiler/cpp/field_generators/message_field.cc b/src/google/protobuf/compiler/cpp/field_generators/message_field.cc
index e5ac613..318cf4c 100644
--- a/src/google/protobuf/compiler/cpp/field_generators/message_field.cc
+++ b/src/google/protobuf/compiler/cpp/field_generators/message_field.cc
@@ -108,8 +108,6 @@
void GenerateAccessorDeclarations(io::Printer* p) const override;
void GenerateInlineAccessorDefinitions(io::Printer* p) const override;
- void GenerateInternalAccessorDeclarations(io::Printer* p) const override;
- void GenerateInternalAccessorDefinitions(io::Printer* p) const override;
void GenerateClearingCode(io::Printer* p) const override;
void GenerateMessageClearingCode(io::Printer* p) const override;
void GenerateMergingCode(io::Printer* p) const override;
@@ -200,7 +198,7 @@
}},
},
R"cc(
- inline const $Submsg$& $Msg$::_internal_$name$() const {
+ inline const $Submsg$& $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
$StrongRef$;
const $Submsg$* p = $cast_field_$;
@@ -209,7 +207,7 @@
inline const $Submsg$& $Msg$::$name$() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
inline void $Msg$::unsafe_arena_set_allocated_$name$($Submsg$* value) {
$TsanDetectConcurrentMutation$;
@@ -258,10 +256,9 @@
$field_$ = nullptr;
return temp;
}
- inline $Submsg$* $Msg$::_internal_mutable_$name$() {
+ inline $Submsg$* $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentMutation$;
$StrongRef$;
- $set_hasbit$;
if ($field_$ == nullptr) {
auto* p = $superclass$::DefaultConstruct<$Submsg$>(GetArena());
$field_$ = reinterpret_cast<$MemberType$*>(p);
@@ -272,7 +269,8 @@
//~ TODO: add tests to make sure all write accessors are
//~ able to prepare split message allocation.
$PrepareSplitMessageForWrite$;
- $Submsg$* _msg = _internal_mutable_$name$();
+ $set_hasbit$;
+ $Submsg$* _msg = _internal_mutable_$name_internal$();
$annotate_mutable$;
// @@protoc_insertion_point(field_mutable:$pkg.Msg.field$)
return _msg;
@@ -307,87 +305,6 @@
)cc");
}
-void SingularMessage::GenerateInternalAccessorDeclarations(
- io::Printer* p) const {
- if (!is_weak()) {
- p->Emit(R"cc(
- static const $Submsg$& $name$(const $Msg$* msg);
- )cc");
- return;
- }
-
- p->Emit(R"cc(
- static const $pb$::MessageLite& $name$(const $Msg$* msg);
- static $pb$::MessageLite* mutable_$name$($Msg$* msg);
- )cc");
-}
-
-void SingularMessage::GenerateInternalAccessorDefinitions(
- io::Printer* p) const {
- // In theory, these accessors could be inline in _Internal. However, in
- // practice, the linker is then not able to throw them out making implicit
- // weak dependencies not work at all.
-
- if (!is_weak()) {
- // This inline accessor directly returns member field and is used in
- // Serialize such that AFDO profile correctly captures access information to
- // message fields under serialize.
- p->Emit(R"cc(
- const $Submsg$& $Msg$::_Internal::$name$(const $Msg$* msg) {
- return *msg->$field_$;
- }
- )cc");
- return;
- }
-
- // These private accessors are used by MergeFrom and
- // MergePartialFromCodedStream, and their purpose is to provide access to
- // the field without creating a strong dependency on the message type.
- p->Emit(
- {
- {"update_hasbit",
- [&] {
- if (!has_hasbit_) return;
- p->Emit(R"cc(
- msg->$set_hasbit$;
- )cc");
- }},
- {"is_already_set",
- [&] {
- if (!is_oneof()) {
- p->Emit("msg->$field_$ == nullptr");
- } else {
- p->Emit("msg->$not_has_field$");
- }
- }},
- {"clear_oneof",
- [&] {
- if (!is_oneof()) return;
- p->Emit(R"cc(
- msg->clear_$oneof_name$();
- msg->set_has_$name$();
- )cc");
- }},
- },
- R"cc(
- const $pb$::MessageLite& $Msg$::_Internal::$name$(const $Msg$* msg) {
- if (msg->$field_$ != nullptr) {
- return *msg->$field_$;
- } else {
- return *$kDefaultPtr$;
- }
- }
- $pb$::MessageLite* $Msg$::_Internal::mutable_$name$($Msg$* msg) {
- $update_hasbit$;
- if ($is_already_set$) {
- $clear_oneof$;
- msg->$field_$ = $kDefaultPtr$->New(msg->GetArena());
- }
- return msg->$field_$;
- }
- )cc");
-}
-
void SingularMessage::GenerateClearingCode(io::Printer* p) const {
if (!has_hasbit_) {
// If we don't have has-bits, message presence is indicated only by ptr !=
@@ -421,7 +338,7 @@
bool SingularMessage::RequiresArena(GeneratorFunction function) const {
switch (function) {
case GeneratorFunction::kMergeFrom:
- return !(is_weak() || is_oneof() || should_split());
+ return !should_split();
}
return false;
}
@@ -429,9 +346,13 @@
void SingularMessage::GenerateMergingCode(io::Printer* p) const {
if (is_weak()) {
p->Emit(
- "_Internal::mutable_$name$(_this)->CheckTypeAndMergeFrom(\n"
- " _Internal::$name$(&from));\n");
- } else if (is_oneof() || should_split()) {
+ R"cc(
+ if (_this->$field_$ == nullptr) {
+ _this->$field_$ = from.$field_$->New(arena);
+ }
+ _this->$field_$->CheckTypeAndMergeFrom(*from.$field_$);
+ )cc");
+ } else if (should_split()) {
p->Emit(
"_this->_internal_mutable_$name$()->$Submsg$::MergeFrom(\n"
" from._internal_$name$());\n");
@@ -449,7 +370,6 @@
} else {
_this->$field_$->MergeFrom(*from.$field_$);
}
- $this_set_hasbit$;
)cc");
}
}
@@ -495,14 +415,13 @@
if (!is_group()) {
p->Emit(R"cc(
target = $pbi$::WireFormatLite::InternalWrite$declared_type$(
- $number$, _Internal::$name$(this),
- _Internal::$name$(this).GetCachedSize(), target, stream);
+ $number$, *$field_$, $field_$->GetCachedSize(), target, stream);
)cc");
} else {
p->Emit(R"cc(
target = stream->EnsureSpace(target);
target = $pbi$::WireFormatLite::InternalWrite$declared_type$(
- $number$, _Internal::$name$(this), target, stream);
+ $number$, *$field_$, target, stream);
)cc");
}
}
@@ -573,6 +492,8 @@
void GenerateDestructorCode(io::Printer* p) const override;
void GenerateConstructorCode(io::Printer* p) const override;
void GenerateIsInitialized(io::Printer* p) const override;
+ void GenerateMergingCode(io::Printer* p) const override;
+ bool RequiresArena(GeneratorFunction func) const override;
};
void OneofMessage::GenerateNonInlineAccessorDefinitions(io::Printer* p) const {
@@ -618,7 +539,7 @@
}
)cc");
p->Emit(R"cc(
- inline const $Submsg$& $Msg$::_internal_$name$() const {
+ inline const $Submsg$& $Msg$::_internal_$name_internal$() const {
$StrongRef$;
return $has_field$ ? *$cast_field_$ : reinterpret_cast<$Submsg$&>($kDefault$);
}
@@ -627,7 +548,7 @@
inline const $Submsg$& $Msg$::$name$() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
)cc");
p->Emit(R"cc(
@@ -652,7 +573,7 @@
// set the new value.
clear_$oneof_name$();
if (value) {
- set_has_$name$();
+ set_has_$name_internal$();
$field_$ = $weak_cast$(value);
}
$annotate_set$;
@@ -660,11 +581,11 @@
}
)cc");
p->Emit(R"cc(
- inline $Submsg$* $Msg$::_internal_mutable_$name$() {
+ inline $Submsg$* $Msg$::_internal_mutable_$name_internal$() {
$StrongRef$;
if ($not_has_field$) {
clear_$oneof_name$();
- set_has_$name$();
+ set_has_$name_internal$();
$field_$ =
$weak_cast$($superclass$::DefaultConstruct<$Submsg$>(GetArena()));
}
@@ -673,7 +594,7 @@
)cc");
p->Emit(R"cc(
inline $Submsg$* $Msg$::mutable_$name$() ABSL_ATTRIBUTE_LIFETIME_BOUND {
- $Submsg$* _msg = _internal_mutable_$name$();
+ $Submsg$* _msg = _internal_mutable_$name_internal$();
$annotate_mutable$;
// @@protoc_insertion_point(field_mutable:$pkg.Msg.field$)
return _msg;
@@ -714,6 +635,34 @@
)cc");
}
+void OneofMessage::GenerateMergingCode(io::Printer* p) const {
+ if (is_weak()) {
+ p->Emit(R"cc(
+ if (oneof_needs_init) {
+ _this->$field_$ = from.$field_$->New(arena);
+ }
+ _this->$field_$->CheckTypeAndMergeFrom(*from.$field_$);
+ )cc");
+ } else {
+ p->Emit(R"cc(
+ if (oneof_needs_init) {
+ _this->$field_$ =
+ $superclass$::CopyConstruct<$Submsg$>(arena, *from.$field_$);
+ } else {
+ _this->$field_$->MergeFrom(from._internal_$name$());
+ }
+ )cc");
+ }
+}
+
+bool OneofMessage::RequiresArena(GeneratorFunction func) const {
+ switch (func) {
+ case GeneratorFunction::kMergeFrom:
+ return true;
+ }
+ return false;
+}
+
class RepeatedMessage : public FieldGeneratorBase {
public:
RepeatedMessage(const FieldDescriptor* field, const Options& opts,
@@ -759,34 +708,33 @@
}
void RepeatedMessage::GenerateAccessorDeclarations(io::Printer* p) const {
- Formatter format(p);
- format("$DEPRECATED$ $Submsg$* ${1$mutable_$name$$}$(int index);\n",
- std::make_tuple(field_, GeneratedCodeInfo::Annotation::ALIAS));
- format(
- "$DEPRECATED$ $pb$::RepeatedPtrField< $Submsg$ >*\n"
- " ${1$mutable_$name$$}$();\n",
- std::make_tuple(field_, GeneratedCodeInfo::Annotation::ALIAS));
- format(
- "private:\n"
- "const $pb$::RepeatedPtrField<$Submsg$>& _internal_$name$() const;\n"
- "$pb$::RepeatedPtrField<$Submsg$>* _internal_mutable_$name$();\n");
+ auto v = p->WithVars(
+ AnnotatedAccessors(field_, {"", "_internal_", "_internal_mutable_"}));
+ auto vs = p->WithVars(
+ AnnotatedAccessors(field_, {"add_"}, io::AnnotationCollector::kSet));
+ auto vm = p->WithVars(AnnotatedAccessors(field_, {"mutable_"},
+ io::AnnotationCollector::kAlias));
+
+ p->Emit(R"cc(
+ $DEPRECATED$ $Submsg$* $mutable_name$(int index);
+ $DEPRECATED$ $pb$::RepeatedPtrField<$Submsg$>* $mutable_name$();
+
+ private:
+ const $pb$::RepeatedPtrField<$Submsg$>& $_internal_name$() const;
+ $pb$::RepeatedPtrField<$Submsg$>* $_internal_mutable_name$();
+ )cc");
if (is_weak()) {
- format(
- "const $pb$::WeakRepeatedPtrField<$Submsg$>& _internal_weak_$name$() "
- "const;\n"
- "$pb$::WeakRepeatedPtrField<$Submsg$>* "
- "_internal_mutable_weak_$name$();\n");
+ p->Emit(R"cc(
+ const $pb$::WeakRepeatedPtrField<$Submsg$>& _internal_weak_$name$() const;
+ $pb$::WeakRepeatedPtrField<$Submsg$>* _internal_mutable_weak_$name$();
+ )cc");
}
- format(
- "public:\n"
- "$DEPRECATED$ const $Submsg$& ${1$$name$$}$(int index) const;\n",
- field_);
- format("$DEPRECATED$ $Submsg$* ${1$add_$name$$}$();\n",
- std::make_tuple(field_, GeneratedCodeInfo::Annotation::SET));
- format(
- "$DEPRECATED$ const $pb$::RepeatedPtrField< $Submsg$ >&\n"
- " ${1$$name$$}$() const;\n",
- field_);
+ p->Emit(R"cc(
+ public:
+ $DEPRECATED$ const $Submsg$& $name$(int index) const;
+ $DEPRECATED$ $Submsg$* $add_name$();
+ $DEPRECATED$ const $pb$::RepeatedPtrField<$Submsg$>& $name$() const;
+ )cc");
}
void RepeatedMessage::GenerateInlineAccessorDefinitions(io::Printer* p) const {
@@ -797,7 +745,7 @@
$annotate_mutable$;
// @@protoc_insertion_point(field_mutable:$pkg.Msg.field$)
$StrongRef$;
- return _internal_mutable_$name$()->Mutable(index);
+ return _internal_mutable_$name_internal$()->Mutable(index);
}
)cc");
p->Emit(R"cc(
@@ -807,7 +755,7 @@
// @@protoc_insertion_point(field_mutable_list:$pkg.Msg.field$)
$StrongRef$;
$TsanDetectConcurrentMutation$;
- return _internal_mutable_$name$();
+ return _internal_mutable_$name_internal$();
}
)cc");
p->Emit(
@@ -826,13 +774,13 @@
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
$StrongRef$;
- return _internal_$name$().$Get$(index$GetExtraArg$);
+ return _internal_$name_internal$().$Get$(index$GetExtraArg$);
}
)cc");
p->Emit(R"cc(
inline $Submsg$* $Msg$::add_$name$() ABSL_ATTRIBUTE_LIFETIME_BOUND {
$TsanDetectConcurrentMutation$;
- $Submsg$* _add = _internal_mutable_$name$()->Add();
+ $Submsg$* _add = _internal_mutable_$name_internal$()->Add();
$annotate_add_mutable$;
// @@protoc_insertion_point(field_add:$pkg.Msg.field$)
return _add;
@@ -844,19 +792,19 @@
$annotate_list$;
// @@protoc_insertion_point(field_list:$pkg.Msg.field$)
$StrongRef$;
- return _internal_$name$();
+ return _internal_$name_internal$();
}
)cc");
if (should_split()) {
p->Emit(R"cc(
inline const $pb$::$Weak$RepeatedPtrField<$Submsg$>&
- $Msg$::_internal$_weak$_$name$() const {
+ $Msg$::_internal$_weak$_$name_internal$() const {
$TsanDetectConcurrentRead$;
return *$field_$;
}
inline $pb$::$Weak$RepeatedPtrField<$Submsg$>*
- $Msg$::_internal_mutable$_weak$_$name$() {
+ $Msg$::_internal_mutable$_weak$_$name_internal$() {
$TsanDetectConcurrentRead$;
$PrepareSplitMessageForWrite$;
if ($field_$.IsDefault()) {
@@ -869,12 +817,12 @@
} else {
p->Emit(R"cc(
inline const $pb$::$Weak$RepeatedPtrField<$Submsg$>&
- $Msg$::_internal$_weak$_$name$() const {
+ $Msg$::_internal$_weak$_$name_internal$() const {
$TsanDetectConcurrentRead$;
return $field_$;
}
inline $pb$::$Weak$RepeatedPtrField<$Submsg$>*
- $Msg$::_internal_mutable$_weak$_$name$() {
+ $Msg$::_internal_mutable$_weak$_$name_internal$() {
$TsanDetectConcurrentRead$;
return &$field_$;
}
@@ -882,12 +830,13 @@
}
if (is_weak()) {
p->Emit(R"cc(
- inline const $pb$::RepeatedPtrField<$Submsg$>& $Msg$::_internal_$name$()
- const {
- return _internal_weak_$name$().weak;
+ inline const $pb$::RepeatedPtrField<$Submsg$>&
+ $Msg$::_internal_$name_internal$() const {
+ return _internal_weak_$name_internal$().weak;
}
- inline $pb$::RepeatedPtrField<$Submsg$>* $Msg$::_internal_mutable_$name$() {
- return &_internal_mutable_weak_$name$()->weak;
+ inline $pb$::RepeatedPtrField<$Submsg$>*
+ $Msg$::_internal_mutable_$name_internal$() {
+ return &_internal_mutable_weak_$name_internal$()->weak;
}
)cc");
}
diff --git a/src/google/protobuf/compiler/cpp/field_generators/primitive_field.cc b/src/google/protobuf/compiler/cpp/field_generators/primitive_field.cc
index f58b9b3..e0e1ff3 100644
--- a/src/google/protobuf/compiler/cpp/field_generators/primitive_field.cc
+++ b/src/google/protobuf/compiler/cpp/field_generators/primitive_field.cc
@@ -108,7 +108,7 @@
void GenerateMergingCode(io::Printer* p) const override {
p->Emit(R"cc(
- _this->_internal_set_$name$(from._internal_$name$());
+ _this->$field_$ = from.$field_$;
)cc");
}
@@ -190,41 +190,44 @@
inline $Type$ $Msg$::$name$() const {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return _internal_$name$();
- }
- inline void $Msg$::set_$name$($Type$ value) {
- $PrepareSplitMessageForWrite$;
- _internal_set_$name$(value);
- $annotate_set$;
- // @@protoc_insertion_point(field_set:$pkg.Msg.field$)
+ return _internal_$name_internal$();
}
)cc");
if (is_oneof()) {
p->Emit(R"cc(
- inline $Type$ $Msg$::_internal_$name$() const {
+ inline void $Msg$::set_$name$($Type$ value) {
+ $PrepareSplitMessageForWrite$;
+ if ($not_has_field$) {
+ clear_$oneof_name$();
+ set_has_$name_internal$();
+ }
+ $field_$ = value;
+ $annotate_set$;
+ // @@protoc_insertion_point(field_set:$pkg.Msg.field$)
+ }
+ inline $Type$ $Msg$::_internal_$name_internal$() const {
if ($has_field$) {
return $field_$;
}
return $kDefault$;
}
- inline void $Msg$::_internal_set_$name$($Type$ value) {
- if ($not_has_field$) {
- clear_$oneof_name$();
- set_has_$name$();
- }
- $field_$ = value;
- }
)cc");
} else {
p->Emit(R"cc(
- inline $Type$ $Msg$::_internal_$name$() const {
+ inline void $Msg$::set_$name$($Type$ value) {
+ $PrepareSplitMessageForWrite$;
+ _internal_set_$name_internal$(value);
+ $set_hasbit$;
+ $annotate_set$;
+ // @@protoc_insertion_point(field_set:$pkg.Msg.field$)
+ }
+ inline $Type$ $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return $field_$;
}
- inline void $Msg$::_internal_set_$name$($Type$ value) {
+ inline void $Msg$::_internal_set_$name_internal$($Type$ value) {
$TsanDetectConcurrentMutation$;
- $set_hasbit$;
$field_$ = value;
}
)cc");
@@ -466,20 +469,20 @@
inline $Type$ $Msg$::$name$(int index) const {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return _internal_$name$().Get(index);
+ return _internal_$name_internal$().Get(index);
}
)cc");
p->Emit(R"cc(
inline void $Msg$::set_$name$(int index, $Type$ value) {
$annotate_set$;
- _internal_mutable_$name$()->Set(index, value);
+ _internal_mutable_$name_internal$()->Set(index, value);
// @@protoc_insertion_point(field_set:$pkg.Msg.field$)
}
)cc");
p->Emit(R"cc(
inline void $Msg$::add_$name$($Type$ value) {
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add(value);
+ _internal_mutable_$name_internal$()->Add(value);
$annotate_add$;
// @@protoc_insertion_point(field_add:$pkg.Msg.field$)
}
@@ -489,7 +492,7 @@
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_list$;
// @@protoc_insertion_point(field_list:$pkg.Msg.field$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
)cc");
p->Emit(R"cc(
@@ -498,18 +501,18 @@
$annotate_mutable_list$;
// @@protoc_insertion_point(field_mutable_list:$pkg.Msg.field$)
$TsanDetectConcurrentMutation$;
- return _internal_mutable_$name$();
+ return _internal_mutable_$name_internal$();
}
)cc");
if (should_split()) {
p->Emit(R"cc(
- inline const $pb$::RepeatedField<$Type$>& $Msg$::_internal_$name$()
- const {
+ inline const $pb$::RepeatedField<$Type$>&
+ $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return *$field_$;
}
- inline $pb$::RepeatedField<$Type$>* $Msg$::_internal_mutable_$name$() {
+ inline $pb$::RepeatedField<$Type$>* $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentRead$;
$PrepareSplitMessageForWrite$;
if ($field_$.IsDefault()) {
@@ -521,12 +524,12 @@
)cc");
} else {
p->Emit(R"cc(
- inline const $pb$::RepeatedField<$Type$>& $Msg$::_internal_$name$()
- const {
+ inline const $pb$::RepeatedField<$Type$>&
+ $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return $field_$;
}
- inline $pb$::RepeatedField<$Type$>* $Msg$::_internal_mutable_$name$() {
+ inline $pb$::RepeatedField<$Type$>* $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentRead$;
return &$field_$;
}
diff --git a/src/google/protobuf/compiler/cpp/field_generators/string_field.cc b/src/google/protobuf/compiler/cpp/field_generators/string_field.cc
index 426833d..cd1049e 100644
--- a/src/google/protobuf/compiler/cpp/field_generators/string_field.cc
+++ b/src/google/protobuf/compiler/cpp/field_generators/string_field.cc
@@ -88,10 +88,27 @@
)cc");
}
+ bool RequiresArena(GeneratorFunction function) const override {
+ switch (function) {
+ case GeneratorFunction::kMergeFrom:
+ return is_oneof();
+ }
+ return false;
+ }
+
void GenerateMergingCode(io::Printer* p) const override {
- p->Emit(R"cc(
- _this->_internal_set_$name$(from._internal_$name$());
- )cc");
+ if (is_oneof()) {
+ p->Emit(R"cc(
+ if (oneof_needs_init) {
+ _this->$field_$.InitDefault();
+ }
+ _this->$field_$.Set(from._internal_$name$(), arena);
+ )cc");
+ } else {
+ p->Emit(R"cc(
+ _this->_internal_set_$name$(from._internal_$name$());
+ )cc");
+ }
}
void GenerateArenaDestructorCode(io::Printer* p) const override {
@@ -283,7 +300,7 @@
if ($not_has_field$) {
clear_$oneof_name$();
- set_has_$name$();
+ set_has_$name_internal$();
$field_$.InitDefault();
}
)cc");
@@ -295,7 +312,7 @@
return;
}
p->Emit(
- "GetArena(), _internal_$name$_donated(), "
+ "GetArena(), _internal_$name_internal$_donated(), "
"&$donating_states_word$, $mask_for_undonate$, this");
}
@@ -325,7 +342,7 @@
}
$clear_hasbit$;
- return $field_$.Release(GetArena(), _internal_$name$_donated());
+ return $field_$.Release(GetArena(), _internal_$name_internal$_donated());
)cc");
return;
}
@@ -360,7 +377,7 @@
clear_$oneof_name$();
}
if (value != nullptr) {
- set_has_$name$();
+ set_has_$name_internal$();
$field_$.InitAllocated(value, GetArena());
}
)cc");
@@ -434,7 +451,7 @@
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
$if_IsDefault$;
- return _internal_$name$();
+ return _internal_$name_internal$();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void $Msg$::set_$name$(Arg_&& arg,
@@ -448,24 +465,24 @@
}
inline std::string* $Msg$::mutable_$name$() ABSL_ATTRIBUTE_LIFETIME_BOUND {
$PrepareSplitMessageForWrite$;
- std::string* _s = _internal_mutable_$name$();
+ std::string* _s = _internal_mutable_$name_internal$();
$annotate_mutable$;
// @@protoc_insertion_point(field_mutable:$pkg.Msg.field$)
return _s;
}
- inline const std::string& $Msg$::_internal_$name$() const {
+ inline const std::string& $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
$check_hasbit$;
return $field_$.Get();
}
- inline void $Msg$::_internal_set_$name$(const std::string& value) {
+ inline void $Msg$::_internal_set_$name_internal$(const std::string& value) {
$TsanDetectConcurrentMutation$;
$update_hasbit$;
//~ Don't use $Set$ here; we always want the std::string variant
//~ regardless of whether this is a `bytes` field.
$field_$.Set(value, $set_args$);
}
- inline std::string* $Msg$::_internal_mutable_$name$() {
+ inline std::string* $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentMutation$;
$update_hasbit$;
return $field_$.Mutable($lazy_args$, $set_args$);
@@ -488,7 +505,7 @@
if (is_inlined()) {
p->Emit(R"cc(
- inline bool $Msg$::_internal_$name$_donated() const {
+ inline bool $Msg$::_internal_$name_internal$_donated() const {
return $inlined_string_donated$;
}
)cc");
@@ -854,7 +871,7 @@
inline std::string* $Msg$::add_$name$()
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$TsanDetectConcurrentMutation$;
- std::string* _s = _internal_mutable_$name$()->Add();
+ std::string* _s = _internal_mutable_$name_internal$()->Add();
$annotate_add_mutable$;
// @@protoc_insertion_point(field_add_mutable:$pkg.Msg.field$)
return _s;
@@ -863,72 +880,73 @@
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_get$;
// @@protoc_insertion_point(field_get:$pkg.Msg.field$)
- return _internal_$name$().$Get$(index$GetExtraArg$);
+ return _internal_$name_internal$().$Get$(index$GetExtraArg$);
}
inline std::string* $Msg$::mutable_$name$(int index)
ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_mutable$;
// @@protoc_insertion_point(field_mutable:$pkg.Msg.field$)
- return _internal_mutable_$name$()->Mutable(index);
+ return _internal_mutable_$name_internal$()->Mutable(index);
}
inline void $Msg$::set_$name$(int index, const std::string& value) {
- _internal_mutable_$name$()->Mutable(index)->assign(value);
+ _internal_mutable_$name_internal$()->Mutable(index)->assign(value);
$annotate_set$;
// @@protoc_insertion_point(field_set:$pkg.Msg.field$)
}
inline void $Msg$::set_$name$(int index, std::string&& value) {
- _internal_mutable_$name$()->Mutable(index)->assign(std::move(value));
+ _internal_mutable_$name_internal$()->Mutable(index)->assign(std::move(value));
$annotate_set$;
// @@protoc_insertion_point(field_set:$pkg.Msg.field$)
}
inline void $Msg$::set_$name$(int index, const char* value) {
$DCHK$(value != nullptr);
- _internal_mutable_$name$()->Mutable(index)->assign(value);
+ _internal_mutable_$name_internal$()->Mutable(index)->assign(value);
$annotate_set$;
// @@protoc_insertion_point(field_set_char:$pkg.Msg.field$)
}
inline void $Msg$::set_$name$(int index, const $byte$* value,
std::size_t size) {
- _internal_mutable_$name$()->Mutable(index)->assign(
+ _internal_mutable_$name_internal$()->Mutable(index)->assign(
reinterpret_cast<const char*>(value), size);
$annotate_set$;
// @@protoc_insertion_point(field_set_pointer:$pkg.Msg.field$)
}
inline void $Msg$::set_$name$(int index, absl::string_view value) {
- _internal_mutable_$name$()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_$name_internal$()->Mutable(index)->assign(
+ value.data(), value.size());
$annotate_set$;
// @@protoc_insertion_point(field_set_string_piece:$pkg.Msg.field$)
}
inline void $Msg$::add_$name$(const std::string& value) {
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add()->assign(value);
+ _internal_mutable_$name_internal$()->Add()->assign(value);
$annotate_add$;
// @@protoc_insertion_point(field_add:$pkg.Msg.field$)
}
inline void $Msg$::add_$name$(std::string&& value) {
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add(std::move(value));
+ _internal_mutable_$name_internal$()->Add(std::move(value));
$annotate_add$;
// @@protoc_insertion_point(field_add:$pkg.Msg.field$)
}
inline void $Msg$::add_$name$(const char* value) {
$DCHK$(value != nullptr);
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add()->assign(value);
+ _internal_mutable_$name_internal$()->Add()->assign(value);
$annotate_add$;
// @@protoc_insertion_point(field_add_char:$pkg.Msg.field$)
}
inline void $Msg$::add_$name$(const $byte$* value, std::size_t size) {
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add()->assign(
+ _internal_mutable_$name_internal$()->Add()->assign(
reinterpret_cast<const char*>(value), size);
$annotate_add$;
// @@protoc_insertion_point(field_add_pointer:$pkg.Msg.field$)
}
inline void $Msg$::add_$name$(absl::string_view value) {
$TsanDetectConcurrentMutation$;
- _internal_mutable_$name$()->Add()->assign(value.data(), value.size());
+ _internal_mutable_$name_internal$()->Add()->assign(value.data(),
+ value.size());
$annotate_add$;
// @@protoc_insertion_point(field_add_string_piece:$pkg.Msg.field$)
}
@@ -936,24 +954,25 @@
$Msg$::$name$() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_list$;
// @@protoc_insertion_point(field_list:$pkg.Msg.field$)
- return _internal_$name$();
+ return _internal_$name_internal$();
}
inline ::$proto_ns$::RepeatedPtrField<std::string>*
$Msg$::mutable_$name$() ABSL_ATTRIBUTE_LIFETIME_BOUND {
$annotate_mutable_list$;
// @@protoc_insertion_point(field_mutable_list:$pkg.Msg.field$)
$TsanDetectConcurrentMutation$;
- return _internal_mutable_$name$();
+ return _internal_mutable_$name_internal$();
}
)cc");
if (ShouldSplit(descriptor_, options_)) {
p->Emit(R"cc(
inline const $pb$::RepeatedPtrField<std::string>&
- $Msg$::_internal_$name$() const {
+ $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return *$field_$;
}
- inline $pb$::RepeatedPtrField<std::string>* $Msg$::_internal_mutable_$name$() {
+ inline $pb$::RepeatedPtrField<std::string>*
+ $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentRead$;
$PrepareSplitMessageForWrite$;
if ($field_$.IsDefault()) {
@@ -967,12 +986,12 @@
} else {
p->Emit(R"cc(
inline const ::$proto_ns$::RepeatedPtrField<std::string>&
- $Msg$::_internal_$name$() const {
+ $Msg$::_internal_$name_internal$() const {
$TsanDetectConcurrentRead$;
return $field_$;
}
inline ::$proto_ns$::RepeatedPtrField<std::string>*
- $Msg$::_internal_mutable_$name$() {
+ $Msg$::_internal_mutable_$name_internal$() {
$TsanDetectConcurrentRead$;
return &$field_$;
}
diff --git a/src/google/protobuf/compiler/cpp/file.cc b/src/google/protobuf/compiler/cpp/file.cc
index dab2730..65fc75c 100644
--- a/src/google/protobuf/compiler/cpp/file.cc
+++ b/src/google/protobuf/compiler/cpp/file.cc
@@ -88,154 +88,6 @@
#endif // __llvm__
)");
}
-
-// TopologicalSortMessagesInFile topologically sorts and returns a vector of
-// proto descriptors defined in the file provided as input. The underlying
-// graph is defined using dependency relationship between protos. For example,
-// if proto A contains proto B as a member, then proto B would be ordered before
-// proto A in a topological ordering, assuming there is no mutual dependence
-// between the two protos. The topological order is used to emit proto
-// declarations so that a proto is declared after all the protos it is dependent
-// on have been declared (again assuming no mutual dependence). This is needed
-// in cases where we may declare proto B as a member of proto A using an object,
-// instead of a pointer.
-//
-// The proto dependency graph can have cycles. So instead of directly working
-// with protos, we compute strong connected components (SCCs) composed of protos
-// with mutual dependence. The dependency graph on SCCs is a directed acyclic
-// graph (DAG) and therefore a topological order can be computed for it i.e. an
-// order where an SCC is ordered after all other SCCs it is dependent on have
-// been ordered.
-//
-// The function below first constructs the SCC graph and then computes a
-// deterministic topological order for the graph.
-//
-// For computing the SCC graph, we follow the following steps:
-// 1. Collect the descriptors for the messages in the file.
-// 2. Construct a map for descriptor to SCC mapping.
-// 3. Construct a map for dependence between SCCs, referred to as
-// child_to_parent_scc_map below. This map constructed by running a BFS on the
-// SCCs.
-//
-// For computing a deterministic topological order on the graph computed in step
-// 3 above, we do the following:
-// 1. Since the graph on SCCs is a DAG, therefore there will be at least one SCC
-// that does not depend on other SCCs. We first construct a list of all such
-// SCCs.
-// 2. Next we run a BFS starting with the list of SCCs computed in step 1. For
-// each SCC, we track the number of the SCC it is dependent on and the number of
-// those SCC that have been ordered. Once all the SCCs an SCC is dependent on
-// have been ordered, this SCC is added to list of SCCs that are to be ordered
-// next.
-// 3. Within an SCC, the descriptors are ordered on the basis of the full_name()
-// of the descriptors.
-std::vector<const Descriptor*> TopologicalSortMessagesInFile(
- const FileDescriptor* file, MessageSCCAnalyzer& scc_analyzer) {
- // Collect the messages defined in this file.
- std::vector<const Descriptor*> messages_in_file = FlattenMessagesInFile(file);
- if (messages_in_file.empty()) return {};
- // Populate the map from the descriptor to the SCC to which the descriptor
- // belongs.
- absl::flat_hash_map<const Descriptor*, const SCC*> descriptor_to_scc_map;
- descriptor_to_scc_map.reserve(messages_in_file.size());
- for (const Descriptor* d : messages_in_file) {
- descriptor_to_scc_map.emplace(d, scc_analyzer.GetSCC(d));
- }
- ABSL_DCHECK(messages_in_file.size() == descriptor_to_scc_map.size())
- << "messages_in_file has duplicate messages!";
- // Each parent SCC has information about the child SCCs i.e. SCCs for fields
- // that are contained in the protos that belong to the parent SCC. Use this
- // information to construct the inverse map from child SCC to parent SCC.
- absl::flat_hash_map<const SCC*, absl::flat_hash_set<const SCC*>>
- child_to_parent_scc_map;
- // For recording the number of edges from each SCC to other SCCs in the
- // forward map.
- absl::flat_hash_map<const SCC*, int> scc_to_outgoing_edges_map;
- std::queue<const SCC*> sccs_to_process;
- for (const auto& p : descriptor_to_scc_map) {
- sccs_to_process.push(p.second);
- }
- // Run a BFS to fill the two data structures: child_to_parent_scc_map and
- // scc_to_outgoing_edges_map.
- while (!sccs_to_process.empty()) {
- const SCC* scc = sccs_to_process.front();
- sccs_to_process.pop();
- auto& count = scc_to_outgoing_edges_map[scc];
- for (const auto& child : scc->children) {
- // Test whether this child has been seen thus far. We do not know if the
- // children SCC vector contains unique children SCC.
- auto& parent_set = child_to_parent_scc_map[child];
- if (parent_set.empty()) {
- // Just added.
- sccs_to_process.push(child);
- }
- auto ret = parent_set.insert(scc);
- if (ret.second) {
- ++count;
- }
- }
- }
- std::vector<const SCC*> next_scc_q;
- // Find out the SCCs that do not have an outgoing edge i.e. the protos in this
- // SCC do not depend on protos other than the ones in this SCC.
- for (const auto& p : scc_to_outgoing_edges_map) {
- if (p.second == 0) {
- next_scc_q.push_back(p.first);
- }
- }
- ABSL_DCHECK(!next_scc_q.empty()) << "No independent components!";
- // Topologically sort the SCCs.
- // If an SCC no longer has an outgoing edge i.e. all the SCCs it depends on
- // have been ordered, then this SCC is now a candidate for ordering.
- std::vector<const Descriptor*> sorted_messages;
- while (!next_scc_q.empty()) {
- std::vector<const SCC*> current_scc_q;
- current_scc_q.swap(next_scc_q);
- // SCCs present in the current_scc_q are topologically equivalent to each
- // other. Therefore they can be added to the output in any order. We sort
- // these SCCs by the full_name() of the first descriptor that belongs to the
- // SCC. This works well since the descriptors in each SCC are sorted by
- // full_name() and also that a descriptor can be part of only one SCC.
- std::sort(current_scc_q.begin(), current_scc_q.end(),
- [](const SCC* a, const SCC* b) {
- ABSL_DCHECK(!a->descriptors.empty()) << "No descriptors!";
- ABSL_DCHECK(!b->descriptors.empty()) << "No descriptors!";
- const Descriptor* ad = a->descriptors[0];
- const Descriptor* bd = b->descriptors[0];
- return ad->full_name() < bd->full_name();
- });
- while (!current_scc_q.empty()) {
- const SCC* scc = current_scc_q.back();
- current_scc_q.pop_back();
- // Messages in an SCC are already sorted on full_name(). So we can emit
- // them right away.
- for (const Descriptor* d : scc->descriptors) {
- // Only push messages that are defined in the file.
- if (descriptor_to_scc_map.contains(d)) {
- sorted_messages.push_back(d);
- }
- }
- // Find all the SCCs that are dependent on the current SCC.
- const auto& parents = child_to_parent_scc_map.find(scc);
- if (parents == child_to_parent_scc_map.end()) continue;
- for (const SCC* parent : parents->second) {
- auto it = scc_to_outgoing_edges_map.find(parent);
- ABSL_CHECK(it != scc_to_outgoing_edges_map.end());
- ABSL_CHECK(it->second > 0);
- // Reduce the dependency count for the SCC. In case the dependency
- // count reaches 0, add the SCC to the list of SCCs to be ordered next.
- it->second--;
- if (it->second == 0) {
- next_scc_q.push_back(parent);
- }
- }
- }
- }
- for (const auto& p : scc_to_outgoing_edges_map) {
- ABSL_DCHECK(p.second == 0) << "SCC left behind!";
- }
- return sorted_messages;
-}
} // namespace
bool FileGenerator::ShouldSkipDependencyImports(
@@ -957,6 +809,23 @@
)cc");
}
+void FileGenerator::GenerateStaticInitializer(io::Printer* p) {
+ if (static_initializers_.empty()) return;
+ p->Emit({{"expr",
+ [&] {
+ for (auto& init : static_initializers_) {
+ init(p);
+ }
+ }}},
+ R"cc(
+ PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+ static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ ($expr$, ::std::false_type{});
+ )cc");
+ // Reset the vector because we might be generating many files.
+ static_initializers_.clear();
+}
+
void FileGenerator::GenerateSourceForExtension(int idx, io::Printer* p) {
auto v = p->WithVars(FileVars(file_, options_));
GenerateSourceIncludes(p);
@@ -964,6 +833,10 @@
NamespaceOpener ns(Namespace(file_, options_), p);
extension_generators_[idx]->GenerateDefinition(p);
+ static_initializers_.push_back([this, idx](auto* p) {
+ extension_generators_[idx]->GenerateRegistration(p);
+ });
+ GenerateStaticInitializer(p);
}
void FileGenerator::GenerateGlobalSource(io::Printer* p) {
@@ -1043,8 +916,14 @@
}
// Define extensions.
+ const auto is_lazily_init = IsLazilyInitializedFile(file_->name());
for (int i = 0; i < extension_generators_.size(); ++i) {
extension_generators_[i]->GenerateDefinition(p);
+ if (!is_lazily_init) {
+ static_initializers_.push_back([&, i](auto* p) {
+ extension_generators_[i]->GenerateRegistration(p);
+ });
+ }
}
p->Emit(R"cc(
@@ -1067,9 +946,31 @@
UnmuteWuninitialized(p);
}
+ GenerateStaticInitializer(p);
+
IncludeFile("third_party/protobuf/port_undef.inc", p);
}
+static std::vector<const Descriptor*>
+GetMessagesToPinGloballyForWeakDescriptors(const FileDescriptor* file) {
+ std::vector<const Descriptor*> out;
+
+ // For simplicity we force pin request/response messages for all
+ // services. The current implementation of services might not do
+ // the pin itself, so it is simpler.
+ // This is a place for improvement in the future.
+ for (int i = 0; i < file->service_count(); ++i) {
+ auto* service = file->service(i);
+ for (int j = 0; j < service->method_count(); ++j) {
+ auto* method = service->method(j);
+ out.push_back(method->input_type());
+ out.push_back(method->output_type());
+ }
+ }
+
+ return out;
+}
+
void FileGenerator::GenerateReflectionInitializationCode(io::Printer* p) {
if (!message_generators_.empty()) {
p->Emit({{"len", message_generators_.size()}}, R"cc(
@@ -1103,6 +1004,8 @@
if (!message_generators_.empty()) {
std::vector<std::pair<size_t, size_t>> offsets;
offsets.reserve(message_generators_.size());
+ bool has_implicit_weak_descriptors =
+ UsingImplicitWeakDescriptor(file_, options_);
p->Emit(
{
@@ -1121,19 +1024,50 @@
offset += offsets[i].first;
}
}},
- {"defaults",
+ {"weak_defaults",
[&] {
+ if (!has_implicit_weak_descriptors) return;
+ int index = 0;
for (auto& gen : message_generators_) {
p->Emit(
{
+ {"index", index++},
{"ns", Namespace(gen->descriptor(), options_)},
{"class", ClassName(gen->descriptor())},
+ {"section", WeakDefaultWriterSection(gen->descriptor(),
+ options_)},
},
R"cc(
- &$ns$::_$class$_default_instance_._instance,
+ constexpr ::_pbi::WeakDefaultWriter pb_$index$_weak_
+ __attribute__((__nodebug__))
+ __attribute__((section("$section$"))) = {
+ file_default_instances + $index$,
+ &$ns$::_$class$_default_instance_._instance};
)cc");
}
}},
+ {"defaults",
+ [&] {
+ for (auto& gen : message_generators_) {
+ if (has_implicit_weak_descriptors) {
+ p->Emit(R"cc(
+ nullptr,
+ )cc");
+ } else {
+ p->Emit(
+ {
+ {"ns", Namespace(gen->descriptor(), options_)},
+ {"class", ClassName(gen->descriptor())},
+ },
+ R"cc(
+ &$ns$::_$class$_default_instance_._instance,
+ )cc");
+ }
+ }
+ }},
+ // When we have implicit weak descriptors we make the array mutable
+ // for dynamic initialization.
+ {"const", has_implicit_weak_descriptors ? "" : "const"},
},
R"cc(
const ::uint32_t
@@ -1147,9 +1081,10 @@
$schemas$,
};
- static const ::_pb::Message* const file_default_instances[] = {
+ static const ::_pb::Message* $const $file_default_instances[] = {
$defaults$,
};
+ $weak_defaults$;
)cc");
} else {
// Ee still need these symbols to exist.
@@ -1317,12 +1252,24 @@
// pull in a lot of unnecessary code that can't be stripped by --gc-sections.
// Descriptor initialization will still be performed lazily when it's needed.
if (!IsLazilyInitializedFile(file_->name())) {
- p->Emit({{"dummy", UniqueName("dynamic_init_dummy", file_, options_)}},
- R"cc(
- // Force running AddDescriptors() at dynamic initialization time.
- PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
- static ::_pbi::AddDescriptorsRunner $dummy$(&$desc_table$);
- )cc");
+ if (UsingImplicitWeakDescriptor(file_, options_)) {
+ for (auto* pinned : GetMessagesToPinGloballyForWeakDescriptors(file_)) {
+ static_initializers_.push_back([this, pinned](auto* p) {
+ p->Emit(
+ {
+ {"default", QualifiedDefaultInstanceName(pinned, options_)},
+ },
+ R"cc(
+ ::_pbi::StrongPointer(&$default$),
+ )cc");
+ });
+ }
+ }
+ static_initializers_.push_back([](auto* p) {
+ p->Emit(R"cc(
+ ::_pbi::AddDescriptors(&$desc_table$),
+ )cc");
+ });
}
// However, we must provide a way to force initialize the default instances
@@ -1523,21 +1470,14 @@
IncludeFile("third_party/protobuf/port_def.inc", p);
p->Emit(
{
- {"min_version", PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC},
{"version", PROTOBUF_VERSION},
},
R"(
- #if PROTOBUF_VERSION < $min_version$
- #error "This file was generated by a newer version of protoc which is"
- #error "incompatible with your Protocol Buffer headers. Please update"
- #error "your headers."
- #endif // PROTOBUF_VERSION
-
- #if $version$ < PROTOBUF_MIN_PROTOC_VERSION
- #error "This file was generated by an older version of protoc which is"
- #error "incompatible with your Protocol Buffer headers. Please"
- #error "regenerate this file with a newer version of protoc."
- #endif // PROTOBUF_MIN_PROTOC_VERSION
+ #if PROTOBUF_VERSION != $version$
+ #error "Protobuf C++ gencode is built with an incompatible version of"
+ #error "Protobuf C++ headers/runtime. See"
+ #error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+ #endif
)");
IncludeFile("third_party/protobuf/port_undef.inc", p);
}
diff --git a/src/google/protobuf/compiler/cpp/file.h b/src/google/protobuf/compiler/cpp/file.h
index 02f581d..8388207 100644
--- a/src/google/protobuf/compiler/cpp/file.h
+++ b/src/google/protobuf/compiler/cpp/file.h
@@ -19,6 +19,7 @@
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
+#include "absl/functional/any_invocable.h"
#include "absl/log/absl_check.h"
#include "google/protobuf/compiler/cpp/enum.h"
#include "google/protobuf/compiler/cpp/extension.h"
@@ -78,6 +79,11 @@
void GenerateFile(io::Printer* p, GeneratedFileType file_type,
std::function<void()> cb);
+ // Generates a static initializers with all the existing values from
+ // `static_initializers_`.
+ // They run in `PROTOBUF_ATTRIBUTE_INIT_PRIORITY2` priority.
+ void GenerateStaticInitializer(io::Printer* p);
+
// Shared code between the two header generators.
void GenerateSharedHeaderCode(io::Printer* p);
@@ -170,6 +176,8 @@
absl::flat_hash_set<const FileDescriptor*> weak_deps_;
+ std::vector<absl::AnyInvocable<void(io::Printer*)>> static_initializers_;
+
const FileDescriptor* file_;
Options options_;
diff --git a/src/google/protobuf/compiler/cpp/generator.cc b/src/google/protobuf/compiler/cpp/generator.cc
index cc0f8af..bd9ea7d 100644
--- a/src/google/protobuf/compiler/cpp/generator.cc
+++ b/src/google/protobuf/compiler/cpp/generator.cc
@@ -17,15 +17,21 @@
#include <utility>
#include <vector>
+#include "absl/container/flat_hash_map.h"
+#include "absl/log/absl_check.h"
+#include "absl/memory/memory.h"
#include "absl/status/status.h"
#include "absl/strings/match.h"
#include "absl/strings/str_cat.h"
+#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/file.h"
#include "google/protobuf/compiler/cpp/helpers.h"
+#include "google/protobuf/compiler/cpp/options.h"
#include "google/protobuf/cpp_features.pb.h"
#include "google/protobuf/descriptor.pb.h"
#include "google/protobuf/descriptor_visitor.h"
+#include "google/protobuf/io/printer.h"
namespace google {
@@ -139,6 +145,8 @@
if (!value.empty()) {
file_options.num_cc_files = std::strtol(value.c_str(), nullptr, 10);
}
+ } else if (key == "descriptor_implicit_weak_messages") {
+ file_options.descriptor_implicit_weak_messages = true;
} else if (key == "proto_h") {
file_options.proto_h = true;
} else if (key == "proto_static_reflection_h") {
@@ -328,6 +336,16 @@
return true;
}
+static bool IsEnumMapType(const FieldDescriptor& field) {
+ if (!field.is_map()) return false;
+ for (int i = 0; i < field.message_type()->field_count(); ++i) {
+ if (field.message_type()->field(i)->type() == FieldDescriptor::TYPE_ENUM) {
+ return true;
+ }
+ }
+ return false;
+}
+
absl::Status CppGenerator::ValidateFeatures(const FileDescriptor* file) const {
absl::Status status = absl::OkStatus();
google::protobuf::internal::VisitDescriptors(*file, [&](const FieldDescriptor& field) {
@@ -349,7 +367,8 @@
// a lot of these conditions. Note: we do still validate the
// user-specified map field.
if (unresolved_features.has_legacy_closed_enum() &&
- field.cpp_type() != FieldDescriptor::CPPTYPE_ENUM) {
+ field.cpp_type() != FieldDescriptor::CPPTYPE_ENUM &&
+ !IsEnumMapType(field)) {
status = absl::FailedPreconditionError(
absl::StrCat("Field ", field.full_name(),
" specifies the legacy_closed_enum feature but has "
diff --git a/src/google/protobuf/compiler/cpp/helpers.cc b/src/google/protobuf/compiler/cpp/helpers.cc
index 8a4fd03..79d4768 100644
--- a/src/google/protobuf/compiler/cpp/helpers.cc
+++ b/src/google/protobuf/compiler/cpp/helpers.cc
@@ -15,6 +15,7 @@
#include <cstdint>
#include <limits>
#include <memory>
+#include <queue>
#include <string>
#include <utility>
#include <vector>
@@ -1317,6 +1318,154 @@
}
}
+// TopologicalSortMessagesInFile topologically sorts and returns a vector of
+// proto descriptors defined in the file provided as input. The underlying
+// graph is defined using dependency relationship between protos. For example,
+// if proto A contains proto B as a member, then proto B would be ordered before
+// proto A in a topological ordering, assuming there is no mutual dependence
+// between the two protos. The topological order is used to emit proto
+// declarations so that a proto is declared after all the protos it is dependent
+// on have been declared (again assuming no mutual dependence). This is needed
+// in cases where we may declare proto B as a member of proto A using an object,
+// instead of a pointer.
+//
+// The proto dependency graph can have cycles. So instead of directly working
+// with protos, we compute strong connected components (SCCs) composed of protos
+// with mutual dependence. The dependency graph on SCCs is a directed acyclic
+// graph (DAG) and therefore a topological order can be computed for it i.e. an
+// order where an SCC is ordered after all other SCCs it is dependent on have
+// been ordered.
+//
+// The function below first constructs the SCC graph and then computes a
+// deterministic topological order for the graph.
+//
+// For computing the SCC graph, we follow the following steps:
+// 1. Collect the descriptors for the messages in the file.
+// 2. Construct a map for descriptor to SCC mapping.
+// 3. Construct a map for dependence between SCCs, referred to as
+// child_to_parent_scc_map below. This map constructed by running a BFS on the
+// SCCs.
+//
+// For computing a deterministic topological order on the graph computed in step
+// 3 above, we do the following:
+// 1. Since the graph on SCCs is a DAG, therefore there will be at least one SCC
+// that does not depend on other SCCs. We first construct a list of all such
+// SCCs.
+// 2. Next we run a BFS starting with the list of SCCs computed in step 1. For
+// each SCC, we track the number of the SCC it is dependent on and the number of
+// those SCC that have been ordered. Once all the SCCs an SCC is dependent on
+// have been ordered, this SCC is added to list of SCCs that are to be ordered
+// next.
+// 3. Within an SCC, the descriptors are ordered on the basis of the full_name()
+// of the descriptors.
+std::vector<const Descriptor*> TopologicalSortMessagesInFile(
+ const FileDescriptor* file, MessageSCCAnalyzer& scc_analyzer) {
+ // Collect the messages defined in this file.
+ std::vector<const Descriptor*> messages_in_file = FlattenMessagesInFile(file);
+ if (messages_in_file.empty()) return {};
+ // Populate the map from the descriptor to the SCC to which the descriptor
+ // belongs.
+ absl::flat_hash_map<const Descriptor*, const SCC*> descriptor_to_scc_map;
+ descriptor_to_scc_map.reserve(messages_in_file.size());
+ for (const Descriptor* d : messages_in_file) {
+ descriptor_to_scc_map.emplace(d, scc_analyzer.GetSCC(d));
+ }
+ ABSL_DCHECK(messages_in_file.size() == descriptor_to_scc_map.size())
+ << "messages_in_file has duplicate messages!";
+ // Each parent SCC has information about the child SCCs i.e. SCCs for fields
+ // that are contained in the protos that belong to the parent SCC. Use this
+ // information to construct the inverse map from child SCC to parent SCC.
+ absl::flat_hash_map<const SCC*, absl::flat_hash_set<const SCC*>>
+ child_to_parent_scc_map;
+ // For recording the number of edges from each SCC to other SCCs in the
+ // forward map.
+ absl::flat_hash_map<const SCC*, int> scc_to_outgoing_edges_map;
+ std::queue<const SCC*> sccs_to_process;
+ for (const auto& p : descriptor_to_scc_map) {
+ sccs_to_process.push(p.second);
+ }
+ // Run a BFS to fill the two data structures: child_to_parent_scc_map and
+ // scc_to_outgoing_edges_map.
+ while (!sccs_to_process.empty()) {
+ const SCC* scc = sccs_to_process.front();
+ sccs_to_process.pop();
+ auto& count = scc_to_outgoing_edges_map[scc];
+ for (const auto& child : scc->children) {
+ // Test whether this child has been seen thus far. We do not know if the
+ // children SCC vector contains unique children SCC.
+ auto& parent_set = child_to_parent_scc_map[child];
+ if (parent_set.empty()) {
+ // Just added.
+ sccs_to_process.push(child);
+ }
+ auto ret = parent_set.insert(scc);
+ if (ret.second) {
+ ++count;
+ }
+ }
+ }
+ std::vector<const SCC*> next_scc_q;
+ // Find out the SCCs that do not have an outgoing edge i.e. the protos in this
+ // SCC do not depend on protos other than the ones in this SCC.
+ for (const auto& p : scc_to_outgoing_edges_map) {
+ if (p.second == 0) {
+ next_scc_q.push_back(p.first);
+ }
+ }
+ ABSL_DCHECK(!next_scc_q.empty()) << "No independent components!";
+ // Topologically sort the SCCs.
+ // If an SCC no longer has an outgoing edge i.e. all the SCCs it depends on
+ // have been ordered, then this SCC is now a candidate for ordering.
+ std::vector<const Descriptor*> sorted_messages;
+ while (!next_scc_q.empty()) {
+ std::vector<const SCC*> current_scc_q;
+ current_scc_q.swap(next_scc_q);
+ // SCCs present in the current_scc_q are topologically equivalent to each
+ // other. Therefore they can be added to the output in any order. We sort
+ // these SCCs by the full_name() of the first descriptor that belongs to the
+ // SCC. This works well since the descriptors in each SCC are sorted by
+ // full_name() and also that a descriptor can be part of only one SCC.
+ std::sort(current_scc_q.begin(), current_scc_q.end(),
+ [](const SCC* a, const SCC* b) {
+ ABSL_DCHECK(!a->descriptors.empty()) << "No descriptors!";
+ ABSL_DCHECK(!b->descriptors.empty()) << "No descriptors!";
+ const Descriptor* ad = a->descriptors[0];
+ const Descriptor* bd = b->descriptors[0];
+ return ad->full_name() < bd->full_name();
+ });
+ while (!current_scc_q.empty()) {
+ const SCC* scc = current_scc_q.back();
+ current_scc_q.pop_back();
+ // Messages in an SCC are already sorted on full_name(). So we can emit
+ // them right away.
+ for (const Descriptor* d : scc->descriptors) {
+ // Only push messages that are defined in the file.
+ if (descriptor_to_scc_map.contains(d)) {
+ sorted_messages.push_back(d);
+ }
+ }
+ // Find all the SCCs that are dependent on the current SCC.
+ const auto& parents = child_to_parent_scc_map.find(scc);
+ if (parents == child_to_parent_scc_map.end()) continue;
+ for (const SCC* parent : parents->second) {
+ auto it = scc_to_outgoing_edges_map.find(parent);
+ ABSL_CHECK(it != scc_to_outgoing_edges_map.end());
+ ABSL_CHECK(it->second > 0);
+ // Reduce the dependency count for the SCC. In case the dependency
+ // count reaches 0, add the SCC to the list of SCCs to be ordered next.
+ it->second--;
+ if (it->second == 0) {
+ next_scc_q.push_back(parent);
+ }
+ }
+ }
+ }
+ for (const auto& p : scc_to_outgoing_edges_map) {
+ ABSL_DCHECK(p.second == 0) << "SCC left behind!";
+ }
+ return sorted_messages;
+}
+
bool HasWeakFields(const Descriptor* descriptor, const Options& options) {
for (int i = 0; i < descriptor->field_count(); i++) {
if (IsWeak(descriptor->field(i), options)) return true;
@@ -1331,6 +1480,32 @@
return false;
}
+bool UsingImplicitWeakDescriptor(const FileDescriptor* file,
+ const Options& options) {
+ return HasDescriptorMethods(file, options) &&
+ !IsBootstrapProto(options, file) &&
+ options.descriptor_implicit_weak_messages &&
+ !options.opensource_runtime;
+}
+
+std::string WeakDefaultWriterSection(const Descriptor* descriptor,
+ const Options& options) {
+ const auto* file = descriptor->file();
+
+ // To make a compact name we use the index of the object in its parent instead
+ // of its name, recursively until we reach the root.
+ // So the name could be `pb_def_1_2_1_0_HASH` instead of
+ // `pd_def_VeryLongClassName_WithNesting_AndMoreNames_HASH`
+ // We need a know common prefix to merge the sections later on.
+ std::string prefix = "pb_def";
+ do {
+ absl::StrAppend(&prefix, "_", descriptor->index());
+ descriptor = descriptor->containing_type();
+ } while (descriptor != nullptr);
+
+ return UniqueName(prefix, file, options);
+}
+
bool UsingImplicitWeakFields(const FileDescriptor* file,
const Options& options) {
return options.lite_implicit_weak_fields &&
diff --git a/src/google/protobuf/compiler/cpp/helpers.h b/src/google/protobuf/compiler/cpp/helpers.h
index 9275bf1..64e2a82 100644
--- a/src/google/protobuf/compiler/cpp/helpers.h
+++ b/src/google/protobuf/compiler/cpp/helpers.h
@@ -629,6 +629,9 @@
return result;
}
+std::vector<const Descriptor*> TopologicalSortMessagesInFile(
+ const FileDescriptor* file, MessageSCCAnalyzer& scc_analyzer);
+
template <typename F>
void ForEachMessage(const Descriptor* descriptor, F&& func) {
for (int i = 0; i < descriptor->nested_type_count(); i++)
@@ -731,6 +734,64 @@
void ListAllTypesForServices(const FileDescriptor* fd,
std::vector<const Descriptor*>* types);
+// Whether this type should use the implicit weak feature for descriptor based
+// objects.
+//
+// This feature allows tree shaking within a single translation unit by
+// decoupling the messages from the TU-wide `file_default_instances` array.
+// This way there are no static initializers in the TU pointing to any part of
+// the generated classes and they can be GC'd by the linker.
+// Instead, we inject the surviving messages by having `WeakDefaultWriter`
+// objects in a special `pb_defaults` section. The runtime will iterate this
+// section to see the list of all live objects and put them back into the
+// `file_default_instances` array.
+//
+// Any object that gets GC'd will have a `nullptr` in the respective slot in the
+// `file_default_instances` array. The runtime will recognize this and will
+// dynamically generate the object if needed. This logic is in the
+// `GeneratedMessageFactory::GetPrototype`. It will fall back to a
+// `DynamicMessage` for the missing objects.
+// This allows all of reflection to keep working normally, even for types that
+// were dropped. Note that dropping the _classes_ will not drop the descriptor
+// information. The messages are still going to be registered in the generated
+// `DescriptorPool` and will be available via normal `FindMessageTypeByName` and
+// friends.
+//
+// A "pin" is adding dependency edge in the graph for the GC.
+// The `WeakDefaultWriter`, the default instance, and vtable of a message all
+// pin each other. If anyone lives, they all do. This is important.
+// The `WeakDefaultWriter` pins the default instance of the message by using it.
+// The default instance of the message pins the vtable trivially by using it.
+// The vtable pins the `WeakDefaultWriter` by having a StrongPointer into it
+// from any of the virtual functions.
+//
+// All parent messages pin their children.
+// SPEED messages do this implicitly via the TcParseTable, which contain
+// pointers to the submessages.
+// CODE_SIZE messages explicitly add a pin via `StrongPointer` somewhere in
+// their codegen.
+// LITE messages do not participate at all in this feature.
+//
+// For extensions, the identifiers currently pin the extendee. The extended is
+// assumed to by pinned elsewhere since we already have an instance of it when
+// we call `.GetExtension` et al. The extension identifier itself is not
+// automatically pinned, so it has to be used to participate in the graph.
+// Registration of the extensions do not pin the extended or the extendee. At
+// registration time we will eagerly create a prototype object if one is
+// missing to insert in the extension table in ExtensionSet.
+//
+// For services, the TU unconditionally pins the request/response objects.
+// This is the status quo for simplicitly to avoid modifying the RPC layer. It
+// might be improved in the future.
+bool UsingImplicitWeakDescriptor(const FileDescriptor* file,
+ const Options& options);
+
+// Section name to be used for the DefaultWriter object for implicit weak
+// descriptor objects.
+// See `UsingImplicitWeakDescriptor` above.
+std::string WeakDefaultWriterSection(const Descriptor* descriptor,
+ const Options& options);
+
// Indicates whether we should use implicit weak fields for this file.
bool UsingImplicitWeakFields(const FileDescriptor* file,
const Options& options);
diff --git a/src/google/protobuf/compiler/cpp/message.cc b/src/google/protobuf/compiler/cpp/message.cc
index 0c41a5e..cbd5aa9 100644
--- a/src/google/protobuf/compiler/cpp/message.cc
+++ b/src/google/protobuf/compiler/cpp/message.cc
@@ -13,6 +13,7 @@
#include <algorithm>
#include <cmath>
+#include <cstddef>
#include <cstdint>
#include <functional>
#include <iterator>
@@ -28,6 +29,7 @@
#include "absl/log/absl_log.h"
#include "absl/strings/ascii.h"
#include "absl/strings/escaping.h"
+#include "absl/strings/match.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "absl/strings/str_join.h"
@@ -37,6 +39,7 @@
#include "google/protobuf/compiler/cpp/field.h"
#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/compiler/cpp/names.h"
+#include "google/protobuf/compiler/cpp/options.h"
#include "google/protobuf/compiler/cpp/padding_optimizer.h"
#include "google/protobuf/compiler/cpp/parse_function_generator.h"
#include "google/protobuf/compiler/cpp/tracker.h"
@@ -657,76 +660,75 @@
auto v = p->WithVars(FieldVars(field, options_));
auto t = p->WithVars(MakeTrackerCalls(field, options_));
- p->Emit(
- {{"field_comment", FieldComment(field, options_)},
- Sub("const_impl", "const;").WithSuffix(";"),
- Sub("impl", ";").WithSuffix(";"),
- {"sizer",
- [&] {
- if (!field->is_repeated()) return;
- p->Emit({Sub("name_size", absl::StrCat(name, "_size"))
- .AnnotatedAs(field)},
- R"cc(
- $deprecated_attr $int $name_size$() $const_impl$;
- )cc");
+ p->Emit({{"field_comment", FieldComment(field, options_)},
+ Sub("const_impl", "const;").WithSuffix(";"),
+ Sub("impl", ";").WithSuffix(";"),
+ {"sizer",
+ [&] {
+ if (!field->is_repeated()) return;
+ p->Emit({Sub("name_size", absl::StrCat(name, "_size"))
+ .AnnotatedAs(field)},
+ R"cc(
+ $deprecated_attr $int $name_size$() $const_impl$;
+ )cc");
- p->Emit({Sub("_internal_name_size",
- absl::StrCat("_internal_", name, "_size"))
- .AnnotatedAs(field)},
- R"cc(
- private:
- int $_internal_name_size$() const;
+ p->Emit({Sub("_internal_name_size",
+ absl::StrCat("_internal_", name, "_size"))
+ .AnnotatedAs(field)},
+ R"cc(
+ private:
+ int $_internal_name_size$() const;
- public:
- )cc");
- }},
- {"hazzer",
- [&] {
- if (!field->has_presence()) return;
- p->Emit({Sub("has_name", absl::StrCat("has_", name))
- .AnnotatedAs(field)},
- R"cc(
- $deprecated_attr $bool $has_name$() $const_impl$;
- )cc");
- }},
- {"internal_hazzer",
- [&] {
- if (field->is_repeated() || !HasInternalHasMethod(field)) {
- return;
- }
- p->Emit(
- {Sub("_internal_has_name", absl::StrCat("_internal_has_", name))
- .AnnotatedAs(field)},
- R"cc(
- private:
- bool $_internal_has_name$() const;
+ public:
+ )cc");
+ }},
+ {"hazzer",
+ [&] {
+ if (!field->has_presence()) return;
+ p->Emit({Sub("has_name", absl::StrCat("has_", name))
+ .AnnotatedAs(field)},
+ R"cc(
+ $deprecated_attr $bool $has_name$() $const_impl$;
+ )cc");
+ }},
+ {"internal_hazzer",
+ [&] {
+ if (field->is_repeated() || !HasInternalHasMethod(field)) {
+ return;
+ }
+ p->Emit({Sub("_internal_has_name",
+ absl::StrCat("_internal_has_", name))
+ .AnnotatedAs(field)},
+ R"cc(
+ private:
+ bool $_internal_has_name$() const;
- public:
- )cc");
- }},
- {"clearer",
- [&] {
- p->Emit({Sub("clear_name", absl::StrCat("clear_", name))
- .AnnotatedAs({
- field,
- Semantic::kSet,
- })},
- R"cc(
- $deprecated_attr $void $clear_name$() $impl$;
- )cc");
- }},
- {"accessors",
- [&] {
- field_generators_.get(field).GenerateAccessorDeclarations(p);
- }}},
- R"cc(
- // $field_comment$
- $sizer$;
- $hazzer$;
- $internal_hazzer$;
- $clearer$;
- $accessors$;
- )cc");
+ public:
+ )cc");
+ }},
+ {"clearer",
+ [&] {
+ p->Emit({Sub("clear_name", absl::StrCat("clear_", name))
+ .AnnotatedAs({
+ field,
+ Semantic::kSet,
+ })},
+ R"cc(
+ $deprecated_attr $void $clear_name$() $impl$;
+ )cc");
+ }},
+ {"accessors",
+ [&] {
+ field_generators_.get(field).GenerateAccessorDeclarations(p);
+ }}},
+ R"cc(
+ // $field_comment$
+ $sizer$;
+ $hazzer$;
+ $internal_hazzer$;
+ $clearer$;
+ $accessors$;
+ )cc");
}
if (descriptor_->extension_range_count() > 0) {
@@ -1059,7 +1061,7 @@
}
if (HasInternalHasMethod(field)) {
p->Emit(R"cc(
- inline bool $classname$::_internal_has_$name$() const {
+ inline bool $classname$::_internal_has_$name_internal$() const {
return $has_field$;
}
)cc");
@@ -1067,7 +1069,7 @@
// set_has_$name$() for oneof fields is always private; hence should not be
// annotated.
p->Emit(R"cc(
- inline void $classname$::set_has_$name$() {
+ inline void $classname$::set_has_$name_internal$() {
$oneof_case$[$oneof_index$] = k$field_name$;
}
)cc");
@@ -1119,22 +1121,81 @@
)cc");
}
+namespace {
+
+class AccessorVerifier {
+ public:
+ using SourceLocation = io::Printer::SourceLocation;
+
+ AccessorVerifier(const FieldDescriptor* field) : field_(field) {}
+ ~AccessorVerifier() {
+ ABSL_CHECK(!needs_annotate_) << Error(SourceLocation::current());
+ }
+
+ void operator()(absl::string_view label, io::Printer::SourceLocation loc) {
+ if (label == "name" || label == "release_name") {
+ // All accessors use $name$ or $release_name$ when constructing the
+ // function name. We hook into those to determine that an accessor is
+ // starting.
+ ABSL_CHECK(!needs_annotate_) << Error(loc);
+ loc_ = loc;
+ needs_annotate_ = true;
+ } else if (absl::StartsWith(label, "annotate")) {
+ // All annotation labels start with `annotate`. Eg `annotate_get`.
+ ABSL_CHECK(needs_annotate_) << Error(loc);
+ loc_ = loc;
+ needs_annotate_ = false;
+ }
+ }
+
+ private:
+ std::string Error(SourceLocation loc) const {
+ return absl::StrFormat("Field %s printed from %s:%d (prev %s:%d)\n",
+ field_->full_name(), loc.file_name(), loc.line(),
+ loc_.file_name(), loc_.line());
+ }
+
+ bool needs_annotate_ = false;
+ // We keep these fields for error reporting.
+ const FieldDescriptor* field_;
+ // On error, we report two locations: the current one and the last one. This
+ // can help determine where the bug is. For example, if we see "name" twice in
+ // a row, the bug is likely in the "last" one and not the current one because
+ // it means the previous accessor didn't add the required code.
+ SourceLocation loc_;
+};
+
+} // namespace
+
void MessageGenerator::GenerateFieldAccessorDefinitions(io::Printer* p) {
p->Emit("// $classname$\n\n");
for (auto field : FieldRange(descriptor_)) {
+ // We use a print listener to verify that the field generators properly add
+ // the right annotations. This is only a verification step aimed to prevent
+ // bugs where we have lack of test coverage. Note that this will verify the
+ // annotations even when the particular feature is not on because we look at
+ // the substitution variables, not the substitution result.
+ // The check is a state machine that verifies that every substitution for
+ // `name` is followed by one and only one for needed annotations. False
+ // positives are accessors that are using $name$ for an internal name. For
+ // those you can use $name_internal$ which is the same substitution but not
+ // tracked by the verifier.
+ const auto accessor_verifier =
+ p->WithSubstitutionListener(AccessorVerifier(field));
+
PrintFieldComment(Formatter{p}, field, options_);
auto v = p->WithVars(FieldVars(field, options_));
auto t = p->WithVars(MakeTrackerCalls(field, options_));
if (field->is_repeated()) {
p->Emit(R"cc(
- inline int $classname$::_internal_$name$_size() const {
- return _internal_$name$().size();
+ inline int $classname$::_internal_$name_internal$_size() const {
+ return _internal_$name_internal$().size();
}
inline int $classname$::$name$_size() const {
$annotate_size$;
- return _internal_$name$_size();
+ return _internal_$name_internal$_size();
}
)cc");
} else if (field->real_containing_oneof()) {
@@ -1155,6 +1216,381 @@
GenerateOneofHasBits(p);
}
+void MessageGenerator::GenerateMapEntryClassDefinition(io::Printer* p) {
+ Formatter format(p);
+ absl::flat_hash_map<absl::string_view, std::string> vars;
+ CollectMapInfo(options_, descriptor_, &vars);
+ ABSL_CHECK(HasDescriptorMethods(descriptor_->file(), options_));
+ auto v = p->WithVars(std::move(vars));
+ // Templatize constexpr constructor as a workaround for a bug in gcc 12
+ // (warning in gcc 13).
+ p->Emit(R"cc(
+ class $classname$ final
+ : public ::$proto_ns$::internal::MapEntry<
+ $classname$, $key_cpp$, $val_cpp$,
+ ::$proto_ns$::internal::WireFormatLite::$key_wire_type$,
+ ::$proto_ns$::internal::WireFormatLite::$val_wire_type$> {
+ public:
+ using SuperType = ::$proto_ns$::internal::MapEntry<
+ $classname$, $key_cpp$, $val_cpp$,
+ ::$proto_ns$::internal::WireFormatLite::$key_wire_type$,
+ ::$proto_ns$::internal::WireFormatLite::$val_wire_type$>;
+ $classname$();
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR $classname$(
+ ::$proto_ns$::internal::ConstantInitialized);
+ explicit $classname$(::$proto_ns$::Arena* arena);
+ static const $classname$* internal_default_instance() {
+ return reinterpret_cast<const $classname$*>(
+ &_$classname$_default_instance_);
+ }
+ )cc");
+ auto utf8_check = internal::cpp::GetUtf8CheckMode(
+ descriptor_->field(0), GetOptimizeFor(descriptor_->file(), options_) ==
+ FileOptions::LITE_RUNTIME);
+ if (descriptor_->field(0)->type() == FieldDescriptor::TYPE_STRING &&
+ utf8_check != Utf8CheckMode::kNone) {
+ if (utf8_check == Utf8CheckMode::kStrict) {
+ format(
+ " static bool ValidateKey(std::string* s) {\n"
+ " return ::$proto_ns$::internal::WireFormatLite::"
+ "VerifyUtf8String(s->data(), static_cast<int>(s->size()), "
+ "::$proto_ns$::internal::WireFormatLite::PARSE, \"$1$\");\n"
+ " }\n",
+ descriptor_->field(0)->full_name());
+ } else {
+ ABSL_CHECK(utf8_check == Utf8CheckMode::kVerify);
+ format(
+ " static bool ValidateKey(std::string* s) {\n"
+ "#ifndef NDEBUG\n"
+ " ::$proto_ns$::internal::WireFormatLite::VerifyUtf8String(\n"
+ " s->data(), static_cast<int>(s->size()), "
+ "::$proto_ns$::internal::"
+ "WireFormatLite::PARSE, \"$1$\");\n"
+ "#else\n"
+ " (void) s;\n"
+ "#endif\n"
+ " return true;\n"
+ " }\n",
+ descriptor_->field(0)->full_name());
+ }
+ } else {
+ format(" static bool ValidateKey(void*) { return true; }\n");
+ }
+ if (descriptor_->field(1)->type() == FieldDescriptor::TYPE_STRING &&
+ utf8_check != Utf8CheckMode::kNone) {
+ if (utf8_check == Utf8CheckMode::kStrict) {
+ format(
+ " static bool ValidateValue(std::string* s) {\n"
+ " return ::$proto_ns$::internal::WireFormatLite::"
+ "VerifyUtf8String(s->data(), static_cast<int>(s->size()), "
+ "::$proto_ns$::internal::WireFormatLite::PARSE, \"$1$\");\n"
+ " }\n",
+ descriptor_->field(1)->full_name());
+ } else {
+ ABSL_CHECK(utf8_check == Utf8CheckMode::kVerify);
+ format(
+ " static bool ValidateValue(std::string* s) {\n"
+ "#ifndef NDEBUG\n"
+ " ::$proto_ns$::internal::WireFormatLite::VerifyUtf8String(\n"
+ " s->data(), static_cast<int>(s->size()), "
+ "::$proto_ns$::internal::"
+ "WireFormatLite::PARSE, \"$1$\");\n"
+ "#else\n"
+ " (void) s;\n"
+ "#endif\n"
+ " return true;\n"
+ " }\n",
+ descriptor_->field(1)->full_name());
+ }
+ } else {
+ format(" static bool ValidateValue(void*) { return true; }\n");
+ }
+ if (HasDescriptorMethods(descriptor_->file(), options_)) {
+ format(" ::$proto_ns$::Metadata GetMetadata() const final;\n");
+ }
+ format(
+ " friend struct ::$tablename$;\n"
+ "};\n");
+}
+
+void MessageGenerator::GenerateImplDefinition(io::Printer* p) {
+ // Prepare decls for _cached_size_ and _has_bits_. Their position in the
+ // output will be determined later.
+ bool need_to_emit_cached_size = !HasSimpleBaseClass(descriptor_, options_);
+ const size_t sizeof_has_bits = HasBitsSize();
+
+ // To minimize padding, data members are divided into three sections:
+ // (1) members assumed to align to 8 bytes
+ // (2) members corresponding to message fields, re-ordered to optimize
+ // alignment.
+ // (3) members assumed to align to 4 bytes.
+ p->Emit(
+ {{"extension_set",
+ [&] {
+ if (descriptor_->extension_range_count() == 0) return;
+
+ p->Emit(R"cc(
+ ::$proto_ns$::internal::ExtensionSet _extensions_;
+ )cc");
+ }},
+ {"tracker",
+ [&] {
+ if (!HasTracker(descriptor_, options_)) return;
+
+ p->Emit(R"cc(
+ static ::$proto_ns$::AccessListener<$Msg$> _tracker_;
+ )cc");
+ }},
+ {"inlined_string_donated",
+ [&] {
+ // Generate _inlined_string_donated_ for inlined string type.
+ // TODO: To avoid affecting the locality of
+ // `_has_bits_`, should this be below or above `_has_bits_`?
+ if (inlined_string_indices_.empty()) return;
+
+ p->Emit({{"donated_size", InlinedStringDonatedSize()}},
+ R"cc(
+ ::$proto_ns$::internal::HasBits<$donated_size$>
+ _inlined_string_donated_;
+ )cc");
+ }},
+ {"has_bits",
+ [&] {
+ if (has_bit_indices_.empty()) return;
+
+ // _has_bits_ is frequently accessed, so to reduce code size and
+ // improve speed, it should be close to the start of the object.
+ // Placing _cached_size_ together with _has_bits_ improves cache
+ // locality despite potential alignment padding.
+ p->Emit({{"sizeof_has_bits", sizeof_has_bits}}, R"cc(
+ ::$proto_ns$::internal::HasBits<$sizeof_has_bits$> _has_bits_;
+ )cc");
+ if (need_to_emit_cached_size) {
+ p->Emit(R"cc(
+ mutable ::$proto_ns$::internal::CachedSize _cached_size_;
+ )cc");
+ need_to_emit_cached_size = false;
+ }
+ }},
+ {"field_members",
+ [&] {
+ // Emit some private and static members
+ for (auto field : optimized_order_) {
+ field_generators_.get(field).GenerateStaticMembers(p);
+ if (!ShouldSplit(field, options_)) {
+ field_generators_.get(field).GeneratePrivateMembers(p);
+ }
+ }
+ }},
+ {"decl_split",
+ [&] {
+ if (!ShouldSplit(descriptor_, options_)) return;
+ p->Emit({{"split_field",
+ [&] {
+ for (auto field : optimized_order_) {
+ if (!ShouldSplit(field, options_)) continue;
+ field_generators_.get(field).GeneratePrivateMembers(p);
+ }
+ }}},
+ R"cc(
+ struct Split {
+ $split_field$;
+ using InternalArenaConstructable_ = void;
+ using DestructorSkippable_ = void;
+ };
+ static_assert(std::is_trivially_copy_constructible<Split>::value);
+ static_assert(std::is_trivially_destructible<Split>::value);
+ Split* _split_;
+ )cc");
+ }},
+ {"oneof_members",
+ [&] {
+ // For each oneof generate a union
+ for (auto oneof : OneOfRange(descriptor_)) {
+ // explicit empty constructor is needed when union contains
+ // ArenaStringPtr members for string fields.
+ p->Emit(
+ {{"camel_oneof_name",
+ UnderscoresToCamelCase(oneof->name(), true)},
+ {"oneof_name", oneof->name()},
+ {"oneof_fields",
+ [&] {
+ for (auto field : FieldRange(oneof)) {
+ field_generators_.get(field).GeneratePrivateMembers(p);
+ }
+ }}},
+ R"cc(
+ union $camel_oneof_name$Union {
+ constexpr $camel_oneof_name$Union() : _constinit_{} {}
+ ::$proto_ns$::internal::ConstantInitialized _constinit_;
+ $oneof_fields$;
+ } $oneof_name$_;
+ )cc");
+ for (auto field : FieldRange(oneof)) {
+ field_generators_.get(field).GenerateStaticMembers(p);
+ }
+ }
+ }},
+ {"cached_size_if_no_hasbits",
+ [&] {
+ if (!need_to_emit_cached_size) return;
+
+ need_to_emit_cached_size = false;
+ p->Emit(R"cc(
+ mutable ::$proto_ns$::internal::CachedSize _cached_size_;
+ )cc");
+ }},
+ {"oneof_case",
+ [&] {
+ // Generate _oneof_case_.
+ if (descriptor_->real_oneof_decl_count() == 0) return;
+
+ p->Emit({{"count", descriptor_->real_oneof_decl_count()}},
+ R"cc(
+ $uint32$ _oneof_case_[$count$];
+ )cc");
+ }},
+ {"weak_field_map",
+ [&] {
+ if (num_weak_fields_ == 0) return;
+
+ p->Emit(R"cc(
+ ::$proto_ns$::internal::WeakFieldMap _weak_field_map_;
+ )cc");
+ }},
+ {"any_metadata",
+ [&] {
+ // Generate _any_metadata_ for the Any type.
+ if (!IsAnyMessage(descriptor_)) return;
+
+ p->Emit(R"cc(
+ ::$proto_ns$::internal::AnyMetadata _any_metadata_;
+ )cc");
+ }},
+ {"union_impl",
+ [&] {
+ // Only create the _impl_ field if it contains data.
+ if (!HasImplData(descriptor_, options_)) return;
+
+ // clang-format off
+ p->Emit(R"cc(union { Impl_ _impl_; };)cc");
+ // clang-format on
+ }}},
+ R"cc(
+ struct Impl_ {
+ //~ TODO: check if/when there is a need for an
+ //~ outline dtor.
+ inline explicit constexpr Impl_(
+ ::$proto_ns$::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_($pbi$::InternalVisibility visibility,
+ ::$proto_ns$::Arena* arena);
+ inline explicit Impl_($pbi$::InternalVisibility visibility,
+ ::$proto_ns$::Arena* arena, const Impl_& from);
+ //~ Members assumed to align to 8 bytes:
+ $extension_set$;
+ $tracker$;
+ $inlined_string_donated$;
+ $has_bits$;
+ //~ Field members:
+ $field_members$;
+ $decl_split$;
+ $oneof_members$;
+ //~ Members assumed to align to 4 bytes:
+ $cached_size_if_no_hasbits$;
+ $oneof_case$;
+ $weak_field_map$;
+ $any_metadata$;
+ //~ For detecting when concurrent accessor calls cause races.
+ PROTOBUF_TSAN_DECLARE_MEMBER
+ };
+ $union_impl$;
+ )cc");
+
+ ABSL_DCHECK(!need_to_emit_cached_size);
+}
+
+void MessageGenerator::GenerateAnyMethodDefinition(io::Printer* p) {
+ ABSL_DCHECK(IsAnyMessage(descriptor_));
+
+ p->Emit({{"any_methods",
+ [&] {
+ if (HasDescriptorMethods(descriptor_->file(), options_)) {
+ p->Emit(
+ R"cc(
+ bool PackFrom(const ::$proto_ns$::Message& message) {
+ $DCHK$_NE(&message, this);
+ return $any_metadata$.PackFrom(GetArena(), message);
+ }
+ bool PackFrom(const ::$proto_ns$::Message& message,
+ ::absl::string_view type_url_prefix) {
+ $DCHK$_NE(&message, this);
+ return $any_metadata$.PackFrom(GetArena(), message, type_url_prefix);
+ }
+ bool UnpackTo(::$proto_ns$::Message* message) const {
+ return $any_metadata$.UnpackTo(message);
+ }
+ static bool GetAnyFieldDescriptors(
+ const ::$proto_ns$::Message& message,
+ const ::$proto_ns$::FieldDescriptor** type_url_field,
+ const ::$proto_ns$::FieldDescriptor** value_field);
+ template <
+ typename T,
+ class = typename std::enable_if<!std::is_convertible<
+ T, const ::$proto_ns$::Message&>::value>::type>
+ bool PackFrom(const T& message) {
+ return $any_metadata$.PackFrom<T>(GetArena(), message);
+ }
+ template <
+ typename T,
+ class = typename std::enable_if<!std::is_convertible<
+ T, const ::$proto_ns$::Message&>::value>::type>
+ bool PackFrom(const T& message,
+ ::absl::string_view type_url_prefix) {
+ return $any_metadata$.PackFrom<T>(GetArena(), message, type_url_prefix);
+ }
+ template <
+ typename T,
+ class = typename std::enable_if<!std::is_convertible<
+ T, const ::$proto_ns$::Message&>::value>::type>
+ bool UnpackTo(T* message) const {
+ return $any_metadata$.UnpackTo<T>(message);
+ }
+ )cc");
+ } else {
+ p->Emit(
+ R"cc(
+ template <typename T>
+ bool PackFrom(const T& message) {
+ return $any_metadata$.PackFrom(GetArena(), message);
+ }
+ template <typename T>
+ bool PackFrom(const T& message,
+ ::absl::string_view type_url_prefix) {
+ return $any_metadata$.PackFrom(GetArena(), message, type_url_prefix);
+ }
+ template <typename T>
+ bool UnpackTo(T* message) const {
+ return $any_metadata$.UnpackTo(message);
+ }
+ )cc");
+ }
+ }}},
+ R"cc(
+ // implements Any
+ // -----------------------------------------------
+
+ $any_methods$;
+
+ template <typename T>
+ bool Is() const {
+ return $any_metadata$.Is<T>();
+ }
+ static bool ParseAnyTypeUrl(::absl::string_view type_url,
+ std::string* full_type_name);
+ )cc");
+}
+
void MessageGenerator::GenerateClassDefinition(io::Printer* p) {
if (!ShouldGenerateClass(descriptor_, options_)) return;
@@ -1163,716 +1599,465 @@
Formatter format(p);
if (IsMapEntryMessage(descriptor_)) {
- absl::flat_hash_map<absl::string_view, std::string> vars;
- CollectMapInfo(options_, descriptor_, &vars);
- vars["lite"] =
- HasDescriptorMethods(descriptor_->file(), options_) ? "" : "Lite";
- auto v = p->WithVars(std::move(vars));
- // Templatize constexpr constructor as a workaround for a bug in gcc 12
- // (warning in gcc 13).
- p->Emit(R"cc(
- class $classname$ final
- : public ::$proto_ns$::internal::MapEntry$lite$<
- $classname$, $key_cpp$, $val_cpp$,
- ::$proto_ns$::internal::WireFormatLite::$key_wire_type$,
- ::$proto_ns$::internal::WireFormatLite::$val_wire_type$> {
- public:
- using SuperType = ::$proto_ns$::internal::MapEntry$lite$<
- $classname$, $key_cpp$, $val_cpp$,
- ::$proto_ns$::internal::WireFormatLite::$key_wire_type$,
- ::$proto_ns$::internal::WireFormatLite::$val_wire_type$>;
- $classname$();
- template <typename = void>
- explicit PROTOBUF_CONSTEXPR $classname$(
- ::$proto_ns$::internal::ConstantInitialized);
- explicit $classname$(::$proto_ns$::Arena* arena);
- static const $classname$* internal_default_instance() {
- return reinterpret_cast<const $classname$*>(
- &_$classname$_default_instance_);
- }
- )cc");
- auto utf8_check = internal::cpp::GetUtf8CheckMode(
- descriptor_->field(0), GetOptimizeFor(descriptor_->file(), options_) ==
- FileOptions::LITE_RUNTIME);
- if (descriptor_->field(0)->type() == FieldDescriptor::TYPE_STRING &&
- utf8_check != Utf8CheckMode::kNone) {
- if (utf8_check == Utf8CheckMode::kStrict) {
- format(
- " static bool ValidateKey(std::string* s) {\n"
- " return ::$proto_ns$::internal::WireFormatLite::"
- "VerifyUtf8String(s->data(), static_cast<int>(s->size()), "
- "::$proto_ns$::internal::WireFormatLite::PARSE, \"$1$\");\n"
- " }\n",
- descriptor_->field(0)->full_name());
- } else {
- ABSL_CHECK(utf8_check == Utf8CheckMode::kVerify);
- format(
- " static bool ValidateKey(std::string* s) {\n"
- "#ifndef NDEBUG\n"
- " ::$proto_ns$::internal::WireFormatLite::VerifyUtf8String(\n"
- " s->data(), static_cast<int>(s->size()), "
- "::$proto_ns$::internal::"
- "WireFormatLite::PARSE, \"$1$\");\n"
- "#else\n"
- " (void) s;\n"
- "#endif\n"
- " return true;\n"
- " }\n",
- descriptor_->field(0)->full_name());
- }
- } else {
- format(" static bool ValidateKey(void*) { return true; }\n");
- }
- if (descriptor_->field(1)->type() == FieldDescriptor::TYPE_STRING &&
- utf8_check != Utf8CheckMode::kNone) {
- if (utf8_check == Utf8CheckMode::kStrict) {
- format(
- " static bool ValidateValue(std::string* s) {\n"
- " return ::$proto_ns$::internal::WireFormatLite::"
- "VerifyUtf8String(s->data(), static_cast<int>(s->size()), "
- "::$proto_ns$::internal::WireFormatLite::PARSE, \"$1$\");\n"
- " }\n",
- descriptor_->field(1)->full_name());
- } else {
- ABSL_CHECK(utf8_check == Utf8CheckMode::kVerify);
- format(
- " static bool ValidateValue(std::string* s) {\n"
- "#ifndef NDEBUG\n"
- " ::$proto_ns$::internal::WireFormatLite::VerifyUtf8String(\n"
- " s->data(), static_cast<int>(s->size()), "
- "::$proto_ns$::internal::"
- "WireFormatLite::PARSE, \"$1$\");\n"
- "#else\n"
- " (void) s;\n"
- "#endif\n"
- " return true;\n"
- " }\n",
- descriptor_->field(1)->full_name());
- }
- } else {
- format(" static bool ValidateValue(void*) { return true; }\n");
- }
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- format(
- " ::$proto_ns$::Metadata GetMetadata() const final;\n");
- }
- format(
- " friend struct ::$tablename$;\n"
- "};\n");
+ GenerateMapEntryClassDefinition(p);
return;
}
- format(
- "class $dllexport_decl $${1$$classname$$}$ final :\n"
- " public $superclass$ /* @@protoc_insertion_point("
- "class_definition:$full_name$) */ {\n",
- descriptor_);
- format(" public:\n");
- format.Indent();
+ auto annotation = p->WithAnnotations({{"classname", descriptor_}});
+ p->Emit(
+ {{"decl_dtor",
+ [&] {
+ if (HasSimpleBaseClass(descriptor_, options_)) return;
- format("inline $classname$() : $classname$(nullptr) {}\n");
- if (!HasSimpleBaseClass(descriptor_, options_)) {
- format("~$classname$() override;\n");
- }
- format(
- // Templatize constexpr constructor as a workaround for a bug in gcc 12
- // (warning in gcc 13).
- "template<typename = void>\n"
- "explicit PROTOBUF_CONSTEXPR "
- "$classname$(::$proto_ns$::internal::ConstantInitialized);\n"
- "\n"
- "inline $classname$(const $classname$& from)\n"
- " : $classname$(nullptr, from) {}\n"
- "$classname$($classname$&& from) noexcept\n"
- " : $classname$() {\n"
- " *this = ::std::move(from);\n"
- "}\n"
- "\n"
- "inline $classname$& operator=(const $classname$& from) {\n"
- " CopyFrom(from);\n"
- " return *this;\n"
- "}\n"
- "inline $classname$& operator=($classname$&& from) noexcept {\n"
- " if (this == &from) return *this;\n"
- " if (GetArena() == from.GetArena()\n"
- "#ifdef PROTOBUF_FORCE_COPY_IN_MOVE\n"
- " && GetArena() != nullptr\n"
- "#endif // !PROTOBUF_FORCE_COPY_IN_MOVE\n"
- " ) {\n"
- " InternalSwap(&from);\n"
- " } else {\n"
- " CopyFrom(from);\n"
- " }\n"
- " return *this;\n"
- "}\n"
- "\n");
-
- p->Emit(R"cc(
- inline const $unknown_fields_type$& unknown_fields() const
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
- $annotate_unknown_fields$;
- return $unknown_fields$;
- }
- inline $unknown_fields_type$* mutable_unknown_fields()
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
- $annotate_mutable_unknown_fields$;
- return $mutable_unknown_fields$;
- }
- )cc");
- // Adding a blank line to be consistent with the previous version.
- p->Emit("\n");
-
- // Only generate this member if it's not disabled.
- if (HasDescriptorMethods(descriptor_->file(), options_) &&
- !descriptor_->options().no_standard_descriptor_accessor()) {
- format(
- "static const ::$proto_ns$::Descriptor* descriptor() {\n"
- " return GetDescriptor();\n"
- "}\n");
- }
-
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- // These shadow non-static methods of the same names in Message. We
- // redefine them here because calls directly on the generated class can be
- // statically analyzed -- we know what descriptor types are being requested.
- // It also avoids a vtable dispatch.
- //
- // We would eventually like to eliminate the methods in Message, and having
- // this separate also lets us track calls to the base class methods
- // separately.
- format(
- "static const ::$proto_ns$::Descriptor* GetDescriptor() {\n"
- " return default_instance().GetMetadata().descriptor;\n"
- "}\n"
- "static const ::$proto_ns$::Reflection* GetReflection() {\n"
- " return default_instance().GetMetadata().reflection;\n"
- "}\n");
- }
-
- format(
- "static const $classname$& default_instance() {\n"
- " return *internal_default_instance();\n"
- "}\n");
-
- // Generate enum values for every field in oneofs. One list is generated for
- // each oneof with an additional *_NOT_SET value.
- for (auto oneof : OneOfRange(descriptor_)) {
- format("enum $1$Case {\n", UnderscoresToCamelCase(oneof->name(), true));
- format.Indent();
- for (auto field : FieldRange(oneof)) {
- format("$1$ = $2$,\n", OneofCaseConstantName(field), // 1
- field->number()); // 2
- }
- format("$1$_NOT_SET = 0,\n", absl::AsciiStrToUpper(oneof->name()));
- format.Outdent();
- format(
- "};\n"
- "\n");
- }
-
- // TODO make this private, while still granting other protos access.
- format(
- "static inline const $classname$* internal_default_instance() {\n"
- " return reinterpret_cast<const $classname$*>(\n"
- " &_$classname$_default_instance_);\n"
- "}\n"
- "static constexpr int kIndexInFileMessages =\n"
- " $1$;\n"
- "\n",
- index_in_file_messages_);
-
- if (IsAnyMessage(descriptor_)) {
- format(
- "// implements Any -----------------------------------------------\n"
- "\n");
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- format(
- "bool PackFrom(const ::$proto_ns$::Message& message) {\n"
- " $DCHK$_NE(&message, this);\n"
- " return $any_metadata$.PackFrom(GetArena(), message);\n"
- "}\n"
- "bool PackFrom(const ::$proto_ns$::Message& message,\n"
- " ::absl::string_view type_url_prefix) {\n"
- " $DCHK$_NE(&message, this);\n"
- " return $any_metadata$.PackFrom(GetArena(), message, "
- "type_url_prefix);\n"
- "}\n"
- "bool UnpackTo(::$proto_ns$::Message* message) const {\n"
- " return $any_metadata$.UnpackTo(message);\n"
- "}\n"
- "static bool GetAnyFieldDescriptors(\n"
- " const ::$proto_ns$::Message& message,\n"
- " const ::$proto_ns$::FieldDescriptor** type_url_field,\n"
- " const ::$proto_ns$::FieldDescriptor** value_field);\n"
- "template <typename T, class = typename std::enable_if<"
- "!std::is_convertible<T, const ::$proto_ns$::Message&>"
- "::value>::type>\n"
- "bool PackFrom(const T& message) {\n"
- " return $any_metadata$.PackFrom<T>(GetArena(), message);\n"
- "}\n"
- "template <typename T, class = typename std::enable_if<"
- "!std::is_convertible<T, const ::$proto_ns$::Message&>"
- "::value>::type>\n"
- "bool PackFrom(const T& message,\n"
- " ::absl::string_view type_url_prefix) {\n"
- " return $any_metadata$.PackFrom<T>(GetArena(), message, "
- "type_url_prefix);"
- "}\n"
- "template <typename T, class = typename std::enable_if<"
- "!std::is_convertible<T, const ::$proto_ns$::Message&>"
- "::value>::type>\n"
- "bool UnpackTo(T* message) const {\n"
- " return $any_metadata$.UnpackTo<T>(message);\n"
- "}\n");
- } else {
- format(
- "template <typename T>\n"
- "bool PackFrom(const T& message) {\n"
- " return $any_metadata$.PackFrom(GetArena(), message);\n"
- "}\n"
- "template <typename T>\n"
- "bool PackFrom(const T& message,\n"
- " ::absl::string_view type_url_prefix) {\n"
- " return $any_metadata$.PackFrom(GetArena(), message, "
- "type_url_prefix);\n"
- "}\n"
- "template <typename T>\n"
- "bool UnpackTo(T* message) const {\n"
- " return $any_metadata$.UnpackTo(message);\n"
- "}\n");
- }
- format(
- "template<typename T> bool Is() const {\n"
- " return $any_metadata$.Is<T>();\n"
- "}\n"
- "static bool ParseAnyTypeUrl(::absl::string_view type_url,\n"
- " std::string* full_type_name);\n");
- }
-
- format(
- "friend void swap($classname$& a, $classname$& b) {\n"
- " a.Swap(&b);\n"
- "}\n"
- "inline void Swap($classname$* other) {\n"
- " if (other == this) return;\n"
- "#ifdef PROTOBUF_FORCE_COPY_IN_SWAP\n"
- " if (GetArena() != nullptr &&\n"
- " GetArena() == other->GetArena()) {\n "
- "#else // PROTOBUF_FORCE_COPY_IN_SWAP\n"
- " if (GetArena() == other->GetArena()) {\n"
- "#endif // !PROTOBUF_FORCE_COPY_IN_SWAP\n"
- " InternalSwap(other);\n"
- " } else {\n"
- " $pbi$::GenericSwap(this, other);\n"
- " }\n"
- "}\n"
- "void UnsafeArenaSwap($classname$* other) {\n"
- " if (other == this) return;\n"
- " $DCHK$(GetArena() == other->GetArena());\n"
- " InternalSwap(other);\n"
- "}\n");
-
- format(
- "\n"
- "// implements Message ----------------------------------------------\n"
- "\n"
- "$classname$* New(::$proto_ns$::Arena* arena = nullptr) const final {\n"
- " return $superclass$::DefaultConstruct<$classname$>(arena);\n"
- "}\n");
-
- // For instances that derive from Message (rather than MessageLite), some
- // methods are virtual and should be marked as final.
- auto v2 = p->WithVars(
- {{"full_final",
- HasDescriptorMethods(descriptor_->file(), options_) ? "final" : ""}});
-
- if (HasGeneratedMethods(descriptor_->file(), options_)) {
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- if (!HasSimpleBaseClass(descriptor_, options_)) {
- format(
- // Use Message's built-in MergeFrom and CopyFrom when the passed-in
- // argument is a generic Message instance, and only define the
- // custom MergeFrom and CopyFrom instances when the source of the
- // merge/copy is known to be the same class as the destination.
- "using $superclass$::CopyFrom;\n"
- "void CopyFrom(const $classname$& from);\n"
- ""
- "using $superclass$::MergeFrom;\n"
- "void MergeFrom("
- " const $classname$& from) {\n"
- " $classname$::MergeImpl(*this, from);\n"
- "}\n"
- "private:\n"
- "static void MergeImpl(::$proto_ns$::Message& to_msg, const "
- "::$proto_ns$::Message& from_msg);\n"
- "public:\n");
- } else {
- format(
- "using $superclass$::CopyFrom;\n"
- "inline void CopyFrom(const $classname$& from) {\n"
- " $superclass$::CopyImpl(*this, from);\n"
- "}\n"
- ""
- "using $superclass$::MergeFrom;\n"
- "void MergeFrom(const $classname$& from) {\n"
- " $superclass$::MergeImpl(*this, from);\n"
- "}\n"
- "public:\n");
- }
- } else {
- format(
- "void CheckTypeAndMergeFrom(const ::$proto_ns$::MessageLite& from)"
- " final;\n"
- "void CopyFrom(const $classname$& from);\n"
- "void MergeFrom(const $classname$& from);\n");
- }
-
- if (!HasSimpleBaseClass(descriptor_, options_)) {
- format(
- "ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;\n"
- "bool IsInitialized() const final;\n"
- "\n"
- "::size_t ByteSizeLong() const final;\n");
-
- parse_function_generator_->GenerateMethodDecls(p);
-
- format(
- "$uint8$* _InternalSerialize(\n"
- " $uint8$* target, ::$proto_ns$::io::EpsCopyOutputStream* stream) "
- "const final;\n");
- }
- }
-
- if (options_.field_listener_options.inject_field_listener_events) {
- format("static constexpr int _kInternalFieldNumber = $1$;\n",
- descriptor_->field_count());
- }
-
- if (!HasSimpleBaseClass(descriptor_, options_)) {
- p->Emit(
- R"cc(
- int GetCachedSize() const { return $cached_size$.Get(); }
-
- private:
- void SharedCtor(::$proto_ns$::Arena* arena);
- void SharedDtor();
- void InternalSwap($classname$* other);
- )cc");
- }
-
- format(
- // Friend AnyMetadata so that it can call this FullMessageName() method.
- "\nprivate:\n"
- "friend class ::$proto_ns$::internal::AnyMetadata;\n"
- "static ::absl::string_view FullMessageName() {\n"
- " return \"$full_name$\";\n"
- "}\n");
-
- format(
- // TODO Make this private! Currently people are deriving from
- // protos to give access to this constructor, breaking the invariants
- // we rely on.
- "protected:\n"
- "explicit $classname$(::$proto_ns$::Arena* arena);\n"
- "$classname$(::$proto_ns$::Arena* arena, const $classname$& from);\n"
- );
-
- switch (NeedsArenaDestructor()) {
- case ArenaDtorNeeds::kOnDemand:
- p->Emit(R"cc(
- private:
- static void ArenaDtor(void* object);
- static void OnDemandRegisterArenaDtor(MessageLite& msg,
- ::$proto_ns$::Arena& arena) {
- auto& this_ = static_cast<$classname$&>(msg);
- if ((this_.$inlined_string_donated_array$[0] & 0x1u) == 0) {
+ p->Emit(R"cc(
+ ~$classname$() override;
+ )cc");
+ }},
+ {"decl_annotate",
+ [&] {
+ }},
+ {"decl_verify_func",
+ [&] {
+ }},
+ {"descriptor_accessor",
+ [&] {
+ // Only generate this member if it's not disabled.
+ if (!HasDescriptorMethods(descriptor_->file(), options_) ||
+ descriptor_->options().no_standard_descriptor_accessor()) {
return;
}
- this_.$inlined_string_donated_array$[0] &= 0xFFFFFFFEu;
- arena.OwnCustomDestructor(&this_, &$classname$::ArenaDtor);
- }
- )cc");
- break;
- case ArenaDtorNeeds::kRequired:
- format(
- "private:\n"
- "static void ArenaDtor(void* object);\n");
- break;
- case ArenaDtorNeeds::kNone:
- break;
- }
- if (!HasSimpleBaseClass(descriptor_, options_)) {
- p->Emit(R"cc(
- const ::$proto_ns$::MessageLite::ClassData* GetClassData() const final;
- )cc");
- }
-
- format(
- "public:\n"
- "\n");
-
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- format(
- "::$proto_ns$::Metadata GetMetadata() const final;\n"
- "\n");
- }
-
- if (ShouldSplit(descriptor_, options_)) {
- format(
- "private:\n"
- "inline bool IsSplitMessageDefault() const {\n"
- " return $split$ == reinterpret_cast<const Impl_::Split*>(&$1$);\n"
- "}\n"
- "PROTOBUF_NOINLINE void PrepareSplitMessageForWrite();\n"
- "public:\n",
- DefaultInstanceName(descriptor_, options_, /*split=*/true));
- }
-
- format(
- "// nested types ----------------------------------------------------\n"
- "\n");
-
- // Import all nested message classes into this class's scope with typedefs.
- for (int i = 0; i < descriptor_->nested_type_count(); i++) {
- const Descriptor* nested_type = descriptor_->nested_type(i);
- if (!IsMapEntryMessage(nested_type)) {
- p->Emit(
- {
- Sub{"nested_full_name", ClassName(nested_type, false)}
- .AnnotatedAs(nested_type),
- Sub{"nested_name", ResolveKeyword(nested_type->name())}
- .AnnotatedAs(nested_type),
- },
- R"cc(
- using $nested_name$ = $nested_full_name$;
+ p->Emit(R"cc(
+ static const ::$proto_ns$::Descriptor* descriptor() {
+ return GetDescriptor();
+ }
)cc");
- }
- }
+ }},
+ {"get_descriptor",
+ [&] {
+ // These shadow non-static methods of the same names in Message.
+ // We redefine them here because calls directly on the generated
+ // class can be statically analyzed -- we know what descriptor
+ // types are being requested. It also avoids a vtable dispatch.
+ //
+ // We would eventually like to eliminate the methods in Message,
+ // and having this separate also lets us track calls to the base
+ // class methods separately.
+ if (!HasDescriptorMethods(descriptor_->file(), options_)) return;
- if (descriptor_->nested_type_count() > 0) {
- format("\n");
- }
+ p->Emit(R"cc(
+ static const ::$proto_ns$::Descriptor* GetDescriptor() {
+ return default_instance().GetMetadata().descriptor;
+ }
+ static const ::$proto_ns$::Reflection* GetReflection() {
+ return default_instance().GetMetadata().reflection;
+ }
+ )cc");
+ }},
+ {"decl_oneof",
+ [&] {
+ // Generate enum values for every field in oneofs. One list is
+ // generated for each oneof with an additional *_NOT_SET value.
+ for (auto oneof : OneOfRange(descriptor_)) {
+ p->Emit(
+ {{"oneof_camel_name",
+ UnderscoresToCamelCase(oneof->name(), true)},
+ {"oneof_field",
+ [&] {
+ for (auto field : FieldRange(oneof)) {
+ p->Emit(
+ {
+ {"oneof_constant", OneofCaseConstantName(field)},
+ {"field_number", field->number()},
+ },
+ R"cc(
+ $oneof_constant$ = $field_number$,
+ )cc");
+ }
+ }},
+ {"upper_oneof_name", absl::AsciiStrToUpper(oneof->name())}},
+ R"cc(
+ enum $oneof_camel_name$Case {
+ $oneof_field$,
+ $upper_oneof_name$_NOT_SET = 0,
+ };
+ )cc");
+ }
+ }},
+ {"index_in_file_messages", index_in_file_messages_},
+ {"decl_any_methods",
+ [&] {
+ if (!IsAnyMessage(descriptor_)) return;
- // Import all nested enums and their values into this class's scope with
- // typedefs and constants.
- for (int i = 0; i < descriptor_->enum_type_count(); i++) {
- enum_generators_[i]->GenerateSymbolImports(p);
- format("\n");
- }
+ GenerateAnyMethodDefinition(p);
+ }},
+ {"generated_methods",
+ [&] {
+ if (!HasGeneratedMethods(descriptor_->file(), options_)) return;
- format(
- "// accessors -------------------------------------------------------\n"
- "\n");
+ if (HasDescriptorMethods(descriptor_->file(), options_)) {
+ if (!HasSimpleBaseClass(descriptor_, options_)) {
+ // Use Message's built-in MergeFrom and CopyFrom when the
+ // passed-in argument is a generic Message instance, and
+ // only define the custom MergeFrom and CopyFrom
+ // instances when the source of the merge/copy is known
+ // to be the same class as the destination.
+ p->Emit(R"cc(
+ using $superclass$::CopyFrom;
+ void CopyFrom(const $classname$& from);
+ using $superclass$::MergeFrom;
+ void MergeFrom(const $classname$& from) { $classname$::MergeImpl(*this, from); }
- // Generate accessor methods for all fields.
- GenerateFieldAccessorDeclarations(p);
+ private:
+ static void MergeImpl(
+ ::$proto_ns$::MessageLite& to_msg,
+ const ::$proto_ns$::MessageLite& from_msg);
- // Declare extension identifiers.
- for (int i = 0; i < descriptor_->extension_count(); i++) {
- extension_generators_[i]->GenerateDeclaration(p);
- }
+ public:
+ )cc");
+ } else {
+ p->Emit(R"cc(
+ using $superclass$::CopyFrom;
+ inline void CopyFrom(const $classname$& from) {
+ $superclass$::CopyImpl(*this, from);
+ }
+ using $superclass$::MergeFrom;
+ void MergeFrom(const $classname$& from) {
+ $superclass$::MergeImpl(*this, from);
+ }
+ public:
+ )cc");
+ }
+ } else {
+ p->Emit(R"cc(
+ void CheckTypeAndMergeFrom(
+ const ::$proto_ns$::MessageLite& from) final;
+ void CopyFrom(const $classname$& from);
+ void MergeFrom(const $classname$& from);
+ )cc");
+ }
- format("// @@protoc_insertion_point(class_scope:$full_name$)\n");
+ if (!HasSimpleBaseClass(descriptor_, options_)) {
+ p->Emit(R"cc(
+ ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
+ bool IsInitialized() const final;
- // Generate private members.
- format.Outdent();
- format(" private:\n");
- format.Indent();
- // TODO: Remove hack to track field access and remove this class.
- format("class _Internal;\n");
+ ::size_t ByteSizeLong() const final;
+ )cc");
- for (auto field : FieldRange(descriptor_)) {
- // set_has_***() generated in all oneofs.
- if (!field->is_repeated() && !field->options().weak() &&
- field->real_containing_oneof()) {
- format("void set_has_$1$();\n", FieldName(field));
- }
- }
- format("\n");
+ parse_function_generator_->GenerateMethodDecls(p);
- // Generate oneof function declarations
- for (auto oneof : OneOfRange(descriptor_)) {
- format(
- "inline bool has_$1$() const;\n"
- "inline void clear_has_$1$();\n\n",
- oneof->name());
- }
+ p->Emit(R"cc(
+ $uint8$* _InternalSerialize(
+ $uint8$* target,
+ ::$proto_ns$::io::EpsCopyOutputStream* stream) const final;
+ )cc");
+ }
+ }},
+ {"internal_field_number",
+ [&] {
+ if (!options_.field_listener_options.inject_field_listener_events)
+ return;
- if (HasGeneratedMethods(descriptor_->file(), options_)) {
- parse_function_generator_->GenerateDataDecls(p);
- }
+ p->Emit({{"field_count", descriptor_->field_count()}}, R"cc(
+ static constexpr int _kInternalFieldNumber = $field_count$;
+ )cc");
+ }},
+ {"decl_non_simple_base",
+ [&] {
+ if (HasSimpleBaseClass(descriptor_, options_)) return;
+ p->Emit(
+ R"cc(
+ int GetCachedSize() const { return $cached_size$.Get(); }
- // Prepare decls for _cached_size_ and _has_bits_. Their position in the
- // output will be determined later.
+ private:
+ void SharedCtor(::$proto_ns$::Arena* arena);
+ void SharedDtor();
+ void InternalSwap($classname$* other);
+ )cc");
+ }},
+ {"arena_dtor",
+ [&] {
+ switch (NeedsArenaDestructor()) {
+ case ArenaDtorNeeds::kOnDemand:
+ p->Emit(R"cc(
+ private:
+ static void ArenaDtor(void* object);
+ static void OnDemandRegisterArenaDtor(
+ MessageLite& msg, ::$proto_ns$::Arena& arena) {
+ auto& this_ = static_cast<$classname$&>(msg);
+ if ((this_.$inlined_string_donated_array$[0] & 0x1u) == 0) {
+ return;
+ }
+ this_.$inlined_string_donated_array$[0] &= 0xFFFFFFFEu;
+ arena.OwnCustomDestructor(&this_, &$classname$::ArenaDtor);
+ }
+ )cc");
+ break;
+ case ArenaDtorNeeds::kRequired:
+ p->Emit(R"cc(
+ private:
+ static void ArenaDtor(void* object);
+ )cc");
+ break;
+ case ArenaDtorNeeds::kNone:
+ break;
+ }
+ }},
+ {"get_class_data",
+ [&] {
+ if (HasSimpleBaseClass(descriptor_, options_)) return;
- bool need_to_emit_cached_size = !HasSimpleBaseClass(descriptor_, options_);
- const std::string cached_size_decl =
- "mutable ::$proto_ns$::internal::CachedSize _cached_size_;\n";
+ p->Emit(R"cc(
+ const ::$proto_ns$::MessageLite::ClassData* GetClassData()
+ const final;
+ )cc");
+ }},
+ {"get_metadata",
+ [&] {
+ if (!HasDescriptorMethods(descriptor_->file(), options_)) return;
- const size_t sizeof_has_bits = HasBitsSize();
- const std::string has_bits_decl =
- sizeof_has_bits == 0 ? ""
- : absl::StrCat("::$proto_ns$::internal::HasBits<",
- sizeof_has_bits, "> _has_bits_;\n");
+ p->Emit(R"cc(
+ ::$proto_ns$::Metadata GetMetadata() const final;
+ )cc");
+ }},
+ {"decl_split_methods",
+ [&] {
+ if (!ShouldSplit(descriptor_, options_)) return;
+ p->Emit({{"default_name", DefaultInstanceName(descriptor_, options_,
+ /*split=*/true)}},
+ R"cc(
+ private:
+ inline bool IsSplitMessageDefault() const {
+ return $split$ == reinterpret_cast<const Impl_::Split*>(&$default_name$);
+ }
+ PROTOBUF_NOINLINE void PrepareSplitMessageForWrite();
- p->Emit(R"cc(
- friend class ::$proto_ns$::MessageLite;
- friend class ::$proto_ns$::Arena;
- template <typename T>
- friend class ::$proto_ns$::Arena::InternalHelper;
- using InternalArenaConstructable_ = void;
- using DestructorSkippable_ = void;
- )cc");
+ public:
+ )cc");
+ }},
+ {"nested_types",
+ [&] {
+ // Import all nested message classes into this class's scope with
+ // typedefs.
+ for (int i = 0; i < descriptor_->nested_type_count(); i++) {
+ const Descriptor* nested_type = descriptor_->nested_type(i);
+ if (!IsMapEntryMessage(nested_type)) {
+ p->Emit(
+ {
+ Sub{"nested_full_name", ClassName(nested_type, false)}
+ .AnnotatedAs(nested_type),
+ Sub{"nested_name", ResolveKeyword(nested_type->name())}
+ .AnnotatedAs(nested_type),
+ },
+ R"cc(
+ using $nested_name$ = $nested_full_name$;
+ )cc");
+ }
+ }
+ }},
+ {"nested_enums",
+ [&] {
+ // Import all nested enums and their values into this class's
+ // scope with typedefs and constants.
+ for (int i = 0; i < descriptor_->enum_type_count(); i++) {
+ enum_generators_[i]->GenerateSymbolImports(p);
+ }
+ }},
+ {"decl_field_accessors",
+ [&] {
+ // Generate accessor methods for all fields.
+ GenerateFieldAccessorDeclarations(p);
+ }},
+ {"decl_extension_ids",
+ [&] {
+ // Declare extension identifiers.
+ for (int i = 0; i < descriptor_->extension_count(); i++) {
+ extension_generators_[i]->GenerateDeclaration(p);
+ }
+ }},
+ {"proto2_message_sets",
+ [&] {
+ }},
+ {"decl_set_has",
+ [&] {
+ for (auto field : FieldRange(descriptor_)) {
+ // set_has_***() generated in all oneofs.
+ if (!field->is_repeated() && !field->options().weak() &&
+ field->real_containing_oneof()) {
+ p->Emit({{"field_name", FieldName(field)}}, R"cc(
+ void set_has_$field_name$();
+ )cc");
+ }
+ }
+ }},
+ {"decl_oneof_has",
+ [&] {
+ // Generate oneof function declarations
+ for (auto oneof : OneOfRange(descriptor_)) {
+ p->Emit({{"oneof_name", oneof->name()}}, R"cc(
+ inline bool has_$oneof_name$() const;
+ inline void clear_has_$oneof_name$();
+ )cc");
+ }
+ }},
+ {"decl_data",
+ [&] {
+ if (HasGeneratedMethods(descriptor_->file(), options_)) {
+ parse_function_generator_->GenerateDataDecls(p);
+ }
+ }},
+ {"decl_impl", [&] { GenerateImplDefinition(p); }},
+ {"split_friend",
+ [&] {
+ if (!ShouldSplit(descriptor_, options_)) return;
- // To minimize padding, data members are divided into three sections:
- // (1) members assumed to align to 8 bytes
- // (2) members corresponding to message fields, re-ordered to optimize
- // alignment.
- // (3) members assumed to align to 4 bytes.
+ p->Emit({{"split_default", DefaultInstanceType(descriptor_, options_,
+ /*split=*/true)}},
+ R"cc(
+ friend struct $split_default$;
+ )cc");
+ }}},
+ R"cc(
+ class $dllexport_decl $$classname$ final : public $superclass$
+ /* @@protoc_insertion_point(class_definition:$full_name$) */ {
+ public:
+ inline $classname$() : $classname$(nullptr) {}
+ $decl_dtor$;
+ //~ Templatize constexpr constructor as a workaround for a bug in
+ //~ gcc 12 (warning in gcc 13).
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR $classname$(
+ ::$proto_ns$::internal::ConstantInitialized);
- format("struct $dllexport_decl $Impl_ {\n");
- format.Indent();
+ inline $classname$(const $classname$& from) : $classname$(nullptr, from) {}
+ inline $classname$($classname$&& from) noexcept
+ : $classname$(nullptr, std::move(from)) {}
+ inline $classname$& operator=(const $classname$& from) {
+ CopyFrom(from);
+ return *this;
+ }
+ inline $classname$& operator=($classname$&& from) noexcept {
+ if (this == &from) return *this;
+ if (GetArena() == from.GetArena()
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+ && GetArena() != nullptr
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+ ) {
+ InternalSwap(&from);
+ } else {
+ CopyFrom(from);
+ }
+ return *this;
+ }
+ $decl_annotate$;
+ $decl_verify_func$;
- // TODO: check if/when there is a need for an outline dtor.
- format(R"cc(
- inline explicit constexpr Impl_(
- ::$proto_ns$::internal::ConstantInitialized) noexcept;
- inline explicit Impl_($pbi$::InternalVisibility visibility,
- ::$proto_ns$::Arena* arena);
- inline explicit Impl_($pbi$::InternalVisibility visibility,
- ::$proto_ns$::Arena* arena, const Impl_& from);
- )cc");
+ inline const $unknown_fields_type$& unknown_fields() const
+ ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ $annotate_unknown_fields$;
+ return $unknown_fields$;
+ }
+ inline $unknown_fields_type$* mutable_unknown_fields()
+ ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ $annotate_mutable_unknown_fields$;
+ return $mutable_unknown_fields$;
+ }
- // Members assumed to align to 8 bytes:
+ $descriptor_accessor$;
+ $get_descriptor$;
+ static const $classname$& default_instance() {
+ return *internal_default_instance();
+ }
+ $decl_oneof$;
+ //~ TODO make this private, while still granting other
+ //~ protos access.
+ static inline const $classname$* internal_default_instance() {
+ return reinterpret_cast<const $classname$*>(
+ &_$classname$_default_instance_);
+ }
+ static constexpr int kIndexInFileMessages = $index_in_file_messages$;
+ $decl_any_methods$;
+ friend void swap($classname$& a, $classname$& b) { a.Swap(&b); }
+ inline void Swap($classname$* other) {
+ if (other == this) return;
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() == other->GetArena()) {
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+ InternalSwap(other);
+ } else {
+ $pbi$::GenericSwap(this, other);
+ }
+ }
+ void UnsafeArenaSwap($classname$* other) {
+ if (other == this) return;
+ $DCHK$(GetArena() == other->GetArena());
+ InternalSwap(other);
+ }
- if (descriptor_->extension_range_count() > 0) {
- format(
- "::$proto_ns$::internal::ExtensionSet _extensions_;\n"
- "\n");
- }
+ // implements Message ----------------------------------------------
- if (HasTracker(descriptor_, options_)) {
- format("static ::$proto_ns$::AccessListener<$1$> _tracker_;\n",
- ClassName(descriptor_));
- }
+ $classname$* New(::$proto_ns$::Arena* arena = nullptr) const final {
+ return $superclass$::DefaultConstruct<$classname$>(arena);
+ }
+ $generated_methods$;
+ $internal_field_number$;
+ $decl_non_simple_base$;
+ //~ Friend AnyMetadata so that it can call this FullMessageName()
+ //~ method.
+ private:
+ friend class ::$proto_ns$::internal::AnyMetadata;
+ static ::absl::string_view FullMessageName() { return "$full_name$"; }
- // Generate _inlined_string_donated_ for inlined string type.
- // TODO: To avoid affecting the locality of `_has_bits_`, should this
- // be below or above `_has_bits_`?
- if (!inlined_string_indices_.empty()) {
- format("::$proto_ns$::internal::HasBits<$1$> _inlined_string_donated_;\n",
- InlinedStringDonatedSize());
- }
+ //~ TODO Make this private! Currently people are
+ //~ deriving from protos to give access to this constructor,
+ //~ breaking the invariants we rely on.
+ protected:
+ explicit $classname$(::$proto_ns$::Arena* arena);
+ $classname$(::$proto_ns$::Arena* arena, const $classname$& from);
+ $classname$(::$proto_ns$::Arena* arena, $classname$&& from) noexcept
+ : $classname$(arena) {
+ *this = ::std::move(from);
+ }
+ $arena_dtor$;
+ $get_class_data$;
- if (!has_bit_indices_.empty()) {
- // _has_bits_ is frequently accessed, so to reduce code size and improve
- // speed, it should be close to the start of the object. Placing
- // _cached_size_ together with _has_bits_ improves cache locality despite
- // potential alignment padding.
- format(has_bits_decl.c_str());
- if (need_to_emit_cached_size) {
- format(cached_size_decl.c_str());
- need_to_emit_cached_size = false;
- }
- }
+ public:
+ $get_metadata$;
+ $decl_split_methods$;
+ // nested types ----------------------------------------------------
+ $nested_types$;
+ $nested_enums$;
- // Field members:
-
- // Emit some private and static members
- for (auto field : optimized_order_) {
- field_generators_.get(field).GenerateStaticMembers(p);
- if (!ShouldSplit(field, options_)) {
- field_generators_.get(field).GeneratePrivateMembers(p);
- }
- }
- if (ShouldSplit(descriptor_, options_)) {
- format("struct Split {\n");
- format.Indent();
- for (auto field : optimized_order_) {
- if (!ShouldSplit(field, options_)) continue;
- field_generators_.get(field).GeneratePrivateMembers(p);
- }
- format.Outdent();
- p->Emit(R"cc(
- using InternalArenaConstructable_ = void;
- using DestructorSkippable_ = void;
- )cc");
- format(
- "};\n"
- "static_assert(std::is_trivially_copy_constructible<Split>::value);\n"
- "static_assert(std::is_trivially_destructible<Split>::value);\n"
- "Split* _split_;\n");
- }
-
- // For each oneof generate a union
- for (auto oneof : OneOfRange(descriptor_)) {
- std::string camel_oneof_name = UnderscoresToCamelCase(oneof->name(), true);
- format("union $1$Union {\n", camel_oneof_name);
- format.Indent();
- format(
- // explicit empty constructor is needed when union contains
- // ArenaStringPtr members for string fields.
- "constexpr $1$Union() : _constinit_{} {}\n"
- " ::$proto_ns$::internal::ConstantInitialized _constinit_;\n",
- camel_oneof_name);
- for (auto field : FieldRange(oneof)) {
- field_generators_.get(field).GeneratePrivateMembers(p);
- }
- format.Outdent();
- format("} $1$_;\n", oneof->name());
- for (auto field : FieldRange(oneof)) {
- field_generators_.get(field).GenerateStaticMembers(p);
- }
- }
-
- // Members assumed to align to 4 bytes:
-
- if (need_to_emit_cached_size) {
- format(cached_size_decl.c_str());
- need_to_emit_cached_size = false;
- }
-
- // Generate _oneof_case_.
- if (descriptor_->real_oneof_decl_count() > 0) {
- format(
- "$uint32$ _oneof_case_[$1$];\n"
- "\n",
- descriptor_->real_oneof_decl_count());
- }
-
- if (num_weak_fields_) {
- format("::$proto_ns$::internal::WeakFieldMap _weak_field_map_;\n");
- }
- // Generate _any_metadata_ for the Any type.
- if (IsAnyMessage(descriptor_)) {
- format("::$proto_ns$::internal::AnyMetadata _any_metadata_;\n");
- }
-
- // For detecting when concurrent accessor calls cause races.
- format("PROTOBUF_TSAN_DECLARE_MEMBER\n");
-
- format.Outdent();
- format("};\n");
-
- // Only create the _impl_ field if it contains data.
- if (HasImplData(descriptor_, options_)) {
- format("union { Impl_ _impl_; };\n");
- }
-
- if (ShouldSplit(descriptor_, options_)) {
- format("friend struct $1$;\n",
- DefaultInstanceType(descriptor_, options_, /*split=*/true));
- }
-
- // The TableStruct struct needs access to the private parts, in order to
- // construct the offsets of all members.
- format("friend struct ::$tablename$;\n");
-
- format.Outdent();
- format("};");
- ABSL_DCHECK(!need_to_emit_cached_size);
+ // accessors -------------------------------------------------------
+ $decl_field_accessors$;
+ $decl_extension_ids$;
+ $proto2_message_sets$;
+ // @@protoc_insertion_point(class_scope:$full_name$)
+ //~ Generate private members.
+ private:
+ //~ TODO: Remove hack to track field access and remove
+ //~ this class.
+ class _Internal;
+ $decl_set_has$;
+ $decl_oneof_has$;
+ $decl_data$;
+ friend class ::$proto_ns$::MessageLite;
+ friend class ::$proto_ns$::Arena;
+ template <typename T>
+ friend class ::$proto_ns$::Arena::InternalHelper;
+ using InternalArenaConstructable_ = void;
+ using DestructorSkippable_ = void;
+ $decl_impl$;
+ $split_friend$;
+ //~ The TableStruct struct needs access to the private parts, in
+ //~ order to construct the offsets of all members.
+ friend struct ::$tablename$;
+ };
+ )cc");
} // NOLINT(readability/fn_size)
void MessageGenerator::GenerateInlineMethods(io::Printer* p) {
@@ -1931,30 +2116,50 @@
auto v = p->WithVars(ClassVars(descriptor_, options_));
auto t = p->WithVars(MakeTrackerCalls(descriptor_, options_));
Formatter format(p);
+
+ const auto pin_weak_writer = [&] {
+ if (!UsingImplicitWeakDescriptor(descriptor_->file(), options_)) return;
+ p->Emit({{"index", index_in_file_messages_}},
+ R"cc(
+ ::_pbi::StrongPointer(&pb_$index$_weak_);
+ )cc");
+
+ // For CODE_SIZE types, we need to pin the submessages too.
+ // SPEED types will pin them via the TcParse table automatically.
+ if (HasGeneratedMethods(descriptor_->file(), options_)) return;
+ for (int i = 0; i < descriptor_->field_count(); ++i) {
+ auto* field = descriptor_->field(i);
+ if (field->type() != field->TYPE_MESSAGE) continue;
+ p->Emit(
+ {
+ {"sub_default_name",
+ QualifiedDefaultInstanceName(field->message_type(), options_)},
+ },
+ R"cc(
+ ::_pbi::StrongPointer(&$sub_default_name$);
+ )cc");
+ }
+ };
+
if (IsMapEntryMessage(descriptor_)) {
format(
"$classname$::$classname$() {}\n"
"$classname$::$classname$(::$proto_ns$::Arena* arena)\n"
" : SuperType(arena) {}\n");
if (HasDescriptorMethods(descriptor_->file(), options_)) {
- if (!descriptor_->options().map_entry()) {
- format(
- "::$proto_ns$::Metadata $classname$::GetMetadata() const {\n"
- "$annotate_reflection$"
- " return ::_pbi::AssignDescriptors(\n"
- " &$desc_table$_getter, &$desc_table$_once,\n"
- " $file_level_metadata$[$1$]);\n"
- "}\n",
- index_in_file_messages_);
- } else {
- format(
- "::$proto_ns$::Metadata $classname$::GetMetadata() const {\n"
- " return ::_pbi::AssignDescriptors(\n"
- " &$desc_table$_getter, &$desc_table$_once,\n"
- " $file_level_metadata$[$1$]);\n"
- "}\n",
- index_in_file_messages_);
- }
+ p->Emit(
+ {
+ {"pin_weak_writer", pin_weak_writer},
+ {"index", index_in_file_messages_},
+ },
+ R"cc(
+ ::$proto_ns$::Metadata $classname$::GetMetadata() const {
+ $pin_weak_writer$;
+ return ::_pbi::AssignDescriptors(&$desc_table$_getter,
+ &$desc_table$_once,
+ $file_level_metadata$[$index$]);
+ }
+ )cc");
}
return;
}
@@ -1995,19 +2200,6 @@
"static constexpr ::int32_t kOneofCaseOffset =\n"
" PROTOBUF_FIELD_OFFSET($classtype$, $oneof_case$);\n");
}
- for (auto field : FieldRange(descriptor_)) {
- auto t = p->WithVars(MakeTrackerCalls(field, options_));
- field_generators_.get(field).GenerateInternalAccessorDeclarations(p);
- if (HasHasbit(field)) {
- int has_bit_index = HasBitIndex(field);
- ABSL_CHECK_NE(has_bit_index, kNoHasbit) << field->full_name();
- format(
- "static void set_has_$1$(HasBits* has_bits) {\n"
- " (*has_bits)[$2$] |= $3$u;\n"
- "}\n",
- FieldName(field), has_bit_index / 32, (1u << (has_bit_index % 32)));
- }
- }
if (num_required_fields_ > 0) {
const std::vector<uint32_t> masks_for_has_bits = RequiredFieldsBitMask();
format(
@@ -2020,9 +2212,6 @@
format.Outdent();
format("};\n\n");
- for (auto field : FieldRange(descriptor_)) {
- field_generators_.get(field).GenerateInternalAccessorDefinitions(p);
- }
// Generate non-inline field definitions.
for (auto field : FieldRange(descriptor_)) {
@@ -2093,24 +2282,20 @@
format("\n");
if (HasDescriptorMethods(descriptor_->file(), options_)) {
- if (!descriptor_->options().map_entry()) {
- format(
- "::$proto_ns$::Metadata $classname$::GetMetadata() const {\n"
- "$annotate_reflection$"
- " return ::_pbi::AssignDescriptors(\n"
- " &$desc_table$_getter, &$desc_table$_once,\n"
- " $file_level_metadata$[$1$]);\n"
- "}\n",
- index_in_file_messages_);
- } else {
- format(
- "::$proto_ns$::Metadata $classname$::GetMetadata() const {\n"
- " return ::_pbi::AssignDescriptors(\n"
- " &$desc_table$_getter, &$desc_table$_once,\n"
- " $file_level_metadata$[$1$]);\n"
- "}\n",
- index_in_file_messages_);
- }
+ p->Emit(
+ {
+ {"pin_weak_writer", pin_weak_writer},
+ {"index", index_in_file_messages_},
+ },
+ R"cc(
+ ::$proto_ns$::Metadata $classname$::GetMetadata() const {
+ $annotate_reflection$;
+ $pin_weak_writer$;
+ return ::_pbi::AssignDescriptors(&$desc_table$_getter,
+ &$desc_table$_once,
+ $file_level_metadata$[$index$]);
+ }
+ )cc");
}
if (HasTracker(descriptor_, options_)) {
@@ -2236,7 +2421,6 @@
return std::make_pair(entries, offsets);
}
-
void MessageGenerator::GenerateZeroInitFields(io::Printer* p) const {
using Iterator = decltype(optimized_order_.begin());
const FieldDescriptor* first = nullptr;
@@ -3373,63 +3557,35 @@
Formatter format(p);
if (HasSimpleBaseClass(descriptor_, options_)) return;
- const auto class_data_members = [&] {
- p->Emit(
- {
- {"merge_impl",
- [&] {
- // TODO: This check is not needed once we migrate
- // CheckTypeAndMergeFrom to ClassData fully.
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- p->Emit(R"cc(
- $classname$::MergeImpl,
- )cc");
- } else {
- p->Emit(R"cc(
- nullptr, // MergeImpl
- )cc");
- }
- }},
- {"on_demand_register_arena_dtor",
- [&] {
- if (NeedsArenaDestructor() == ArenaDtorNeeds::kOnDemand) {
- p->Emit(R"cc(
- $classname$::OnDemandRegisterArenaDtor,
- )cc");
- } else {
- p->Emit(R"cc(
- nullptr, // OnDemandRegisterArenaDtor
- )cc");
- }
- }},
- {"descriptor_methods",
- [&] {
- if (HasDescriptorMethods(descriptor_->file(), options_)) {
- p->Emit(R"cc(
- &::$proto_ns$::Message::kDescriptorMethods,
- )cc");
- } else {
- p->Emit(R"cc(
- nullptr, // DescriptorMethods
- )cc");
- }
- }},
- },
- R"cc(
- $merge_impl$, $on_demand_register_arena_dtor$, $descriptor_methods$,
- PROTOBUF_FIELD_OFFSET($classname$, $cached_size$),
- )cc");
+ const auto on_demand_register_arena_dtor = [&] {
+ if (NeedsArenaDestructor() == ArenaDtorNeeds::kOnDemand) {
+ p->Emit(R"cc(
+ $classname$::OnDemandRegisterArenaDtor,
+ )cc");
+ } else {
+ p->Emit(R"cc(
+ nullptr, // OnDemandRegisterArenaDtor
+ )cc");
+ }
};
if (HasDescriptorMethods(descriptor_->file(), options_)) {
p->Emit(
- {{"class_data_members", class_data_members}},
+ {
+ {"on_demand_register_arena_dtor", on_demand_register_arena_dtor},
+ },
R"cc(
const ::$proto_ns$::MessageLite::ClassData*
$classname$::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::$proto_ns$::MessageLite::ClassData
- _data_ = {
- $class_data_members$,
+ PROTOBUF_CONSTINIT static const ::$proto_ns$::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ $on_demand_register_arena_dtor$,
+ PROTOBUF_FIELD_OFFSET($classname$, $cached_size$),
+ false,
+ },
+ &$classname$::MergeImpl,
+ &$classname$::kDescriptorMethods,
};
return &_data_;
}
@@ -3437,8 +3593,8 @@
} else {
p->Emit(
{
- {"class_data_members", class_data_members},
{"type_size", descriptor_->full_name().size() + 1},
+ {"on_demand_register_arena_dtor", on_demand_register_arena_dtor},
},
R"cc(
const ::$proto_ns$::MessageLite::ClassData*
@@ -3447,9 +3603,12 @@
::$proto_ns$::MessageLite::ClassData header;
char type_name[$type_size$];
};
+
PROTOBUF_CONSTINIT static const ClassData_ _data_ = {
{
- $class_data_members$,
+ $on_demand_register_arena_dtor$,
+ PROTOBUF_FIELD_OFFSET($classname$, $cached_size$),
+ true,
},
"$full_name$",
};
@@ -3496,8 +3655,8 @@
" $classname$* const _this = this;\n");
} else {
format(
- "void $classname$::MergeImpl(::$proto_ns$::Message& to_msg, const "
- "::$proto_ns$::Message& from_msg) {\n"
+ "void $classname$::MergeImpl(::$proto_ns$::MessageLite& to_msg, const "
+ "::$proto_ns$::MessageLite& from_msg) {\n"
" auto* const _this = static_cast<$classname$*>(&to_msg);\n"
" auto& from = static_cast<const $classname$&>(from_msg);\n");
}
@@ -3546,10 +3705,17 @@
while (it != next) {
const std::vector<const FieldDescriptor*>& fields = it->fields;
- const bool check_has_byte = fields.size() > 1 &&
- HasByteIndex(fields.front()) != kNoHasbit &&
+ const bool cache_has_bits = HasByteIndex(fields.front()) != kNoHasbit;
+ const bool check_has_byte = cache_has_bits && fields.size() > 1 &&
!IsLikelyPresent(fields.back(), options_);
+ if (cache_has_bits &&
+ cached_has_word_index != HasWordIndex(fields.front())) {
+ cached_has_word_index = HasWordIndex(fields.front());
+ format("cached_has_bits = from.$has_bits$[$1$];\n",
+ cached_has_word_index);
+ }
+
if (check_has_byte) {
// Emit an if() that will let us skip the whole chunk if none are set.
uint32_t chunk_mask = GenChunkMask(fields, has_bit_indices_);
@@ -3562,18 +3728,11 @@
ABSL_DCHECK_LE(2, popcnt(chunk_mask));
ABSL_DCHECK_GE(8, popcnt(chunk_mask));
- if (cached_has_word_index != HasWordIndex(fields.front())) {
- cached_has_word_index = HasWordIndex(fields.front());
- format("cached_has_bits = from.$has_bits$[$1$];\n",
- cached_has_word_index);
- }
-
format("if (cached_has_bits & 0x$1$u) {\n", chunk_mask_str);
format.Indent();
}
// Go back and emit merging code for each of the fields we processed.
- bool deferred_has_bit_changes = false;
for (const auto* field : fields) {
const auto& generator = field_generators_.get(field);
@@ -3611,10 +3770,6 @@
format.Indent();
if (check_has_byte && IsPOD(field)) {
- // Defer hasbit modification until the end of chunk.
- // This can reduce the number of loads/stores by up to 7 per 8
- // fields.
- deferred_has_bit_changes = true;
generator.GenerateCopyConstructorCode(p);
} else {
generator.GenerateMergingCode(p);
@@ -3626,13 +3781,6 @@
}
if (check_has_byte) {
- if (deferred_has_bit_changes) {
- // Flush the has bits for the primitives we deferred.
- ABSL_CHECK_LE(0, cached_has_word_index);
- format("_this->$has_bits$[$1$] |= cached_has_bits;\n",
- cached_has_word_index);
- }
-
format.Outdent();
format("}\n");
}
@@ -3652,25 +3800,58 @@
}
}
+ if (HasBitsSize() == 1) {
+ // Optimization to avoid a load. Assuming that most messages have fewer than
+ // 32 fields, this seems useful.
+ p->Emit(R"cc(
+ _this->$has_bits$[0] |= cached_has_bits;
+ )cc");
+ } else if (HasBitsSize() > 1) {
+ p->Emit(R"cc(
+ _this->$has_bits$.Or(from.$has_bits$);
+ )cc");
+ }
+
// Merge oneof fields. Oneof field requires oneof case check.
for (auto oneof : OneOfRange(descriptor_)) {
- format("switch (from.$1$_case()) {\n", oneof->name());
- format.Indent();
- for (auto field : FieldRange(oneof)) {
- format("case k$1$: {\n", UnderscoresToCamelCase(field->name(), true));
- format.Indent();
- field_generators_.get(field).GenerateMergingCode(p);
- format("break;\n");
- format.Outdent();
- format("}\n");
- }
- format(
- "case $1$_NOT_SET: {\n"
- " break;\n"
- "}\n",
- absl::AsciiStrToUpper(oneof->name()));
- format.Outdent();
- format("}\n");
+ p->Emit({{"name", oneof->name()},
+ {"NAME", absl::AsciiStrToUpper(oneof->name())},
+ {"index", oneof->index()},
+ {"cases",
+ [&] {
+ for (const auto* field : FieldRange(oneof)) {
+ p->Emit(
+ {{"Label", UnderscoresToCamelCase(field->name(), true)},
+ {"body",
+ [&] {
+ field_generators_.get(field).GenerateMergingCode(p);
+ }}},
+ R"cc(
+ case k$Label$: {
+ $body$;
+ break;
+ }
+ )cc");
+ }
+ }}},
+ R"cc(
+ if (const uint32_t oneof_from_case = from.$oneof_case$[$index$]) {
+ const uint32_t oneof_to_case = _this->$oneof_case$[$index$];
+ const bool oneof_needs_init = oneof_to_case != oneof_from_case;
+ if (oneof_needs_init) {
+ if (oneof_to_case != 0) {
+ _this->clear_$name$();
+ }
+ _this->$oneof_case$[$index$] = oneof_from_case;
+ }
+
+ switch (oneof_from_case) {
+ $cases$;
+ case $NAME$_NOT_SET:
+ break;
+ }
+ }
+ )cc");
}
if (num_weak_fields_) {
format(
@@ -3924,9 +4105,7 @@
class LazySerializerEmitter {
public:
LazySerializerEmitter(MessageGenerator* mg, io::Printer* p)
- : mg_(mg),
- p_(p),
- cached_has_bit_index_(kNoHasbit) {}
+ : mg_(mg), p_(p), cached_has_bit_index_(kNoHasbit) {}
~LazySerializerEmitter() { Flush(); }
@@ -4126,7 +4305,6 @@
void MessageGenerator::GenerateSerializeWithCachedSizesBodyShuffled(
io::Printer* p) {
-
std::vector<const FieldDescriptor*> ordered_fields =
SortFieldsByNumber(descriptor_);
diff --git a/src/google/protobuf/compiler/cpp/message.h b/src/google/protobuf/compiler/cpp/message.h
index e62bce2..f16cd43 100644
--- a/src/google/protobuf/compiler/cpp/message.h
+++ b/src/google/protobuf/compiler/cpp/message.h
@@ -12,6 +12,7 @@
#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_MESSAGE_H__
#define GOOGLE_PROTOBUF_COMPILER_CPP_MESSAGE_H__
+#include <cstddef>
#include <cstdint>
#include <limits>
#include <memory>
@@ -20,6 +21,7 @@
#include <vector>
#include "absl/container/flat_hash_map.h"
+#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/enum.h"
#include "google/protobuf/compiler/cpp/extension.h"
#include "google/protobuf/compiler/cpp/field.h"
@@ -119,6 +121,9 @@
void GenerateSerializeWithCachedSizesBodyShuffled(io::Printer* p);
void GenerateByteSize(io::Printer* p);
void GenerateClassData(io::Printer* p);
+ void GenerateMapEntryClassDefinition(io::Printer* p);
+ void GenerateAnyMethodDefinition(io::Printer* p);
+ void GenerateImplDefinition(io::Printer* p);
void GenerateMergeFrom(io::Printer* p);
void GenerateClassSpecificMergeImpl(io::Printer* p);
void GenerateCopyFrom(io::Printer* p);
diff --git a/src/google/protobuf/compiler/cpp/options.h b/src/google/protobuf/compiler/cpp/options.h
index 30be9c0..4d60063 100644
--- a/src/google/protobuf/compiler/cpp/options.h
+++ b/src/google/protobuf/compiler/cpp/options.h
@@ -50,6 +50,7 @@
bool transitive_pb_h = true;
bool annotate_headers = false;
bool lite_implicit_weak_fields = false;
+ bool descriptor_implicit_weak_messages = false;
bool bootstrap = false;
bool opensource_runtime = false;
bool annotate_accessor = false;
diff --git a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.cc b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.cc
index 8af6b57..5621d19 100644
--- a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.cc
+++ b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.cc
@@ -16,8 +16,11 @@
#include <string_view>
#include <vector>
+#include "google/protobuf/testing/fileenums.h"
#include "google/protobuf/testing/file.h"
#include "google/protobuf/testing/file.h"
+#include "google/protobuf/testing/path.h"
+#include "file/util/fileyielder.h"
#include "google/protobuf/compiler/access_info_map.h"
#include "google/protobuf/compiler/split_map.h"
#include "google/protobuf/compiler/profile_bootstrap.pb.h"
@@ -26,6 +29,8 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/cord.h"
+#include "absl/strings/match.h"
+#include "absl/strings/str_cat.h"
#include "absl/strings/str_replace.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/cpp_access_info_parse_helper.h"
@@ -42,15 +47,19 @@
namespace {
-enum PDProtoScale { kNever, kRarely, kDefault, kLikely };
+enum PDProtoScale { kInvalid, kNever, kRarely, kDefault, kLikely };
struct PDProtoAnalysis {
PDProtoScale presence = PDProtoScale::kDefault;
PDProtoScale usage = PDProtoScale::kDefault;
+ uint64_t presence_count = 0;
+ uint64_t usage_count = 0;
};
std::ostream& operator<<(std::ostream& s, PDProtoScale scale) {
switch (scale) {
+ case PDProtoScale::kInvalid:
+ return s << "INVALID";
case PDProtoScale::kNever:
return s << "NEVER";
case PDProtoScale::kRarely:
@@ -106,18 +115,26 @@
PDProtoAnalysis AnalyzeField(const FieldDescriptor* field) {
PDProtoAnalysis analysis;
- if (info_map_.InProfile(field)) {
- if (IsLikelyPresent(field)) {
- analysis.presence = PDProtoScale::kLikely;
- } else if (IsRarelyPresent(field)) {
- analysis.presence = PDProtoScale::kRarely;
- }
+ if (!info_map_.InProfile(field)) {
+ return analysis;
}
- if (info_map_.InProfile(field) &&
- info_map_.AccessCount(field, AccessInfoMap::kReadWriteOther) <=
- info_map_.GetUnlikelyUsedThreshold()) {
- analysis.usage = PDProtoScale::kRarely;
+ if (IsLikelyPresent(field)) {
+ analysis.presence = PDProtoScale::kLikely;
+ } else if (IsRarelyPresent(field)) {
+ analysis.presence = PDProtoScale::kRarely;
+ }
+ analysis.presence_count =
+ info_map_.AccessCount(field, AccessInfoMap::kReadWrite);
+
+ if (!info_map_.HasUsage(field)) {
+ analysis.usage = PDProtoScale ::kInvalid;
+ } else {
+ analysis.usage_count =
+ info_map_.AccessCount(field, AccessInfoMap::kReadWriteOther);
+ if (analysis.usage_count <= info_map_.GetUnlikelyUsedThreshold()) {
+ analysis.usage = PDProtoScale::kRarely;
+ }
}
return analysis;
@@ -273,9 +290,102 @@
return sorted;
}
+struct Stats {
+ uint64_t singular_total_pcount = 0;
+ uint64_t repeated_total_pcount = 0;
+ uint64_t singular_lazy_pcount = 0;
+ uint64_t singular_lazy_0usage_pcount = 0;
+ uint64_t repeated_lazy_pcount = 0;
+ uint64_t singular_lazy_num = 0;
+ uint64_t singular_lazy_0usage_num = 0;
+ uint64_t repeated_lazy_num = 0;
+ uint64_t max_pcount = 0;
+ uint64_t max_ucount = 0;
+};
+
+void Aggregate(const FieldDescriptor* field, const PDProtoAnalysis& analysis,
+ const PDProtoOptimization& optimized, Stats& stats) {
+ if (stats.max_pcount < analysis.presence_count) {
+ stats.max_pcount = analysis.presence_count;
+ }
+ if (stats.max_ucount < analysis.usage_count) {
+ stats.max_ucount = analysis.usage_count;
+ }
+ if (field->type() == FieldDescriptor::TYPE_MESSAGE) {
+ if (field->is_repeated()) {
+ stats.repeated_total_pcount += analysis.presence_count;
+ } else {
+ stats.singular_total_pcount += analysis.presence_count;
+ }
+ }
+ if (optimized == kLazy) {
+ if (field->is_repeated()) {
+ stats.repeated_lazy_num++;
+ stats.repeated_lazy_pcount += analysis.presence_count;
+ } else {
+ stats.singular_lazy_num++;
+ stats.singular_lazy_pcount += analysis.presence_count;
+ if (analysis.usage_count == 0) {
+ stats.singular_lazy_0usage_num++;
+ stats.singular_lazy_0usage_pcount += analysis.presence_count;
+ }
+ }
+ }
+}
+
+void Aggregate(const Stats& in, Stats& out) {
+ out.singular_total_pcount += in.singular_total_pcount;
+ out.repeated_total_pcount += in.repeated_total_pcount;
+ out.singular_lazy_num += in.singular_lazy_num;
+ out.singular_lazy_0usage_num += in.singular_lazy_0usage_num;
+ out.repeated_lazy_num += in.repeated_lazy_num;
+ out.singular_lazy_pcount += in.singular_lazy_pcount;
+ out.singular_lazy_0usage_pcount += in.singular_lazy_0usage_pcount;
+ out.repeated_lazy_pcount += in.repeated_lazy_pcount;
+ out.max_pcount = std::max(out.max_pcount, in.max_pcount);
+ out.max_ucount = std::max(out.max_ucount, in.max_ucount);
+}
+
+std::ostream& operator<<(std::ostream& s, Stats stats) {
+ s << "========" << std::endl
+ << "singular_lazy_num=" << stats.singular_lazy_num << std::endl
+ << "singular_lazy_0usage_num=" << stats.singular_lazy_0usage_num
+ << std::endl
+ << "repeated_lazy_num=" << stats.repeated_lazy_num << std::endl
+ << "singular_total_pcount=" << stats.singular_total_pcount << std::endl
+ << "repeated_total_pcount=" << stats.repeated_total_pcount << std::endl
+ << "singular_lazy_pcount=" << stats.singular_lazy_pcount << std::endl
+ << "singular_lazy_0usage_pcount=" << stats.singular_lazy_0usage_pcount
+ << std::endl
+ << "repeated_lazy_pcount=" << stats.repeated_lazy_pcount << std::endl
+ << "max_pcount=" << stats.max_pcount << std::endl
+ << "max_ucount=" << stats.max_ucount << std::endl
+ << "repeated_lazy_num/singular_lazy_num="
+ << static_cast<double>(stats.repeated_lazy_num) /
+ static_cast<double>(stats.singular_lazy_num)
+ << std::endl
+ << "repeated_lazy_pcount/singular_lazy_pcount="
+ << static_cast<double>(stats.repeated_lazy_pcount) /
+ static_cast<double>(stats.singular_lazy_pcount)
+ << std::endl
+ << "singular_lazy_pcount/singular_total_pcount="
+ << static_cast<double>(stats.singular_lazy_pcount) /
+ static_cast<double>(stats.singular_total_pcount)
+ << std::endl
+ << "singular_lazy_0usage_pcount/singular_total_pcount="
+ << static_cast<double>(stats.singular_lazy_0usage_pcount) /
+ static_cast<double>(stats.singular_total_pcount)
+ << std::endl
+ << "repeated_lazy_pcount/repeated_total_pcount="
+ << static_cast<double>(stats.repeated_lazy_pcount) /
+ static_cast<double>(stats.repeated_total_pcount)
+ << std::endl;
+ return s;
+}
+
} // namespace
-absl::Status AnalyzeProfileProtoToText(
+static absl::StatusOr<Stats> AnalyzeProfileProto(
std::ostream& stream, absl::string_view proto_profile,
const AnalyzeProfileProtoOptions& options) {
if (options.pool == nullptr) {
@@ -300,6 +410,7 @@
<< "-----------------------------------------\n";
}
+ Stats stats;
for (const MessageAccessInfo* message : SortMessages(*access_info)) {
if (RE2::PartialMatch(message->name(), regex)) {
if (const Descriptor* descriptor =
@@ -311,8 +422,10 @@
const FieldDescriptor* field = descriptor->field(i);
PDProtoAnalysis analysis = analyzer.AnalyzeField(field);
PDProtoOptimization optimized = analyzer.OptimizeField(field);
+ Aggregate(field, analysis, optimized, stats);
if (options.print_all_fields || options.print_analysis ||
- optimized != PDProtoOptimization::kNone) {
+ (options.print_optimized &&
+ (optimized != PDProtoOptimization::kNone))) {
if (!message_header) {
message_header = true;
stream << "Message "
@@ -340,6 +453,39 @@
}
}
}
+ if (options.print_analysis) {
+ stream << stats;
+ }
+ return stats;
+}
+
+absl::Status AnalyzeProfileProtoToText(
+ std::ostream& stream, absl::string_view proto_profile,
+ const AnalyzeProfileProtoOptions& options) {
+ return AnalyzeProfileProto(stream, proto_profile, options).status();
+}
+
+absl::Status AnalyzeAndAggregateProfileProtosToText(
+ std::ostream& stream, absl::string_view root,
+ const AnalyzeProfileProtoOptions& options) {
+ FileYielder yielder;
+ int errors = 0;
+ yielder.Start({file::JoinPath(root, "*")}, file::MATCH_DEFAULT,
+ /*recursively_expand=*/true, &errors);
+ if (errors > 0) {
+ return absl::InternalError(absl::StrCat("Failed to traverse path: ", root));
+ }
+ Stats merged;
+ for (; !yielder.Done(); yielder.Next()) {
+ const std::string& full_path = yielder.FullPathName();
+ if (!absl::EndsWith(full_path, "proto.profile")) {
+ continue;
+ }
+ stream << full_path << std::endl;
+ auto stats = *AnalyzeProfileProto(stream, full_path, options);
+ Aggregate(stats, merged);
+ }
+ stream << merged;
return absl::OkStatus();
}
diff --git a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.h b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.h
index f80bf5c..289d294 100644
--- a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.h
+++ b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto.h
@@ -17,6 +17,9 @@
// true to print the 'unlikely used' threshold.
bool print_unused_threshold = true;
+ // true to print the PDProto optimizations that would be applied to the field.
+ bool print_optimized = true;
+
// true to print all fields instead of optimized fields only.
bool print_all_fields = false;
@@ -30,10 +33,17 @@
std::string message_filter;
};
+// Prints analysis for the given proto profile.
absl::Status AnalyzeProfileProtoToText(
std::ostream& stream, absl::string_view proto_profile,
const AnalyzeProfileProtoOptions& options);
+// Prints aggregated analysis for the proto profiles under the given root
+// directory.
+absl::Status AnalyzeAndAggregateProfileProtosToText(
+ std::ostream& stream, absl::string_view root,
+ const AnalyzeProfileProtoOptions& options);
+
} // namespace tools
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_main.cc b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_main.cc
index 4b9035a..b0756a3 100644
--- a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_main.cc
+++ b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_main.cc
@@ -4,6 +4,14 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+//
+// This tool takes a PDProto profile as input and prints out the analysis, such
+// as the PDProto optimizations that would be applied based on the given
+// profile.
+//
+// It can also take a directory as input and print out the aggregated analysis
+// for all the PDProto profiles under the directory. This is useful when we want
+// to get some statistics for the fleet.
#include <iostream>
#include <string>
@@ -19,6 +27,9 @@
ABSL_FLAG(bool, all, false, "Print all fields");
ABSL_FLAG(bool, analysis, false, "Print field analysis");
ABSL_FLAG(std::string, message_filter, "", "Regex match for message name");
+ABSL_FLAG(bool, aggregate_analysis, false,
+ "If set, will recursively find proto.profile in the given dir and "
+ "print the aggregated analysis. Will not print individual analysis.");
int main(int argc, char* argv[]) {
using google::protobuf::compiler::tools::AnalyzeProfileProtoOptions;
@@ -30,10 +41,18 @@
google::protobuf::DescriptorPool pool(google::protobuf::util::globaldb::global());
AnalyzeProfileProtoOptions options;
options.pool = &pool;
- options.print_all_fields = absl::GetFlag(FLAGS_all);
- options.print_analysis = absl::GetFlag(FLAGS_analysis);
- options.message_filter = absl::GetFlag(FLAGS_message_filter);
- absl::Status status = AnalyzeProfileProtoToText(std::cout, argv[1], options);
+ absl::Status status;
+ if (!absl::GetFlag(FLAGS_aggregate_analysis)) {
+ options.print_all_fields = absl::GetFlag(FLAGS_all);
+ options.print_analysis = absl::GetFlag(FLAGS_analysis);
+ options.message_filter = absl::GetFlag(FLAGS_message_filter);
+ status = AnalyzeProfileProtoToText(std::cout, argv[1], options);
+ } else {
+ options.print_unused_threshold = false;
+ options.print_optimized = false;
+ status =
+ AnalyzeAndAggregateProfileProtosToText(std::cout, argv[1], options);
+ }
if (!status.ok()) {
ABSL_LOG(ERROR) << status;
return 2;
diff --git a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_test.cc b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_test.cc
index 04ebbf1..31a1e7a 100644
--- a/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_test.cc
+++ b/src/google/protobuf/compiler/cpp/tools/analyze_profile_proto_test.cc
@@ -137,6 +137,52 @@
" string optional_string: INLINE\n");
}
+TEST(AnalyzeProfileProtoTest, PrintStatistics) {
+ AccessInfo info = ParseTextOrDie(R"pb(
+ language: "cpp"
+ message {
+ name: "google::protobuf::compiler::tools::AnalyzeThis"
+ count: 100
+ field { name: "id" getters_count: 1 configs_count: 100 }
+ field { name: "optional_string" getters_count: 1 configs_count: 100 }
+ field { name: "optional_child" getters_count: 100 configs_count: 1 }
+ field { name: "repeated_string" getters_count: 100 configs_count: 100 }
+ field { name: "repeated_child" getters_count: 100 configs_count: 100 }
+ field { name: "nested" getters_count: 1 configs_count: 100 }
+ }
+ )pb");
+ AnalyzeProfileProtoOptions options;
+ options.print_unused_threshold = false;
+ options.print_optimized = false;
+ options.print_analysis = true;
+ options.pool = DescriptorPool::generated_pool();
+ EXPECT_STREQ(AnalyzeToText(info, options).c_str(),
+ R"(Message google::protobuf::compiler::tools::AnalyzeThis
+ int32 id: RARELY_USED
+ string optional_string: RARELY_USED
+ string[] repeated_string: LIKELY_PRESENT RARELY_USED
+ AnalyzeChild optional_child: LIKELY_PRESENT RARELY_USED LAZY
+ AnalyzeChild[] repeated_child: LIKELY_PRESENT RARELY_USED
+ Nested nested: RARELY_USED
+========
+singular_lazy_num=1
+singular_lazy_0usage_num=0
+repeated_lazy_num=0
+singular_total_pcount=101
+repeated_total_pcount=100
+singular_lazy_pcount=100
+singular_lazy_0usage_pcount=0
+repeated_lazy_pcount=0
+max_pcount=100
+max_ucount=100
+repeated_lazy_num/singular_lazy_num=0
+repeated_lazy_pcount/singular_lazy_pcount=0
+singular_lazy_pcount/singular_total_pcount=0.990099
+singular_lazy_0usage_pcount/singular_total_pcount=0
+repeated_lazy_pcount/repeated_total_pcount=0
+)");
+}
+
} // namespace
} // namespace tools
} // namespace compiler
diff --git a/src/google/protobuf/compiler/importer.h b/src/google/protobuf/compiler/importer.h
index 539021b..6bb127a 100644
--- a/src/google/protobuf/compiler/importer.h
+++ b/src/google/protobuf/compiler/importer.h
@@ -181,30 +181,12 @@
// Line and column numbers are zero-based. A line number of -1 indicates
// an error with the entire file (e.g. "not found").
virtual void RecordError(absl::string_view filename, int line, int column,
- absl::string_view message) {
- PROTOBUF_IGNORE_DEPRECATION_START
- AddError(std::string(filename), line, column, std::string(message));
- PROTOBUF_IGNORE_DEPRECATION_STOP
- }
+ absl::string_view message)
+ = 0;
virtual void RecordWarning(absl::string_view filename, int line, int column,
absl::string_view message) {
- PROTOBUF_IGNORE_DEPRECATION_START
- AddWarning(std::string(filename), line, column, std::string(message));
- PROTOBUF_IGNORE_DEPRECATION_STOP
}
- private:
- // These should never be called directly, but if a legacy class overrides
- // them they'll get routed to by the Record* methods.
- ABSL_DEPRECATED("Use RecordError")
- virtual void AddError(const std::string& filename, int line, int column,
- const std::string& message) {
- ABSL_LOG(FATAL) << "AddError or RecordError must be implemented.";
- }
-
- ABSL_DEPRECATED("Use RecordWarning")
- virtual void AddWarning(const std::string& filename, int line, int column,
- const std::string& message) {}
};
// Abstract interface which represents a directory tree containing proto files.
diff --git a/src/google/protobuf/compiler/java/BUILD.bazel b/src/google/protobuf/compiler/java/BUILD.bazel
index 8ca67c1..bac4587 100644
--- a/src/google/protobuf/compiler/java/BUILD.bazel
+++ b/src/google/protobuf/compiler/java/BUILD.bazel
@@ -37,9 +37,9 @@
visibility = ["//pkg:__pkg__"],
deps = [
":java_features_bootstrap",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler:code_generator",
+ "//src/google/protobuf/compiler:versions",
"@com_google_absl//absl/container:flat_hash_set",
],
)
@@ -129,7 +129,6 @@
":names",
":names_internal",
"//src/google/protobuf:arena",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler:code_generator",
"//src/google/protobuf/compiler:retention",
diff --git a/src/google/protobuf/compiler/java/file.cc b/src/google/protobuf/compiler/java/file.cc
index 5401e82..0afaa47 100644
--- a/src/google/protobuf/compiler/java/file.cc
+++ b/src/google/protobuf/compiler/java/file.cc
@@ -273,6 +273,14 @@
printer->Annotate("classname", file_->name());
printer->Indent();
+ if (options_.opensource_runtime) {
+ printer->Print("static {\n");
+ printer->Indent();
+ PrintGencodeVersionValidator(printer);
+ printer->Outdent();
+ printer->Print("}\n");
+ }
+
// -----------------------------------------------------------------
printer->Print(
diff --git a/src/google/protobuf/compiler/java/helpers.cc b/src/google/protobuf/compiler/java/helpers.cc
index c457370..55b38c1 100644
--- a/src/google/protobuf/compiler/java/helpers.cc
+++ b/src/google/protobuf/compiler/java/helpers.cc
@@ -28,8 +28,9 @@
#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
#include "google/protobuf/compiler/java/name_resolver.h"
+#include "google/protobuf/compiler/versions.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
+#include "google/protobuf/io/printer.h"
#include "google/protobuf/io/strtod.h"
#include "google/protobuf/wire_format.h"
@@ -41,8 +42,8 @@
namespace compiler {
namespace java {
-using internal::WireFormat;
-using internal::WireFormatLite;
+using ::google::protobuf::internal::WireFormat;
+using ::google::protobuf::internal::WireFormatLite;
const char kThickSeparator[] =
"// ===================================================================\n";
@@ -84,6 +85,21 @@
absl::StrCat(enum_verifier_string, terminating_string));
}
+void PrintGencodeVersionValidator(io::Printer* printer) {
+ const auto& version = GetProtobufJavaVersion();
+ printer->Print(
+ "com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(\n"
+ " com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,\n"
+ " $major$,\n"
+ " $minor$,\n"
+ " $patch$,\n"
+ " $suffix$);\n",
+ "major", absl::StrCat("/* major= */ ", version.major()), "minor",
+ absl::StrCat("/* minor= */ ", version.minor()), "patch",
+ absl::StrCat("/* patch= */ ", version.patch()), "suffix",
+ absl::StrCat("/* suffix= */ \"", version.suffix(), "\""));
+}
+
std::string UnderscoresToCamelCase(absl::string_view input,
bool cap_next_letter) {
ABSL_CHECK(!input.empty());
@@ -811,8 +827,7 @@
}
bool IsRealOneof(const FieldDescriptor* descriptor) {
- return descriptor->containing_oneof() &&
- !OneofDescriptorLegacy(descriptor->containing_oneof()).is_synthetic();
+ return descriptor->real_containing_oneof();
}
bool HasRepeatedFields(const Descriptor* descriptor) {
diff --git a/src/google/protobuf/compiler/java/helpers.h b/src/google/protobuf/compiler/java/helpers.h
index 8dc75a9..60f963a 100644
--- a/src/google/protobuf/compiler/java/helpers.h
+++ b/src/google/protobuf/compiler/java/helpers.h
@@ -22,7 +22,6 @@
#include "google/protobuf/compiler/java/options.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/printer.h"
// Must be last.
@@ -60,6 +59,10 @@
absl::string_view var_name, absl::string_view terminating_string,
bool enforce_lite);
+// Prints the Protobuf Java Version validator checking that the runtime and
+// gencode versions are compatible.
+void PrintGencodeVersionValidator(io::Printer* printer);
+
// Converts a name to camel-case. If cap_first_letter is true, capitalize the
// first letter.
std::string ToCamelCase(absl::string_view input, bool lower_first);
@@ -340,13 +343,6 @@
return internal::cpp::HasHasbit(descriptor);
}
-// Whether generate classes expose public PARSER instances.
-inline bool ExposePublicParser(const FileDescriptor* descriptor) {
- // TODO: Mark the PARSER private in 3.1.x releases.
- return FileDescriptorLegacy(descriptor).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO2;
-}
-
// Whether unknown enum values are kept (i.e., not stored in UnknownFieldSet
// but in the message and can be queried using additional getters that return
// ints.
diff --git a/src/google/protobuf/compiler/java/java_features.pb.cc b/src/google/protobuf/compiler/java/java_features.pb.cc
index 6f9dbd6..aa2052a 100644
--- a/src/google/protobuf/compiler/java/java_features.pb.cc
+++ b/src/google/protobuf/compiler/java/java_features.pb.cc
@@ -123,9 +123,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto(&descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto);
namespace pb {
const ::google::protobuf::EnumDescriptor* JavaFeatures_Utf8Validation_descriptor() {
::google::protobuf::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto);
@@ -155,12 +152,6 @@
using HasBits = decltype(std::declval<JavaFeatures>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(JavaFeatures, _impl_._has_bits_);
- static void set_has_legacy_closed_enum(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_utf8_validation(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
JavaFeatures::JavaFeatures(::google::protobuf::Arena* arena)
@@ -199,12 +190,15 @@
const ::google::protobuf::MessageLite::ClassData*
JavaFeatures::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- JavaFeatures::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(JavaFeatures, _impl_._cached_size_),
+ false,
+ },
+ &JavaFeatures::MergeImpl,
+ &JavaFeatures::kDescriptorMethods,
};
return &_data_;
}
@@ -328,7 +322,7 @@
}
-void JavaFeatures::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void JavaFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<JavaFeatures*>(&to_msg);
auto& from = static_cast<const JavaFeatures&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:pb.JavaFeatures)
@@ -344,8 +338,8 @@
if (cached_has_bits & 0x00000002u) {
_this->_impl_.utf8_validation_ = from._impl_.utf8_validation_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -373,14 +367,15 @@
}
::google::protobuf::Metadata JavaFeatures::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto[0]);
}
-PROTOC_EXPORT PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
- ExtensionIdentifier<::google::protobuf::FeatureSet, ::_pbi::MessageTypeTraits< ::pb::JavaFeatures >,
- 11, false>
- java(kJavaFieldNumber, ::pb::JavaFeatures::default_instance());
+PROTOBUF_CONSTINIT PROTOC_EXPORT
+ PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
+ ExtensionIdentifier<::google::protobuf::FeatureSet, ::_pbi::MessageTypeTraits< ::pb::JavaFeatures >,
+ 11, false>
+ java(kJavaFieldNumber, &::pb::_JavaFeatures_default_instance_);
// @@protoc_insertion_point(namespace_scope)
} // namespace pb
namespace google {
@@ -388,4 +383,12 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fjava_2fjava_5ffeatures_2eproto),
+ ::_pbi::ExtensionSet::RegisterMessageExtension(
+ &::google::protobuf::FeatureSet::default_instance(), 1001, 11,
+ false, false, &::pb::JavaFeatures::default_instance(),
+ nullptr, ::_pbi::LazyAnnotation::kUndefined),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/compiler/java/java_features.pb.h b/src/google/protobuf/compiler/java/java_features.pb.h
index 994101c..aca9f50 100644
--- a/src/google/protobuf/compiler/java/java_features.pb.h
+++ b/src/google/protobuf/compiler/java/java_features.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -104,21 +98,18 @@
// -------------------------------------------------------------------
-class PROTOC_EXPORT JavaFeatures final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:pb.JavaFeatures) */ {
+class PROTOC_EXPORT JavaFeatures final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:pb.JavaFeatures) */ {
public:
inline JavaFeatures() : JavaFeatures(nullptr) {}
~JavaFeatures() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR JavaFeatures(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR JavaFeatures(
+ ::google::protobuf::internal::ConstantInitialized);
- inline JavaFeatures(const JavaFeatures& from)
- : JavaFeatures(nullptr, from) {}
- JavaFeatures(JavaFeatures&& from) noexcept
- : JavaFeatures() {
- *this = ::std::move(from);
- }
-
+ inline JavaFeatures(const JavaFeatures& from) : JavaFeatures(nullptr, from) {}
+ inline JavaFeatures(JavaFeatures&& from) noexcept
+ : JavaFeatures(nullptr, std::move(from)) {}
inline JavaFeatures& operator=(const JavaFeatures& from) {
CopyFrom(from);
return *this;
@@ -126,9 +117,9 @@
inline JavaFeatures& operator=(JavaFeatures&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -160,22 +151,17 @@
}
static inline const JavaFeatures* internal_default_instance() {
return reinterpret_cast<const JavaFeatures*>(
- &_JavaFeatures_default_instance_);
+ &_JavaFeatures_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(JavaFeatures& a, JavaFeatures& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(JavaFeatures& a, JavaFeatures& b) { a.Swap(&b); }
inline void Swap(JavaFeatures* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -195,11 +181,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const JavaFeatures& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const JavaFeatures& from) {
- JavaFeatures::MergeImpl(*this, from);
- }
+ void MergeFrom(const JavaFeatures& from) { JavaFeatures::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -207,29 +195,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(JavaFeatures* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "pb.JavaFeatures";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "pb.JavaFeatures"; }
+
+ protected:
explicit JavaFeatures(::google::protobuf::Arena* arena);
JavaFeatures(::google::protobuf::Arena* arena, const JavaFeatures& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ JavaFeatures(::google::protobuf::Arena* arena, JavaFeatures&& from) noexcept
+ : JavaFeatures(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Utf8Validation = JavaFeatures_Utf8Validation;
static constexpr Utf8Validation UTF8_VALIDATION_UNKNOWN = JavaFeatures_Utf8Validation_UTF8_VALIDATION_UNKNOWN;
static constexpr Utf8Validation DEFAULT = JavaFeatures_Utf8Validation_DEFAULT;
@@ -252,7 +242,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kLegacyClosedEnumFieldNumber = 1,
kUtf8ValidationFieldNumber = 2,
@@ -282,7 +271,6 @@
// @@protoc_insertion_point(class_scope:pb.JavaFeatures)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 1,
@@ -294,14 +282,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOC_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
bool legacy_closed_enum_;
@@ -349,6 +336,7 @@
}
inline void JavaFeatures::set_legacy_closed_enum(bool value) {
_internal_set_legacy_closed_enum(value);
+ _impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:pb.JavaFeatures.legacy_closed_enum)
}
inline bool JavaFeatures::_internal_legacy_closed_enum() const {
@@ -357,7 +345,6 @@
}
inline void JavaFeatures::_internal_set_legacy_closed_enum(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
_impl_.legacy_closed_enum_ = value;
}
@@ -377,6 +364,7 @@
}
inline void JavaFeatures::set_utf8_validation(::pb::JavaFeatures_Utf8Validation value) {
_internal_set_utf8_validation(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:pb.JavaFeatures.utf8_validation)
}
inline ::pb::JavaFeatures_Utf8Validation JavaFeatures::_internal_utf8_validation() const {
@@ -386,7 +374,6 @@
inline void JavaFeatures::_internal_set_utf8_validation(::pb::JavaFeatures_Utf8Validation value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::pb::JavaFeatures_Utf8Validation_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.utf8_validation_ = value;
}
diff --git a/src/google/protobuf/compiler/java/message.cc b/src/google/protobuf/compiler/java/message.cc
index d170cfa..5f1db04 100644
--- a/src/google/protobuf/compiler/java/message.cc
+++ b/src/google/protobuf/compiler/java/message.cc
@@ -340,6 +340,15 @@
printer->Print("private static final long serialVersionUID = 0L;\n");
printer->Indent();
+
+ if (context_->options().opensource_runtime) {
+ printer->Print("static {\n");
+ printer->Indent();
+ PrintGencodeVersionValidator(printer);
+ printer->Outdent();
+ printer->Print("}\n");
+ }
+
// Using builder_type, instead of Builder, prevents the Builder class from
// being loaded into PermGen space when the default instance is created.
// This optimizes the PermGen space usage for clients that do not modify
@@ -1131,7 +1140,7 @@
// ===================================================================
void ImmutableMessageGenerator::GenerateParser(io::Printer* printer) {
printer->Print(
- "$visibility$ static final com.google.protobuf.Parser<$classname$>\n"
+ "private static final com.google.protobuf.Parser<$classname$>\n"
" PARSER = new com.google.protobuf.AbstractParser<$classname$>() {\n"
" @java.lang.Override\n"
" public $classname$ parsePartialFrom(\n"
@@ -1164,9 +1173,6 @@
" return PARSER;\n"
"}\n"
"\n",
- "visibility",
- ExposePublicParser(descriptor_->file()) ? "@java.lang.Deprecated public"
- : "private",
"classname", descriptor_->name());
}
diff --git a/src/google/protobuf/compiler/java/message_field.cc b/src/google/protobuf/compiler/java/message_field.cc
index f982bf9..d5f8987 100644
--- a/src/google/protobuf/compiler/java/message_field.cc
+++ b/src/google/protobuf/compiler/java/message_field.cc
@@ -19,7 +19,6 @@
#include "google/protobuf/compiler/java/doc_comment.h"
#include "google/protobuf/compiler/java/helpers.h"
#include "google/protobuf/compiler/java/name_resolver.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/wire_format.h"
@@ -62,11 +61,7 @@
: ""});
(*variables)["on_changed"] = "onChanged();";
(*variables)["ver"] = GeneratedCodeVersionSuffix();
- (*variables)["get_parser"] =
- ExposePublicParser(descriptor->message_type()->file()) &&
- context->options().opensource_runtime
- ? "PARSER"
- : "parser()";
+ (*variables)["get_parser"] = "parser()";
if (HasHasbit(descriptor)) {
// For singular messages and builders, one bit is used for the hasField bit.
@@ -411,7 +406,8 @@
}
void ImmutableMessageFieldGenerator::GenerateKotlinOrNull(io::Printer* printer) const {
- if (FieldDescriptorLegacy(descriptor_).has_optional_keyword()) {
+ if (descriptor_->has_presence() &&
+ descriptor_->real_containing_oneof() == nullptr) {
printer->Print(variables_,
"public val $classname$Kt.Dsl.$name$OrNull: $kt_type$?\n"
" get() = $kt_dsl_builder$.$name$OrNull\n");
diff --git a/src/google/protobuf/compiler/java/message_field_lite.cc b/src/google/protobuf/compiler/java/message_field_lite.cc
index 17a9fa7..45997ef 100644
--- a/src/google/protobuf/compiler/java/message_field_lite.cc
+++ b/src/google/protobuf/compiler/java/message_field_lite.cc
@@ -19,7 +19,6 @@
#include "google/protobuf/compiler/java/doc_comment.h"
#include "google/protobuf/compiler/java/helpers.h"
#include "google/protobuf/compiler/java/name_resolver.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/wire_format.h"
@@ -309,7 +308,8 @@
}
void ImmutableMessageFieldLiteGenerator::GenerateKotlinOrNull(io::Printer* printer) const {
- if (FieldDescriptorLegacy(descriptor_).has_optional_keyword()) {
+ if (descriptor_->has_presence() &&
+ descriptor_->real_containing_oneof() == nullptr) {
printer->Print(variables_,
"public val $classname$Kt.Dsl.$name$OrNull: $kt_type$?\n"
" get() = $kt_dsl_builder$.$name$OrNull\n");
diff --git a/src/google/protobuf/compiler/java/message_lite.cc b/src/google/protobuf/compiler/java/message_lite.cc
index 6ae00b9..71b3689 100644
--- a/src/google/protobuf/compiler/java/message_lite.cc
+++ b/src/google/protobuf/compiler/java/message_lite.cc
@@ -31,7 +31,6 @@
#include "google/protobuf/compiler/java/message_builder_lite.h"
#include "google/protobuf/compiler/java/name_resolver.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/wire_format.h"
@@ -473,18 +472,13 @@
std::vector<uint16_t> chars;
int flags = 0;
- if (FileDescriptorLegacy(descriptor_->file()).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO2) {
- if (!context_->options().strip_nonfunctional_codegen) {
- flags |= 0x1;
- }
- }
if (descriptor_->options().message_set_wire_format()) {
flags |= 0x2;
}
- if (FileDescriptorLegacy(descriptor_->file()).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS) {
- if (!context_->options().strip_nonfunctional_codegen) {
+ if (!context_->options().strip_nonfunctional_codegen) {
+ if (descriptor_->file()->edition() == Edition::EDITION_PROTO2) {
+ flags |= 0x1;
+ } else if (descriptor_->file()->edition() >= Edition::EDITION_2023) {
flags |= 0x4;
}
}
diff --git a/src/google/protobuf/compiler/java/shared_code_generator.cc b/src/google/protobuf/compiler/java/shared_code_generator.cc
index 3def00c..b73c37e 100644
--- a/src/google/protobuf/compiler/java/shared_code_generator.cc
+++ b/src/google/protobuf/compiler/java/shared_code_generator.cc
@@ -83,6 +83,9 @@
printer->Indent();
printer->Indent();
GenerateDescriptors(printer.get());
+ if (options_.opensource_runtime) {
+ PrintGencodeVersionValidator(printer.get());
+ }
printer->Outdent();
printer->Outdent();
printer->Print(
diff --git a/src/google/protobuf/compiler/mock_code_generator.cc b/src/google/protobuf/compiler/mock_code_generator.cc
index d7057a1..0cf407d 100644
--- a/src/google/protobuf/compiler/mock_code_generator.cc
+++ b/src/google/protobuf/compiler/mock_code_generator.cc
@@ -34,7 +34,6 @@
#include "absl/strings/substitute.h"
#include "google/protobuf/compiler/plugin.pb.h"
#include "google/protobuf/descriptor.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/descriptor_visitor.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/io/zero_copy_stream.h"
@@ -80,6 +79,10 @@
feature_extensions_ = {nullptr};
} else if (key == "no_feature_defaults") {
feature_extensions_ = {};
+ } else if (key == "high_maximum") {
+ maximum_edition_ = Edition::EDITION_99997_TEST_ONLY;
+ } else if (key == "low_minimum") {
+ maximum_edition_ = Edition::EDITION_1_TEST_ONLY;
}
}
@@ -203,8 +206,16 @@
const std::string& parameter,
GeneratorContext* context,
std::string* error) const {
- if (FileDescriptorLegacy(file).syntax() ==
- FileDescriptorLegacy::SYNTAX_EDITIONS &&
+ // Override minimum/maximum after generating the pool to simulate a plugin
+ // that "works" but doesn't advertise support of the current edition.
+ absl::string_view test_case = getenv("TEST_CASE");
+ if (test_case == "high_minimum") {
+ minimum_edition_ = Edition::EDITION_99997_TEST_ONLY;
+ } else if (test_case == "low_maximum") {
+ maximum_edition_ = Edition::EDITION_PROTO2;
+ }
+
+ if (file->edition() >= Edition::EDITION_2023 &&
(suppressed_features_ & CodeGenerator::FEATURE_SUPPORTS_EDITIONS) == 0) {
internal::VisitDescriptors(*file, [&](const auto& descriptor) {
const FeatureSet& features = GetResolvedSourceFeatures(descriptor);
diff --git a/src/google/protobuf/compiler/mock_code_generator.h b/src/google/protobuf/compiler/mock_code_generator.h
index 594e16b..8091f38 100644
--- a/src/google/protobuf/compiler/mock_code_generator.h
+++ b/src/google/protobuf/compiler/mock_code_generator.h
@@ -119,8 +119,8 @@
private:
std::string name_;
uint64_t suppressed_features_ = 0;
- Edition minimum_edition_ = PROTOBUF_MINIMUM_EDITION;
- Edition maximum_edition_ = PROTOBUF_MAXIMUM_EDITION;
+ mutable Edition minimum_edition_ = PROTOBUF_MINIMUM_EDITION;
+ mutable Edition maximum_edition_ = PROTOBUF_MAXIMUM_EDITION;
std::vector<const FieldDescriptor*> feature_extensions_ = {
GetExtensionReflection(pb::test)};
diff --git a/src/google/protobuf/compiler/objectivec/BUILD.bazel b/src/google/protobuf/compiler/objectivec/BUILD.bazel
index a3a6fcf..b60a59d 100644
--- a/src/google/protobuf/compiler/objectivec/BUILD.bazel
+++ b/src/google/protobuf/compiler/objectivec/BUILD.bazel
@@ -95,7 +95,6 @@
deps = [
":line_consumer",
":names",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler:code_generator",
"@com_google_absl//absl/container:btree",
diff --git a/src/google/protobuf/compiler/objectivec/file.cc b/src/google/protobuf/compiler/objectivec/file.cc
index 857dfd7..eccec50 100644
--- a/src/google/protobuf/compiler/objectivec/file.cc
+++ b/src/google/protobuf/compiler/objectivec/file.cc
@@ -22,6 +22,8 @@
#include "absl/log/absl_check.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_join.h"
+#include "absl/strings/string_view.h"
+#include "google/protobuf/compiler/code_generator.h"
#include "google/protobuf/compiler/objectivec/enum.h"
#include "google/protobuf/compiler/objectivec/extension.h"
#include "google/protobuf/compiler/objectivec/helpers.h"
@@ -31,7 +33,6 @@
#include "google/protobuf/compiler/objectivec/options.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/printer.h"
namespace google {
@@ -140,6 +141,27 @@
}
}
+void EmitLinkWKTs(absl::string_view name, io::Printer* p) {
+ absl::string_view::size_type last_slash = name.rfind('/');
+ std::string basename;
+ if (last_slash == absl::string_view::npos) {
+ basename = std::string(name);
+ } else {
+ basename = std::string(name.substr(last_slash + 1));
+ }
+
+ p->Emit({{"basename", StripProto(basename)}},
+ R"objc(
+ // This is to help make sure that the GPBWellKnownTypes.* categories get linked and
+ // developers do not have to use the `-ObjC` linker flag. More information
+ // here: https://medium.com/ios-os-x-development/categories-in-static-libraries-78e41f8ddb96
+ __attribute__((used)) static NSString* $basename$_importCategories () {
+ return GPBWellKnownTypesErrorDomain;
+ }
+ )objc");
+ p->Emit("\n");
+}
+
void EmitSourceFwdDecls(const absl::btree_set<std::string>& fwd_decls,
io::Printer* p) {
if (fwd_decls.empty()) {
@@ -386,6 +408,10 @@
EmitRootImplementation(p, deps_with_extensions);
EmitFileDescription(p);
+ if (is_bundled_proto_ && HasWKTWithObjCCategory(file_)) {
+ EmitLinkWKTs(file_->name(), p);
+ }
+
for (const auto& generator : enum_generators_) {
generator->GenerateSource(p);
}
@@ -396,6 +422,8 @@
}
void FileGenerator::GenerateGlobalSource(io::Printer* p) const {
+ ABSL_CHECK(!is_bundled_proto_)
+ << "Bundled protos aren't expected to use multi source generation.";
std::vector<const FileDescriptor*> deps_with_extensions =
common_state_->CollectMinimalFileDepsContainingExtensions(file_);
GeneratedFileOptions file_options;
@@ -417,6 +445,8 @@
}
void FileGenerator::GenerateSourceForEnums(io::Printer* p) const {
+ ABSL_CHECK(!is_bundled_proto_)
+ << "Bundled protos aren't expected to use multi source generation.";
// Enum implementation uses atomic in the generated code.
GeneratedFileOptions file_options;
file_options.extra_system_headers.push_back("stdatomic.h");
@@ -429,6 +459,8 @@
}
void FileGenerator::GenerateSourceForMessage(int idx, io::Printer* p) const {
+ ABSL_CHECK(!is_bundled_proto_)
+ << "Bundled protos aren't expected to use multi source generation.";
const auto& generator = message_generators_[idx];
absl::btree_set<std::string> fwd_decls;
@@ -486,6 +518,9 @@
break;
case GeneratedFileType::kSource:
import_writer.AddRuntimeImport("GPBProtocolBuffers_RuntimeSupport.h");
+ if (is_bundled_proto_ && HasWKTWithObjCCategory(file_)) {
+ import_writer.AddRuntimeImport("GPBWellKnownTypes.h");
+ }
import_writer.AddFile(file_, header_extension);
if (HeadersUseForwardDeclarations()) {
if (generation_options_.generate_minimal_imports) {
@@ -742,17 +777,17 @@
// mode.
syntax = "GPBFileSyntaxUnknown";
} else {
- switch (FileDescriptorLegacy(file_).syntax()) {
- case FileDescriptorLegacy::Syntax::SYNTAX_UNKNOWN:
+ switch (file_->edition()) {
+ case Edition::EDITION_UNKNOWN:
syntax = "GPBFileSyntaxUnknown";
break;
- case FileDescriptorLegacy::Syntax::SYNTAX_PROTO2:
+ case Edition::EDITION_PROTO2:
syntax = "GPBFileSyntaxProto2";
break;
- case FileDescriptorLegacy::Syntax::SYNTAX_PROTO3:
+ case Edition::EDITION_PROTO3:
syntax = "GPBFileSyntaxProto3";
break;
- case FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS:
+ default:
syntax = "GPBFileSyntaxProtoEditions";
break;
}
diff --git a/src/google/protobuf/compiler/objectivec/helpers.cc b/src/google/protobuf/compiler/objectivec/helpers.cc
index 0ecb564..b1d4180 100644
--- a/src/google/protobuf/compiler/objectivec/helpers.cc
+++ b/src/google/protobuf/compiler/objectivec/helpers.cc
@@ -13,6 +13,7 @@
#include <string>
#include <vector>
+#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/strings/ascii.h"
#include "absl/strings/escaping.h"
@@ -393,6 +394,33 @@
)");
}
+bool HasWKTWithObjCCategory(const FileDescriptor* file) {
+ // We don't check the name prefix or proto package because some files
+ // (descriptor.proto), aren't shipped generated by the library, so this
+ // seems to be the safest way to only catch the ones shipped.
+ const std::string name = file->name();
+ if (name == "google/protobuf/any.proto" ||
+ name == "google/protobuf/duration.proto" ||
+ name == "google/protobuf/timestamp.proto") {
+ ABSL_DCHECK(IsProtobufLibraryBundledProtoFile(file));
+ return true;
+ }
+ return false;
+}
+
+bool IsWKTWithObjCCategory(const Descriptor* descriptor) {
+ if (!HasWKTWithObjCCategory(descriptor->file())) {
+ return false;
+ }
+ const std::string full_name = descriptor->full_name();
+ if (full_name == "google.protobuf.Any" ||
+ full_name == "google.protobuf.Duration" ||
+ full_name == "google.protobuf.Timestamp") {
+ return true;
+ }
+ return false;
+}
+
} // namespace objectivec
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/objectivec/helpers.h b/src/google/protobuf/compiler/objectivec/helpers.h
index 086b71f..7b6c2b7 100644
--- a/src/google/protobuf/compiler/objectivec/helpers.h
+++ b/src/google/protobuf/compiler/objectivec/helpers.h
@@ -148,6 +148,11 @@
}
}
+// Helpers to identify the WellKnownType files/messages that get an Objective-C
+// category within the runtime to add helpers.
+bool HasWKTWithObjCCategory(const FileDescriptor* file);
+bool IsWKTWithObjCCategory(const Descriptor* descriptor);
+
} // namespace objectivec
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/objectivec/message.cc b/src/google/protobuf/compiler/objectivec/message.cc
index 0030cda..55fd4d3 100644
--- a/src/google/protobuf/compiler/objectivec/message.cc
+++ b/src/google/protobuf/compiler/objectivec/message.cc
@@ -336,6 +336,17 @@
}
field_generators_.get(field).GeneratePropertyDeclaration(printer);
}
+ }},
+ {"wkt_extra",
+ [&] {
+ if (!IsWKTWithObjCCategory(descriptor_)) {
+ return;
+ }
+ printer->Emit(R"objc(
+ // NOTE: There are some Objective-C specific methods/properties in
+ // GPBWellKnownTypes.h that will likey be useful.
+ )objc");
+ printer->Emit("\n");
}}},
R"objc(
#pragma mark - $classname$
@@ -347,6 +358,7 @@
GPB_FINAL @interface $classname$ : GPBMessage
$message_properties$
+ $wkt_extra$
@end
)objc");
printer->Emit("\n");
diff --git a/src/google/protobuf/compiler/parser.cc b/src/google/protobuf/compiler/parser.cc
index 44ecc5d..ae6be8f 100644
--- a/src/google/protobuf/compiler/parser.cc
+++ b/src/google/protobuf/compiler/parser.cc
@@ -740,7 +740,9 @@
if (has_edition) {
if (!Edition_Parse(absl::StrCat("EDITION_", syntax), &edition_) ||
- edition_ < Edition::EDITION_2023) {
+ edition_ == Edition::EDITION_PROTO2 ||
+ edition_ == Edition::EDITION_PROTO3 ||
+ edition_ == Edition::EDITION_UNKNOWN) {
RecordError(syntax_token.line, syntax_token.column, [&] {
return absl::StrCat("Unknown edition \"", syntax, "\".");
});
diff --git a/src/google/protobuf/compiler/parser_unittest.cc b/src/google/protobuf/compiler/parser_unittest.cc
index fca3584..89e04d9 100644
--- a/src/google/protobuf/compiler/parser_unittest.cc
+++ b/src/google/protobuf/compiler/parser_unittest.cc
@@ -118,6 +118,7 @@
// We don't cover SourceCodeInfo in these tests.
actual.clear_source_code_info();
+
// Parse the ASCII representation in order to canonicalize it. We could
// just compare directly to actual.DebugString(), but that would require
// that the caller precisely match the formatting that DebugString()
diff --git a/src/google/protobuf/compiler/php/BUILD.bazel b/src/google/protobuf/compiler/php/BUILD.bazel
index 2a9746d..5bddf38 100644
--- a/src/google/protobuf/compiler/php/BUILD.bazel
+++ b/src/google/protobuf/compiler/php/BUILD.bazel
@@ -32,7 +32,6 @@
],
deps = [
":names",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler:code_generator",
"//src/google/protobuf/compiler:retention",
@@ -40,6 +39,18 @@
],
)
+cc_test(
+ name = "generator_unittest",
+ srcs = ["generator_unittest.cc"],
+ deps = [
+ ":php",
+ "//:protobuf",
+ "//src/google/protobuf/compiler:command_line_interface_tester",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
################################################################################
# Distribution packaging
################################################################################
diff --git a/src/google/protobuf/compiler/php/generator_unittest.cc b/src/google/protobuf/compiler/php/generator_unittest.cc
new file mode 100644
index 0000000..e53e1d6
--- /dev/null
+++ b/src/google/protobuf/compiler/php/generator_unittest.cc
@@ -0,0 +1,112 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include <memory>
+
+#include "google/protobuf/descriptor.pb.h"
+#include <gtest/gtest.h>
+#include "google/protobuf/compiler/command_line_interface_tester.h"
+#include "google/protobuf/compiler/php/php_generator.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace php {
+namespace {
+
+class PhpGeneratorTest : public CommandLineInterfaceTester {
+ protected:
+ PhpGeneratorTest() {
+ RegisterGenerator("--php_out", "--php_opt", std::make_unique<Generator>(),
+ "PHP test generator");
+
+ // Generate built-in protos.
+ CreateTempFile(
+ "google/protobuf/descriptor.proto",
+ google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
+ }
+};
+
+TEST_F(PhpGeneratorTest, Basic) {
+ CreateTempFile("foo.proto",
+ R"schema(
+ syntax = "proto3";
+ message Foo {
+ optional int32 bar = 1;
+ int32 baz = 2;
+ })schema");
+
+ RunProtoc(
+ "protocol_compiler --proto_path=$tmpdir --php_out=$tmpdir foo.proto");
+
+ ExpectNoErrors();
+}
+
+TEST_F(PhpGeneratorTest, Proto2File) {
+ CreateTempFile("foo.proto",
+ R"schema(
+ syntax = "proto2";
+ message Foo {
+ optional int32 bar = 1;
+ })schema");
+
+ RunProtoc(
+ "protocol_compiler --proto_path=$tmpdir --php_out=$tmpdir foo.proto");
+
+ ExpectNoErrors();
+}
+
+TEST_F(PhpGeneratorTest, RequiredFieldError) {
+ CreateTempFile("foo.proto",
+ R"schema(
+ syntax = "proto2";
+ message FooBar {
+ required int32 foo_message = 1;
+ })schema");
+
+ RunProtoc(
+ "protocol_compiler --proto_path=$tmpdir --php_out=$tmpdir foo.proto");
+
+ ExpectErrorSubstring(
+ "Can't generate PHP code for required field FooBar.foo_message");
+}
+
+TEST_F(PhpGeneratorTest, GroupFieldError) {
+ CreateTempFile("foo.proto",
+ R"schema(
+ syntax = "proto2";
+ message Foo {
+ optional group Bar = 1 {
+ optional int32 baz = 1;
+ };
+ })schema");
+
+ RunProtoc(
+ "protocol_compiler --proto_path=$tmpdir --php_out=$tmpdir foo.proto");
+
+ ExpectErrorSubstring("Can't generate PHP code for group field Foo.bar");
+}
+
+TEST_F(PhpGeneratorTest, ClosedEnumError) {
+ CreateTempFile("foo.proto",
+ R"schema(
+ syntax = "proto2";
+ enum Foo {
+ BAR = 0;
+ })schema");
+
+ RunProtoc(
+ "protocol_compiler --proto_path=$tmpdir --php_out=$tmpdir foo.proto");
+
+ ExpectErrorSubstring("Can't generate PHP code for closed enum Foo");
+}
+
+} // namespace
+} // namespace php
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/compiler/php/php_generator.cc b/src/google/protobuf/compiler/php/php_generator.cc
index 433474c..0ef09ec 100644
--- a/src/google/protobuf/compiler/php/php_generator.cc
+++ b/src/google/protobuf/compiler/php/php_generator.cc
@@ -12,7 +12,6 @@
#include <string>
#include <vector>
-#include "google/protobuf/compiler/code_generator.h"
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/log/absl_log.h"
@@ -22,10 +21,11 @@
#include "absl/strings/str_replace.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
+#include "google/protobuf/compiler/code_generator.h"
+#include "google/protobuf/compiler/php/names.h"
#include "google/protobuf/compiler/retention.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/io/zero_copy_stream.h"
@@ -87,10 +87,6 @@
const Options& options);
void GenerateEnumValueDocComment(io::Printer* printer,
const EnumValueDescriptor* value);
-void GenerateServiceDocComment(io::Printer* printer,
- const ServiceDescriptor* service);
-void GenerateServiceMethodDocComment(io::Printer* printer,
- const MethodDescriptor* method);
template <typename DescriptorType>
std::string DescriptorFullName(const DescriptorType* desc, bool is_internal) {
@@ -345,17 +341,6 @@
return absl::StrCat(desc->name(), ".php");
}
-std::string GeneratedServiceFileName(const ServiceDescriptor* service,
- const Options& options) {
- std::string result = FullClassName(service, options);
- for (int i = 0; i < result.size(); i++) {
- if (result[i] == '\\') {
- result[i] = '/';
- }
- }
- return absl::StrCat(result, "Interface", ".php");
-}
-
std::string IntToString(int32_t value) {
std::ostringstream os;
os << value;
@@ -537,8 +522,20 @@
printer->Outdent();
}
-void GenerateField(const FieldDescriptor* field, io::Printer* printer,
- const Options& options) {
+bool GenerateField(const FieldDescriptor* field, io::Printer* printer,
+ const Options& options, std::string* error) {
+ if (field->is_required()) {
+ *error = absl::StrCat("Can't generate PHP code for required field ",
+ field->full_name(), ".\n");
+ return false;
+ }
+ if (field->type() == FieldDescriptor::TYPE_GROUP) {
+ *error = absl::StrCat("Can't generate PHP code for group field ",
+ field->full_name(),
+ ". Use regular message encoding instead.\n");
+ return false;
+ }
+
if (field->is_repeated()) {
GenerateFieldDocComment(printer, field, options, kFieldProperty);
printer->Print(
@@ -546,7 +543,7 @@
"name", field->name());
} else if (field->real_containing_oneof()) {
// Oneof fields are handled by GenerateOneofField.
- return;
+ return true;
} else {
std::string initial_value =
field->has_presence() ? "null" : DefaultForField(field);
@@ -556,6 +553,7 @@
"name", field->name(),
"initial_value", initial_value);
}
+ return true;
}
void GenerateOneofField(const OneofDescriptor* oneof, io::Printer* printer) {
@@ -783,16 +781,6 @@
Outdent(printer);
}
-void GenerateServiceMethod(const MethodDescriptor* method,
- io::Printer* printer) {
- printer->Print(
- "public function ^camel_name^(\\^request_name^ $request);\n\n",
- "camel_name", UnderscoresToCamelCase(method->name(), false),
- "request_name", FullClassName(
- method->input_type(), false)
- );
-}
-
void GenerateMessageToPool(absl::string_view name_prefix,
const Descriptor* message, io::Printer* printer) {
// Don't generate MapEntry messages -- we use the PHP extension's native
@@ -1270,9 +1258,17 @@
"fullname", classname);
}
-void GenerateEnumFile(const FileDescriptor* file, const EnumDescriptor* en,
+bool GenerateEnumFile(const FileDescriptor* file, const EnumDescriptor* en,
const Options& options,
- GeneratorContext* generator_context) {
+ GeneratorContext* generator_context, std::string* error) {
+ if (en->is_closed()) {
+ *error = absl::StrCat("Can't generate PHP code for closed enum ",
+ en->full_name(),
+ ". Please use either proto3 or editions without "
+ "`enum_type = CLOSED`.\n");
+ return false;
+ }
+
std::string filename = GeneratedClassFileName(en, options);
std::unique_ptr<io::ZeroCopyOutputStream> output(
generator_context->Open(filename));
@@ -1403,15 +1399,18 @@
"old", en->name());
LegacyReadOnlyGenerateClassFile(file, en, options, generator_context);
}
+
+ return true;
}
-void GenerateMessageFile(const FileDescriptor* file, const Descriptor* message,
+bool GenerateMessageFile(const FileDescriptor* file, const Descriptor* message,
const Options& options,
- GeneratorContext* generator_context) {
+ GeneratorContext* generator_context,
+ std::string* error) {
// Don't generate MapEntry messages -- we use the PHP extension's native
// support for map fields instead.
if (message->options().map_entry()) {
- return;
+ return true;
}
std::string filename = GeneratedClassFileName(message, options);
@@ -1461,7 +1460,9 @@
// Field and oneof definitions.
for (int i = 0; i < message->field_count(); i++) {
const FieldDescriptor* field = message->field(i);
- GenerateField(field, &printer, options);
+ if (!GenerateField(field, &printer, options, error)) {
+ return false;
+ }
}
for (int i = 0; i < message->real_oneof_decl_count(); i++) {
const OneofDescriptor* oneof = message->oneof_decl(i);
@@ -1533,77 +1534,38 @@
// Nested messages and enums.
for (int i = 0; i < message->nested_type_count(); i++) {
- GenerateMessageFile(file, message->nested_type(i), options,
- generator_context);
+ if (!GenerateMessageFile(file, message->nested_type(i), options,
+ generator_context, error)) {
+ return false;
+ }
}
for (int i = 0; i < message->enum_type_count(); i++) {
- GenerateEnumFile(file, message->enum_type(i), options, generator_context);
+ if (!GenerateEnumFile(file, message->enum_type(i), options,
+ generator_context, error)) {
+ return false;
+ }
}
+ return true;
}
-void GenerateServiceFile(
- const FileDescriptor* file, const ServiceDescriptor* service,
- const Options& options, GeneratorContext* generator_context) {
- std::string filename = GeneratedServiceFileName(service, options);
- std::unique_ptr<io::ZeroCopyOutputStream> output(
- generator_context->Open(filename));
- io::Printer printer(output.get(), '^');
-
- GenerateHead(file, &printer);
-
- std::string fullname = FilenameToClassname(filename);
- int lastindex = fullname.find_last_of('\\');
-
- if (!file->options().php_namespace().empty() ||
- (!file->options().has_php_namespace() && !file->package().empty()) ||
- lastindex != std::string::npos) {
- printer.Print(
- "namespace ^name^;\n\n",
- "name", fullname.substr(0, lastindex));
- }
-
- GenerateServiceDocComment(&printer, service);
-
- if (lastindex != std::string::npos) {
- printer.Print(
- "interface ^name^\n"
- "{\n",
- "name", fullname.substr(lastindex + 1));
- } else {
- printer.Print(
- "interface ^name^\n"
- "{\n",
- "name", fullname);
- }
-
- Indent(&printer);
-
- for (int i = 0; i < service->method_count(); i++) {
- const MethodDescriptor* method = service->method(i);
- GenerateServiceMethodDocComment(&printer, method);
- GenerateServiceMethod(method, &printer);
- }
-
- Outdent(&printer);
- printer.Print("}\n\n");
-}
-
-void GenerateFile(const FileDescriptor* file, const Options& options,
- GeneratorContext* generator_context) {
+bool GenerateFile(const FileDescriptor* file, const Options& options,
+ GeneratorContext* generator_context, std::string* error) {
GenerateMetadataFile(file, options, generator_context);
for (int i = 0; i < file->message_type_count(); i++) {
- GenerateMessageFile(file, file->message_type(i), options,
- generator_context);
- }
- for (int i = 0; i < file->enum_type_count(); i++) {
- GenerateEnumFile(file, file->enum_type(i), options, generator_context);
- }
- if (file->options().php_generic_services()) {
- for (int i = 0; i < file->service_count(); i++) {
- GenerateServiceFile(file, file->service(i), options, generator_context);
+ if (!GenerateMessageFile(file, file->message_type(i), options,
+ generator_context, error)) {
+ return false;
}
}
+ for (int i = 0; i < file->enum_type_count(); i++) {
+ if (!GenerateEnumFile(file, file->enum_type(i), options, generator_context,
+ error)) {
+ return false;
+ }
+ }
+
+ return true;
}
static std::string EscapePhpdoc(absl::string_view input) {
@@ -1752,19 +1714,6 @@
printer->Print(" */\n");
}
-void GenerateServiceDocComment(io::Printer* printer,
- const ServiceDescriptor* service) {
- printer->Print("/**\n");
- if (service->options().deprecated()) {
- printer->Print(" * @deprecated\n");
- }
- GenerateDocCommentBody(printer, service);
- printer->Print(
- " * Protobuf type <code>^fullname^</code>\n"
- " */\n",
- "fullname", EscapePhpdoc(service->full_name()));
-}
-
void GenerateFieldDocComment(io::Printer* printer, const FieldDescriptor* field,
const Options& options, int function_type) {
// In theory we should have slightly different comments for setters, getters,
@@ -1855,26 +1804,6 @@
"def", EscapePhpdoc(FirstLineOf(value->DebugString())));
}
-void GenerateServiceMethodDocComment(io::Printer* printer,
- const MethodDescriptor* method) {
- printer->Print("/**\n");
- GenerateDocCommentBody(printer, method);
- if (method->options().deprecated()) {
- printer->Print(" * @deprecated\n");
- }
- printer->Print(
- " * Method <code>^method_name^</code>\n"
- " *\n",
- "method_name", EscapePhpdoc(UnderscoresToCamelCase(method->name(), false)));
- printer->Print(
- " * @param \\^input_type^ $request\n",
- "input_type", EscapePhpdoc(FullClassName(method->input_type(), false)));
- printer->Print(
- " * @return \\^return_type^\n"
- " */\n",
- "return_type", EscapePhpdoc(FullClassName(method->output_type(), false)));
-}
-
std::string FilenameCName(const FileDescriptor* file) {
return absl::StrReplaceAll(file->name(), {{".", "_"}, {"/", "_"}});
}
@@ -2283,18 +2212,7 @@
return false;
}
- if (!options.is_descriptor &&
- FileDescriptorLegacy(file).syntax() !=
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO3) {
- *error =
- "Can only generate PHP code for proto3 .proto files.\n"
- "Please add 'syntax = \"proto3\";' to the top of your .proto file.\n";
- return false;
- }
-
- GenerateFile(file, options, generator_context);
-
- return true;
+ return GenerateFile(file, options, generator_context, error);
}
bool Generator::GenerateAll(const std::vector<const FileDescriptor*>& files,
diff --git a/src/google/protobuf/compiler/php/php_generator.h b/src/google/protobuf/compiler/php/php_generator.h
index 8a04524..a270b20 100644
--- a/src/google/protobuf/compiler/php/php_generator.h
+++ b/src/google/protobuf/compiler/php/php_generator.h
@@ -8,12 +8,12 @@
#ifndef GOOGLE_PROTOBUF_COMPILER_PHP_GENERATOR_H__
#define GOOGLE_PROTOBUF_COMPILER_PHP_GENERATOR_H__
+#include <cstdint>
+#include <string>
+
#include "google/protobuf/compiler/code_generator.h"
#include "google/protobuf/compiler/php/names.h"
#include "google/protobuf/descriptor.h"
-
-#include <string>
-
#include "google/protobuf/port_def.inc"
namespace google {
diff --git a/src/google/protobuf/compiler/plugin.cc b/src/google/protobuf/compiler/plugin.cc
index 166e1c0..7c498e2 100644
--- a/src/google/protobuf/compiler/plugin.cc
+++ b/src/google/protobuf/compiler/plugin.cc
@@ -10,6 +10,7 @@
#include "google/protobuf/compiler/plugin.h"
#include <iostream>
+#include <utility>
#include <vector>
#ifdef _WIN32
@@ -18,6 +19,8 @@
#include <unistd.h>
#endif
+#include "absl/log/absl_check.h"
+#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "google/protobuf/compiler/code_generator.h"
@@ -102,7 +105,8 @@
defaults.status().message());
return false;
}
- pool.SetFeatureSetDefaults(*defaults);
+ absl::Status status = pool.SetFeatureSetDefaults(std::move(defaults).value());
+ ABSL_CHECK(status.ok()) << status.message();
for (int i = 0; i < request.proto_file_size(); i++) {
const FileDescriptor* file = pool.BuildFile(request.proto_file(i));
@@ -133,6 +137,10 @@
&context, &error);
response->set_supported_features(generator.GetSupportedFeatures());
+ response->set_minimum_edition(
+ static_cast<int>(generator.GetMinimumEdition()));
+ response->set_maximum_edition(
+ static_cast<int>(generator.GetMaximumEdition()));
if (!succeeded && error.empty()) {
error =
diff --git a/src/google/protobuf/compiler/plugin.pb.cc b/src/google/protobuf/compiler/plugin.pb.cc
index 84e1a72..788f52f 100644
--- a/src/google/protobuf/compiler/plugin.pb.cc
+++ b/src/google/protobuf/compiler/plugin.pb.cc
@@ -84,7 +84,9 @@
error_(
&::google::protobuf::internal::fixed_address_empty_string,
::_pbi::ConstantInitialized()),
- supported_features_{::uint64_t{0u}} {}
+ supported_features_{::uint64_t{0u}},
+ minimum_edition_{0},
+ maximum_edition_{0} {}
template <typename>
PROTOBUF_CONSTEXPR CodeGeneratorResponse::CodeGeneratorResponse(::_pbi::ConstantInitialized)
@@ -194,9 +196,13 @@
~0u, // no sizeof(Split)
PROTOBUF_FIELD_OFFSET(::google::protobuf::compiler::CodeGeneratorResponse, _impl_.error_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::compiler::CodeGeneratorResponse, _impl_.supported_features_),
+ PROTOBUF_FIELD_OFFSET(::google::protobuf::compiler::CodeGeneratorResponse, _impl_.minimum_edition_),
+ PROTOBUF_FIELD_OFFSET(::google::protobuf::compiler::CodeGeneratorResponse, _impl_.maximum_edition_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::compiler::CodeGeneratorResponse, _impl_.file_),
0,
1,
+ 2,
+ 3,
~0u,
};
@@ -205,7 +211,7 @@
{0, 12, -1, sizeof(::google::protobuf::compiler::Version)},
{16, 29, -1, sizeof(::google::protobuf::compiler::CodeGeneratorRequest)},
{34, 46, -1, sizeof(::google::protobuf::compiler::CodeGeneratorResponse_File)},
- {50, 61, -1, sizeof(::google::protobuf::compiler::CodeGeneratorResponse)},
+ {50, 63, -1, sizeof(::google::protobuf::compiler::CodeGeneratorResponse)},
};
static const ::_pb::Message* const file_default_instances[] = {
@@ -226,19 +232,20 @@
"FileDescriptorProto\022E\n\027source_file_descr"
"iptors\030\021 \003(\0132$.google.protobuf.FileDescr"
"iptorProto\022;\n\020compiler_version\030\003 \001(\0132!.g"
- "oogle.protobuf.compiler.Version\"\340\002\n\025Code"
+ "oogle.protobuf.compiler.Version\"\222\003\n\025Code"
"GeneratorResponse\022\r\n\005error\030\001 \001(\t\022\032\n\022supp"
- "orted_features\030\002 \001(\004\022B\n\004file\030\017 \003(\01324.goo"
- "gle.protobuf.compiler.CodeGeneratorRespo"
- "nse.File\032\177\n\004File\022\014\n\004name\030\001 \001(\t\022\027\n\017insert"
- "ion_point\030\002 \001(\t\022\017\n\007content\030\017 \001(\t\022\?\n\023gene"
- "rated_code_info\030\020 \001(\0132\".google.protobuf."
- "GeneratedCodeInfo\"W\n\007Feature\022\020\n\014FEATURE_"
- "NONE\020\000\022\033\n\027FEATURE_PROTO3_OPTIONAL\020\001\022\035\n\031F"
- "EATURE_SUPPORTS_EDITIONS\020\002Br\n\034com.google"
- ".protobuf.compilerB\014PluginProtosZ)google"
- ".golang.org/protobuf/types/pluginpb\252\002\030Go"
- "ogle.Protobuf.Compiler"
+ "orted_features\030\002 \001(\004\022\027\n\017minimum_edition\030"
+ "\003 \001(\005\022\027\n\017maximum_edition\030\004 \001(\005\022B\n\004file\030\017"
+ " \003(\01324.google.protobuf.compiler.CodeGene"
+ "ratorResponse.File\032\177\n\004File\022\014\n\004name\030\001 \001(\t"
+ "\022\027\n\017insertion_point\030\002 \001(\t\022\017\n\007content\030\017 \001"
+ "(\t\022\?\n\023generated_code_info\030\020 \001(\0132\".google"
+ ".protobuf.GeneratedCodeInfo\"W\n\007Feature\022\020"
+ "\n\014FEATURE_NONE\020\000\022\033\n\027FEATURE_PROTO3_OPTIO"
+ "NAL\020\001\022\035\n\031FEATURE_SUPPORTS_EDITIONS\020\002Br\n\034"
+ "com.google.protobuf.compilerB\014PluginProt"
+ "osZ)google.golang.org/protobuf/types/plu"
+ "ginpb\252\002\030Google.Protobuf.Compiler"
};
static const ::_pbi::DescriptorTable* const descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_deps[1] =
{
@@ -248,7 +255,7 @@
const ::_pbi::DescriptorTable descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto = {
false,
false,
- 902,
+ 952,
descriptor_table_protodef_google_2fprotobuf_2fcompiler_2fplugin_2eproto,
"google/protobuf/compiler/plugin.proto",
&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
@@ -277,9 +284,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fcompiler_2fplugin_2eproto(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto);
namespace google {
namespace protobuf {
namespace compiler {
@@ -311,18 +315,6 @@
using HasBits = decltype(std::declval<Version>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(Version, _impl_._has_bits_);
- static void set_has_major(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_minor(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_patch(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_suffix(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
Version::Version(::google::protobuf::Arena* arena)
@@ -384,12 +376,15 @@
const ::google::protobuf::MessageLite::ClassData*
Version::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Version::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Version, _impl_._cached_size_),
+ false,
+ },
+ &Version::MergeImpl,
+ &Version::kDescriptorMethods,
};
return &_data_;
}
@@ -559,7 +554,7 @@
}
-void Version::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Version::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Version*>(&to_msg);
auto& from = static_cast<const Version&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.Version)
@@ -581,8 +576,8 @@
if (cached_has_bits & 0x00000008u) {
_this->_impl_.patch_ = from._impl_.patch_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -613,9 +608,9 @@
}
::google::protobuf::Metadata Version::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[0]);
}
// ===================================================================
@@ -624,18 +619,8 @@
using HasBits = decltype(std::declval<CodeGeneratorRequest>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(CodeGeneratorRequest, _impl_._has_bits_);
- static void set_has_parameter(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static const ::google::protobuf::compiler::Version& compiler_version(const CodeGeneratorRequest* msg);
- static void set_has_compiler_version(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::compiler::Version& CodeGeneratorRequest::_Internal::compiler_version(const CodeGeneratorRequest* msg) {
- return *msg->_impl_.compiler_version_;
-}
void CodeGeneratorRequest::clear_proto_file() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
_impl_.proto_file_.Clear();
@@ -702,12 +687,15 @@
const ::google::protobuf::MessageLite::ClassData*
CodeGeneratorRequest::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- CodeGeneratorRequest::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(CodeGeneratorRequest, _impl_._cached_size_),
+ false,
+ },
+ &CodeGeneratorRequest::MergeImpl,
+ &CodeGeneratorRequest::kDescriptorMethods,
};
return &_data_;
}
@@ -833,8 +821,7 @@
// optional .google.protobuf.compiler.Version compiler_version = 3;
if (cached_has_bits & 0x00000002u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 3, _Internal::compiler_version(this),
- _Internal::compiler_version(this).GetCachedSize(), target, stream);
+ 3, *_impl_.compiler_version_, _impl_.compiler_version_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.FileDescriptorProto proto_file = 15;
@@ -907,7 +894,7 @@
}
-void CodeGeneratorRequest::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void CodeGeneratorRequest::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<CodeGeneratorRequest*>(&to_msg);
auto& from = static_cast<const CodeGeneratorRequest&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -934,9 +921,9 @@
} else {
_this->_impl_.compiler_version_->MergeFrom(*from._impl_.compiler_version_);
}
- _this->_impl_._has_bits_[0] |= 0x00000002u;
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -969,9 +956,9 @@
}
::google::protobuf::Metadata CodeGeneratorRequest::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[1]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[1]);
}
// ===================================================================
@@ -980,24 +967,8 @@
using HasBits = decltype(std::declval<CodeGeneratorResponse_File>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse_File, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_insertion_point(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_content(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static const ::google::protobuf::GeneratedCodeInfo& generated_code_info(const CodeGeneratorResponse_File* msg);
- static void set_has_generated_code_info(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
};
-const ::google::protobuf::GeneratedCodeInfo& CodeGeneratorResponse_File::_Internal::generated_code_info(const CodeGeneratorResponse_File* msg) {
- return *msg->_impl_.generated_code_info_;
-}
void CodeGeneratorResponse_File::clear_generated_code_info() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
if (_impl_.generated_code_info_ != nullptr) _impl_.generated_code_info_->Clear();
@@ -1061,12 +1032,15 @@
const ::google::protobuf::MessageLite::ClassData*
CodeGeneratorResponse_File::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- CodeGeneratorResponse_File::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse_File, _impl_._cached_size_),
+ false,
+ },
+ &CodeGeneratorResponse_File::MergeImpl,
+ &CodeGeneratorResponse_File::kDescriptorMethods,
};
return &_data_;
}
@@ -1195,8 +1169,7 @@
// optional .google.protobuf.GeneratedCodeInfo generated_code_info = 16;
if (cached_has_bits & 0x00000008u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 16, _Internal::generated_code_info(this),
- _Internal::generated_code_info(this).GetCachedSize(), target, stream);
+ 16, *_impl_.generated_code_info_, _impl_.generated_code_info_->GetCachedSize(), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -1247,7 +1220,7 @@
}
-void CodeGeneratorResponse_File::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void CodeGeneratorResponse_File::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<CodeGeneratorResponse_File*>(&to_msg);
auto& from = static_cast<const CodeGeneratorResponse_File&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -1275,9 +1248,9 @@
} else {
_this->_impl_.generated_code_info_->MergeFrom(*from._impl_.generated_code_info_);
}
- _this->_impl_._has_bits_[0] |= 0x00000008u;
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1305,9 +1278,9 @@
}
::google::protobuf::Metadata CodeGeneratorResponse_File::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[2]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[2]);
}
// ===================================================================
@@ -1316,12 +1289,6 @@
using HasBits = decltype(std::declval<CodeGeneratorResponse>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_._has_bits_);
- static void set_has_error(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_supported_features(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
CodeGeneratorResponse::CodeGeneratorResponse(::google::protobuf::Arena* arena)
@@ -1346,7 +1313,13 @@
_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(
from._internal_metadata_);
new (&_impl_) Impl_(internal_visibility(), arena, from._impl_);
- _impl_.supported_features_ = from._impl_.supported_features_;
+ ::memcpy(reinterpret_cast<char *>(&_impl_) +
+ offsetof(Impl_, supported_features_),
+ reinterpret_cast<const char *>(&from._impl_) +
+ offsetof(Impl_, supported_features_),
+ offsetof(Impl_, maximum_edition_) -
+ offsetof(Impl_, supported_features_) +
+ sizeof(Impl_::maximum_edition_));
// @@protoc_insertion_point(copy_constructor:google.protobuf.compiler.CodeGeneratorResponse)
}
@@ -1359,7 +1332,12 @@
inline void CodeGeneratorResponse::SharedCtor(::_pb::Arena* arena) {
new (&_impl_) Impl_(internal_visibility(), arena);
- _impl_.supported_features_ = {};
+ ::memset(reinterpret_cast<char *>(&_impl_) +
+ offsetof(Impl_, supported_features_),
+ 0,
+ offsetof(Impl_, maximum_edition_) -
+ offsetof(Impl_, supported_features_) +
+ sizeof(Impl_::maximum_edition_));
}
CodeGeneratorResponse::~CodeGeneratorResponse() {
// @@protoc_insertion_point(destructor:google.protobuf.compiler.CodeGeneratorResponse)
@@ -1374,12 +1352,15 @@
const ::google::protobuf::MessageLite::ClassData*
CodeGeneratorResponse::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- CodeGeneratorResponse::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_._cached_size_),
+ false,
+ },
+ &CodeGeneratorResponse::MergeImpl,
+ &CodeGeneratorResponse::kDescriptorMethods,
};
return &_data_;
}
@@ -1395,7 +1376,11 @@
if (cached_has_bits & 0x00000001u) {
_impl_.error_.ClearNonDefaultToEmpty();
}
- _impl_.supported_features_ = ::uint64_t{0u};
+ if (cached_has_bits & 0x0000000eu) {
+ ::memset(&_impl_.supported_features_, 0, static_cast<::size_t>(
+ reinterpret_cast<char*>(&_impl_.maximum_edition_) -
+ reinterpret_cast<char*>(&_impl_.supported_features_)) + sizeof(_impl_.maximum_edition_));
+ }
_impl_._has_bits_.Clear();
_internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
}
@@ -1408,15 +1393,15 @@
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
-const ::_pbi::TcParseTable<2, 3, 1, 60, 2> CodeGeneratorResponse::_table_ = {
+const ::_pbi::TcParseTable<3, 5, 1, 60, 2> CodeGeneratorResponse::_table_ = {
{
PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_._has_bits_),
0, // no _extensions_
- 15, 24, // max_field_number, fast_idx_mask
+ 15, 56, // max_field_number, fast_idx_mask
offsetof(decltype(_table_), field_lookup_table),
- 4294950908, // skipmap
+ 4294950896, // skipmap
offsetof(decltype(_table_), field_entries),
- 3, // num_field_entries
+ 5, // num_field_entries
1, // num_aux_entries
offsetof(decltype(_table_), aux_entries),
&_CodeGeneratorResponse_default_instance_._instance,
@@ -1432,6 +1417,14 @@
// optional uint64 supported_features = 2;
{::_pbi::TcParser::SingularVarintNoZag1<::uint64_t, offsetof(CodeGeneratorResponse, _impl_.supported_features_), 1>(),
{16, 1, 0, PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.supported_features_)}},
+ // optional int32 minimum_edition = 3;
+ {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(CodeGeneratorResponse, _impl_.minimum_edition_), 2>(),
+ {24, 2, 0, PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.minimum_edition_)}},
+ // optional int32 maximum_edition = 4;
+ {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(CodeGeneratorResponse, _impl_.maximum_edition_), 3>(),
+ {32, 3, 0, PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.maximum_edition_)}},
+ {::_pbi::TcParser::MiniParse, {}},
+ {::_pbi::TcParser::MiniParse, {}},
// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15;
{::_pbi::TcParser::FastMtR1,
{122, 63, 0, PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.file_)}},
@@ -1444,6 +1437,12 @@
// optional uint64 supported_features = 2;
{PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.supported_features_), _Internal::kHasBitsOffset + 1, 0,
(0 | ::_fl::kFcOptional | ::_fl::kUInt64)},
+ // optional int32 minimum_edition = 3;
+ {PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.minimum_edition_), _Internal::kHasBitsOffset + 2, 0,
+ (0 | ::_fl::kFcOptional | ::_fl::kInt32)},
+ // optional int32 maximum_edition = 4;
+ {PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.maximum_edition_), _Internal::kHasBitsOffset + 3, 0,
+ (0 | ::_fl::kFcOptional | ::_fl::kInt32)},
// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15;
{PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.file_), -1, 0,
(0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
@@ -1479,6 +1478,20 @@
2, this->_internal_supported_features(), target);
}
+ // optional int32 minimum_edition = 3;
+ if (cached_has_bits & 0x00000004u) {
+ target = ::google::protobuf::internal::WireFormatLite::
+ WriteInt32ToArrayWithField<3>(
+ stream, this->_internal_minimum_edition(), target);
+ }
+
+ // optional int32 maximum_edition = 4;
+ if (cached_has_bits & 0x00000008u) {
+ target = ::google::protobuf::internal::WireFormatLite::
+ WriteInt32ToArrayWithField<4>(
+ stream, this->_internal_maximum_edition(), target);
+ }
+
// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15;
for (unsigned i = 0,
n = static_cast<unsigned>(this->_internal_file_size()); i < n; i++) {
@@ -1511,7 +1524,7 @@
::google::protobuf::internal::WireFormatLite::MessageSize(msg);
}
cached_has_bits = _impl_._has_bits_[0];
- if (cached_has_bits & 0x00000003u) {
+ if (cached_has_bits & 0x0000000fu) {
// optional string error = 1;
if (cached_has_bits & 0x00000001u) {
total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
@@ -1524,12 +1537,24 @@
this->_internal_supported_features());
}
+ // optional int32 minimum_edition = 3;
+ if (cached_has_bits & 0x00000004u) {
+ total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
+ this->_internal_minimum_edition());
+ }
+
+ // optional int32 maximum_edition = 4;
+ if (cached_has_bits & 0x00000008u) {
+ total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
+ this->_internal_maximum_edition());
+ }
+
}
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
-void CodeGeneratorResponse::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void CodeGeneratorResponse::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<CodeGeneratorResponse*>(&to_msg);
auto& from = static_cast<const CodeGeneratorResponse&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.CodeGeneratorResponse)
@@ -1540,15 +1565,21 @@
_this->_internal_mutable_file()->MergeFrom(
from._internal_file());
cached_has_bits = from._impl_._has_bits_[0];
- if (cached_has_bits & 0x00000003u) {
+ if (cached_has_bits & 0x0000000fu) {
if (cached_has_bits & 0x00000001u) {
_this->_internal_set_error(from._internal_error());
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.supported_features_ = from._impl_.supported_features_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
+ if (cached_has_bits & 0x00000004u) {
+ _this->_impl_.minimum_edition_ = from._impl_.minimum_edition_;
+ }
+ if (cached_has_bits & 0x00000008u) {
+ _this->_impl_.maximum_edition_ = from._impl_.maximum_edition_;
+ }
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1571,13 +1602,18 @@
swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
_impl_.file_.InternalSwap(&other->_impl_.file_);
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.error_, &other->_impl_.error_, arena);
- swap(_impl_.supported_features_, other->_impl_.supported_features_);
+ ::google::protobuf::internal::memswap<
+ PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.maximum_edition_)
+ + sizeof(CodeGeneratorResponse::_impl_.maximum_edition_)
+ - PROTOBUF_FIELD_OFFSET(CodeGeneratorResponse, _impl_.supported_features_)>(
+ reinterpret_cast<char*>(&_impl_.supported_features_),
+ reinterpret_cast<char*>(&other->_impl_.supported_features_));
}
::google::protobuf::Metadata CodeGeneratorResponse::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[3]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fcompiler_2fplugin_2eproto[3]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace compiler
@@ -1588,4 +1624,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/compiler/plugin.pb.h b/src/google/protobuf/compiler/plugin.pb.h
index 149e78f..49252c3 100644
--- a/src/google/protobuf/compiler/plugin.pb.h
+++ b/src/google/protobuf/compiler/plugin.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -121,21 +115,18 @@
// -------------------------------------------------------------------
-class PROTOC_EXPORT Version final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.Version) */ {
+class PROTOC_EXPORT Version final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.compiler.Version) */ {
public:
inline Version() : Version(nullptr) {}
~Version() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Version(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Version(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Version(const Version& from)
- : Version(nullptr, from) {}
- Version(Version&& from) noexcept
- : Version() {
- *this = ::std::move(from);
- }
-
+ inline Version(const Version& from) : Version(nullptr, from) {}
+ inline Version(Version&& from) noexcept
+ : Version(nullptr, std::move(from)) {}
inline Version& operator=(const Version& from) {
CopyFrom(from);
return *this;
@@ -143,9 +134,9 @@
inline Version& operator=(Version&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -177,22 +168,17 @@
}
static inline const Version* internal_default_instance() {
return reinterpret_cast<const Version*>(
- &_Version_default_instance_);
+ &_Version_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(Version& a, Version& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(Version& a, Version& b) { a.Swap(&b); }
inline void Swap(Version* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -212,11 +198,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Version& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Version& from) {
- Version::MergeImpl(*this, from);
- }
+ void MergeFrom(const Version& from) { Version::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -224,31 +212,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Version* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.compiler.Version";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.compiler.Version"; }
+
+ protected:
explicit Version(::google::protobuf::Arena* arena);
Version(::google::protobuf::Arena* arena, const Version& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Version(::google::protobuf::Arena* arena, Version&& from) noexcept
+ : Version(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kSuffixFieldNumber = 4,
kMajorFieldNumber = 1,
@@ -308,7 +298,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.compiler.Version)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 4, 0,
@@ -320,14 +309,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOC_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr suffix_;
@@ -338,23 +326,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOC_EXPORT CodeGeneratorResponse_File final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorResponse.File) */ {
+class PROTOC_EXPORT CodeGeneratorResponse_File final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorResponse.File) */ {
public:
inline CodeGeneratorResponse_File() : CodeGeneratorResponse_File(nullptr) {}
~CodeGeneratorResponse_File() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR CodeGeneratorResponse_File(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR CodeGeneratorResponse_File(
+ ::google::protobuf::internal::ConstantInitialized);
- inline CodeGeneratorResponse_File(const CodeGeneratorResponse_File& from)
- : CodeGeneratorResponse_File(nullptr, from) {}
- CodeGeneratorResponse_File(CodeGeneratorResponse_File&& from) noexcept
- : CodeGeneratorResponse_File() {
- *this = ::std::move(from);
- }
-
+ inline CodeGeneratorResponse_File(const CodeGeneratorResponse_File& from) : CodeGeneratorResponse_File(nullptr, from) {}
+ inline CodeGeneratorResponse_File(CodeGeneratorResponse_File&& from) noexcept
+ : CodeGeneratorResponse_File(nullptr, std::move(from)) {}
inline CodeGeneratorResponse_File& operator=(const CodeGeneratorResponse_File& from) {
CopyFrom(from);
return *this;
@@ -362,9 +348,9 @@
inline CodeGeneratorResponse_File& operator=(CodeGeneratorResponse_File&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -396,22 +382,17 @@
}
static inline const CodeGeneratorResponse_File* internal_default_instance() {
return reinterpret_cast<const CodeGeneratorResponse_File*>(
- &_CodeGeneratorResponse_File_default_instance_);
+ &_CodeGeneratorResponse_File_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 2;
-
- friend void swap(CodeGeneratorResponse_File& a, CodeGeneratorResponse_File& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 2;
+ friend void swap(CodeGeneratorResponse_File& a, CodeGeneratorResponse_File& b) { a.Swap(&b); }
inline void Swap(CodeGeneratorResponse_File* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -431,11 +412,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const CodeGeneratorResponse_File& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const CodeGeneratorResponse_File& from) {
- CodeGeneratorResponse_File::MergeImpl(*this, from);
- }
+ void MergeFrom(const CodeGeneratorResponse_File& from) { CodeGeneratorResponse_File::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -443,31 +426,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(CodeGeneratorResponse_File* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.compiler.CodeGeneratorResponse.File";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.compiler.CodeGeneratorResponse.File"; }
+
+ protected:
explicit CodeGeneratorResponse_File(::google::protobuf::Arena* arena);
CodeGeneratorResponse_File(::google::protobuf::Arena* arena, const CodeGeneratorResponse_File& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ CodeGeneratorResponse_File(::google::protobuf::Arena* arena, CodeGeneratorResponse_File&& from) noexcept
+ : CodeGeneratorResponse_File(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kInsertionPointFieldNumber = 2,
@@ -543,7 +528,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse.File)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 4, 1,
@@ -555,14 +539,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOC_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_;
@@ -573,23 +556,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOC_EXPORT CodeGeneratorResponse final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorResponse) */ {
+class PROTOC_EXPORT CodeGeneratorResponse final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorResponse) */ {
public:
inline CodeGeneratorResponse() : CodeGeneratorResponse(nullptr) {}
~CodeGeneratorResponse() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR CodeGeneratorResponse(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR CodeGeneratorResponse(
+ ::google::protobuf::internal::ConstantInitialized);
- inline CodeGeneratorResponse(const CodeGeneratorResponse& from)
- : CodeGeneratorResponse(nullptr, from) {}
- CodeGeneratorResponse(CodeGeneratorResponse&& from) noexcept
- : CodeGeneratorResponse() {
- *this = ::std::move(from);
- }
-
+ inline CodeGeneratorResponse(const CodeGeneratorResponse& from) : CodeGeneratorResponse(nullptr, from) {}
+ inline CodeGeneratorResponse(CodeGeneratorResponse&& from) noexcept
+ : CodeGeneratorResponse(nullptr, std::move(from)) {}
inline CodeGeneratorResponse& operator=(const CodeGeneratorResponse& from) {
CopyFrom(from);
return *this;
@@ -597,9 +578,9 @@
inline CodeGeneratorResponse& operator=(CodeGeneratorResponse&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -631,22 +612,17 @@
}
static inline const CodeGeneratorResponse* internal_default_instance() {
return reinterpret_cast<const CodeGeneratorResponse*>(
- &_CodeGeneratorResponse_default_instance_);
+ &_CodeGeneratorResponse_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 3;
-
- friend void swap(CodeGeneratorResponse& a, CodeGeneratorResponse& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 3;
+ friend void swap(CodeGeneratorResponse& a, CodeGeneratorResponse& b) { a.Swap(&b); }
inline void Swap(CodeGeneratorResponse* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -666,11 +642,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const CodeGeneratorResponse& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const CodeGeneratorResponse& from) {
- CodeGeneratorResponse::MergeImpl(*this, from);
- }
+ void MergeFrom(const CodeGeneratorResponse& from) { CodeGeneratorResponse::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -678,31 +656,32 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(CodeGeneratorResponse* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.compiler.CodeGeneratorResponse";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.compiler.CodeGeneratorResponse"; }
+
+ protected:
explicit CodeGeneratorResponse(::google::protobuf::Arena* arena);
CodeGeneratorResponse(::google::protobuf::Arena* arena, const CodeGeneratorResponse& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ CodeGeneratorResponse(::google::protobuf::Arena* arena, CodeGeneratorResponse&& from) noexcept
+ : CodeGeneratorResponse(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using File = CodeGeneratorResponse_File;
-
using Feature = CodeGeneratorResponse_Feature;
static constexpr Feature FEATURE_NONE = CodeGeneratorResponse_Feature_FEATURE_NONE;
static constexpr Feature FEATURE_PROTO3_OPTIONAL = CodeGeneratorResponse_Feature_FEATURE_PROTO3_OPTIONAL;
@@ -725,11 +704,12 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kFileFieldNumber = 15,
kErrorFieldNumber = 1,
kSupportedFeaturesFieldNumber = 2,
+ kMinimumEditionFieldNumber = 3,
+ kMaximumEditionFieldNumber = 4,
};
// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15;
int file_size() const;
@@ -739,16 +719,15 @@
public:
void clear_file() ;
::google::protobuf::compiler::CodeGeneratorResponse_File* mutable_file(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File >*
- mutable_file();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::compiler::CodeGeneratorResponse_File>* mutable_file();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::compiler::CodeGeneratorResponse_File>& _internal_file() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::compiler::CodeGeneratorResponse_File>* _internal_mutable_file();
public:
const ::google::protobuf::compiler::CodeGeneratorResponse_File& file(int index) const;
::google::protobuf::compiler::CodeGeneratorResponse_File* add_file();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File >&
- file() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::compiler::CodeGeneratorResponse_File>& file() const;
// optional string error = 1;
bool has_error() const;
void clear_error() ;
@@ -777,13 +756,34 @@
void _internal_set_supported_features(::uint64_t value);
public:
+ // optional int32 minimum_edition = 3;
+ bool has_minimum_edition() const;
+ void clear_minimum_edition() ;
+ ::int32_t minimum_edition() const;
+ void set_minimum_edition(::int32_t value);
+
+ private:
+ ::int32_t _internal_minimum_edition() const;
+ void _internal_set_minimum_edition(::int32_t value);
+
+ public:
+ // optional int32 maximum_edition = 4;
+ bool has_maximum_edition() const;
+ void clear_maximum_edition() ;
+ ::int32_t maximum_edition() const;
+ void set_maximum_edition(::int32_t value);
+
+ private:
+ ::int32_t _internal_maximum_edition() const;
+ void _internal_set_maximum_edition(::int32_t value);
+
+ public:
// @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
- 2, 3, 1,
+ 3, 5, 1,
60, 2>
_table_;
friend class ::google::protobuf::MessageLite;
@@ -792,40 +792,39 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOC_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File > file_;
::google::protobuf::internal::ArenaStringPtr error_;
::uint64_t supported_features_;
+ ::int32_t minimum_edition_;
+ ::int32_t maximum_edition_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOC_EXPORT CodeGeneratorRequest final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorRequest) */ {
+class PROTOC_EXPORT CodeGeneratorRequest final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorRequest) */ {
public:
inline CodeGeneratorRequest() : CodeGeneratorRequest(nullptr) {}
~CodeGeneratorRequest() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR CodeGeneratorRequest(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR CodeGeneratorRequest(
+ ::google::protobuf::internal::ConstantInitialized);
- inline CodeGeneratorRequest(const CodeGeneratorRequest& from)
- : CodeGeneratorRequest(nullptr, from) {}
- CodeGeneratorRequest(CodeGeneratorRequest&& from) noexcept
- : CodeGeneratorRequest() {
- *this = ::std::move(from);
- }
-
+ inline CodeGeneratorRequest(const CodeGeneratorRequest& from) : CodeGeneratorRequest(nullptr, from) {}
+ inline CodeGeneratorRequest(CodeGeneratorRequest&& from) noexcept
+ : CodeGeneratorRequest(nullptr, std::move(from)) {}
inline CodeGeneratorRequest& operator=(const CodeGeneratorRequest& from) {
CopyFrom(from);
return *this;
@@ -833,9 +832,9 @@
inline CodeGeneratorRequest& operator=(CodeGeneratorRequest&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -867,22 +866,17 @@
}
static inline const CodeGeneratorRequest* internal_default_instance() {
return reinterpret_cast<const CodeGeneratorRequest*>(
- &_CodeGeneratorRequest_default_instance_);
+ &_CodeGeneratorRequest_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 1;
-
- friend void swap(CodeGeneratorRequest& a, CodeGeneratorRequest& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 1;
+ friend void swap(CodeGeneratorRequest& a, CodeGeneratorRequest& b) { a.Swap(&b); }
inline void Swap(CodeGeneratorRequest* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -902,11 +896,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const CodeGeneratorRequest& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const CodeGeneratorRequest& from) {
- CodeGeneratorRequest::MergeImpl(*this, from);
- }
+ void MergeFrom(const CodeGeneratorRequest& from) { CodeGeneratorRequest::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -914,31 +910,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(CodeGeneratorRequest* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.compiler.CodeGeneratorRequest";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.compiler.CodeGeneratorRequest"; }
+
+ protected:
explicit CodeGeneratorRequest(::google::protobuf::Arena* arena);
CodeGeneratorRequest(::google::protobuf::Arena* arena, const CodeGeneratorRequest& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ CodeGeneratorRequest(::google::protobuf::Arena* arena, CodeGeneratorRequest&& from) noexcept
+ : CodeGeneratorRequest(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kFileToGenerateFieldNumber = 1,
kProtoFileFieldNumber = 15,
@@ -982,16 +980,15 @@
public:
void clear_proto_file() ;
::google::protobuf::FileDescriptorProto* mutable_proto_file(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >*
- mutable_proto_file();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>* mutable_proto_file();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>& _internal_proto_file() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>* _internal_mutable_proto_file();
public:
const ::google::protobuf::FileDescriptorProto& proto_file(int index) const;
::google::protobuf::FileDescriptorProto* add_proto_file();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >&
- proto_file() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>& proto_file() const;
// repeated .google.protobuf.FileDescriptorProto source_file_descriptors = 17;
int source_file_descriptors_size() const;
private:
@@ -1000,16 +997,15 @@
public:
void clear_source_file_descriptors() ;
::google::protobuf::FileDescriptorProto* mutable_source_file_descriptors(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >*
- mutable_source_file_descriptors();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>* mutable_source_file_descriptors();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>& _internal_source_file_descriptors() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>* _internal_mutable_source_file_descriptors();
public:
const ::google::protobuf::FileDescriptorProto& source_file_descriptors(int index) const;
::google::protobuf::FileDescriptorProto* add_source_file_descriptors();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >&
- source_file_descriptors() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>& source_file_descriptors() const;
// optional string parameter = 2;
bool has_parameter() const;
void clear_parameter() ;
@@ -1045,7 +1041,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorRequest)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 5, 3,
@@ -1057,14 +1052,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOC_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField<std::string> file_to_generate_;
@@ -1110,6 +1104,7 @@
}
inline void Version::set_major(::int32_t value) {
_internal_set_major(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.major)
}
inline ::int32_t Version::_internal_major() const {
@@ -1118,7 +1113,6 @@
}
inline void Version::_internal_set_major(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.major_ = value;
}
@@ -1138,6 +1132,7 @@
}
inline void Version::set_minor(::int32_t value) {
_internal_set_minor(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.minor)
}
inline ::int32_t Version::_internal_minor() const {
@@ -1146,7 +1141,6 @@
}
inline void Version::_internal_set_minor(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.minor_ = value;
}
@@ -1166,6 +1160,7 @@
}
inline void Version::set_patch(::int32_t value) {
_internal_set_patch(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.patch)
}
inline ::int32_t Version::_internal_patch() const {
@@ -1174,7 +1169,6 @@
}
inline void Version::_internal_set_patch(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.patch_ = value;
}
@@ -1301,8 +1295,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate)
}
inline void CodeGeneratorRequest::set_file_to_generate(int index, absl::string_view value) {
- _internal_mutable_file_to_generate()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_file_to_generate()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate)
}
inline void CodeGeneratorRequest::add_file_to_generate(const std::string& value) {
@@ -1329,7 +1323,8 @@
}
inline void CodeGeneratorRequest::add_file_to_generate(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_file_to_generate()->Add()->assign(value.data(), value.size());
+ _internal_mutable_file_to_generate()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
@@ -1578,7 +1573,6 @@
}
inline ::google::protobuf::compiler::Version* CodeGeneratorRequest::_internal_mutable_compiler_version() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
if (_impl_.compiler_version_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::compiler::Version>(GetArena());
_impl_.compiler_version_ = reinterpret_cast<::google::protobuf::compiler::Version*>(p);
@@ -1586,6 +1580,7 @@
return _impl_.compiler_version_;
}
inline ::google::protobuf::compiler::Version* CodeGeneratorRequest::mutable_compiler_version() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000002u;
::google::protobuf::compiler::Version* _msg = _internal_mutable_compiler_version();
// @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.compiler_version)
return _msg;
@@ -1886,7 +1881,6 @@
}
inline ::google::protobuf::GeneratedCodeInfo* CodeGeneratorResponse_File::_internal_mutable_generated_code_info() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
if (_impl_.generated_code_info_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::GeneratedCodeInfo>(GetArena());
_impl_.generated_code_info_ = reinterpret_cast<::google::protobuf::GeneratedCodeInfo*>(p);
@@ -1894,6 +1888,7 @@
return _impl_.generated_code_info_;
}
inline ::google::protobuf::GeneratedCodeInfo* CodeGeneratorResponse_File::mutable_generated_code_info() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000008u;
::google::protobuf::GeneratedCodeInfo* _msg = _internal_mutable_generated_code_info();
// @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info)
return _msg;
@@ -2010,6 +2005,7 @@
}
inline void CodeGeneratorResponse::set_supported_features(::uint64_t value) {
_internal_set_supported_features(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.supported_features)
}
inline ::uint64_t CodeGeneratorResponse::_internal_supported_features() const {
@@ -2018,10 +2014,65 @@
}
inline void CodeGeneratorResponse::_internal_set_supported_features(::uint64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.supported_features_ = value;
}
+// optional int32 minimum_edition = 3;
+inline bool CodeGeneratorResponse::has_minimum_edition() const {
+ bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
+ return value;
+}
+inline void CodeGeneratorResponse::clear_minimum_edition() {
+ PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
+ _impl_.minimum_edition_ = 0;
+ _impl_._has_bits_[0] &= ~0x00000004u;
+}
+inline ::int32_t CodeGeneratorResponse::minimum_edition() const {
+ // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.minimum_edition)
+ return _internal_minimum_edition();
+}
+inline void CodeGeneratorResponse::set_minimum_edition(::int32_t value) {
+ _internal_set_minimum_edition(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
+ // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.minimum_edition)
+}
+inline ::int32_t CodeGeneratorResponse::_internal_minimum_edition() const {
+ PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
+ return _impl_.minimum_edition_;
+}
+inline void CodeGeneratorResponse::_internal_set_minimum_edition(::int32_t value) {
+ PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
+ _impl_.minimum_edition_ = value;
+}
+
+// optional int32 maximum_edition = 4;
+inline bool CodeGeneratorResponse::has_maximum_edition() const {
+ bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0;
+ return value;
+}
+inline void CodeGeneratorResponse::clear_maximum_edition() {
+ PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
+ _impl_.maximum_edition_ = 0;
+ _impl_._has_bits_[0] &= ~0x00000008u;
+}
+inline ::int32_t CodeGeneratorResponse::maximum_edition() const {
+ // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.maximum_edition)
+ return _internal_maximum_edition();
+}
+inline void CodeGeneratorResponse::set_maximum_edition(::int32_t value) {
+ _internal_set_maximum_edition(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
+ // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.maximum_edition)
+}
+inline ::int32_t CodeGeneratorResponse::_internal_maximum_edition() const {
+ PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
+ return _impl_.maximum_edition_;
+}
+inline void CodeGeneratorResponse::_internal_set_maximum_edition(::int32_t value) {
+ PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
+ _impl_.maximum_edition_ = value;
+}
+
// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15;
inline int CodeGeneratorResponse::_internal_file_size() const {
return _internal_file().size();
diff --git a/src/google/protobuf/compiler/plugin.proto b/src/google/protobuf/compiler/plugin.proto
index 829cf41..033fab2 100644
--- a/src/google/protobuf/compiler/plugin.proto
+++ b/src/google/protobuf/compiler/plugin.proto
@@ -102,6 +102,18 @@
FEATURE_SUPPORTS_EDITIONS = 2;
}
+ // The minimum edition this plugin supports. This will be treated as an
+ // Edition enum, but we want to allow unknown values. It should be specified
+ // according the edition enum value, *not* the edition number. Only takes
+ // effect for plugins that have FEATURE_SUPPORTS_EDITIONS set.
+ optional int32 minimum_edition = 3;
+
+ // The maximum edition this plugin supports. This will be treated as an
+ // Edition enum, but we want to allow unknown values. It should be specified
+ // according the edition enum value, *not* the edition number. Only takes
+ // effect for plugins that have FEATURE_SUPPORTS_EDITIONS set.
+ optional int32 maximum_edition = 4;
+
// Represents a single generated file.
message File {
// The file name, relative to the output directory. The name must not
diff --git a/src/google/protobuf/compiler/python/BUILD.bazel b/src/google/protobuf/compiler/python/BUILD.bazel
index e9501f2..5fe9604 100644
--- a/src/google/protobuf/compiler/python/BUILD.bazel
+++ b/src/google/protobuf/compiler/python/BUILD.bazel
@@ -26,7 +26,6 @@
"@com_github_grpc_grpc//tools/distrib/python/grpcio_tools:__subpackages__",
],
deps = [
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler:code_generator",
"//src/google/protobuf/compiler:retention",
diff --git a/src/google/protobuf/compiler/python/generator.cc b/src/google/protobuf/compiler/python/generator.cc
index e34a7be..555e4ed 100644
--- a/src/google/protobuf/compiler/python/generator.cc
+++ b/src/google/protobuf/compiler/python/generator.cc
@@ -48,7 +48,6 @@
#include "google/protobuf/compiler/versions.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/descriptor_visitor.h"
#include "google/protobuf/dynamic_message.h"
#include "google/protobuf/io/printer.h"
@@ -167,6 +166,17 @@
}
}
+std::string GetLegacySyntaxName(Edition edition) {
+ switch (edition) {
+ case Edition::EDITION_PROTO2:
+ return "proto2";
+ case Edition::EDITION_PROTO3:
+ return "proto3";
+ default:
+ return "editions";
+ }
+}
+
} // namespace
Generator::Generator() : file_(nullptr) {}
@@ -502,7 +512,7 @@
} \
}
- internal::VisitDescriptors(*file_, [&](const Descriptor& msg) {
+ google::protobuf::internal::VisitDescriptors(*file_, [&](const Descriptor& msg) {
printer_->Emit(
{{"resolved_features", GetResolvedFeatures(msg)},
{"descriptor_name", ModuleLevelDescriptorName(msg)},
@@ -516,7 +526,7 @@
$ext_features$
)py");
});
- internal::VisitDescriptors(*file_, [&](const EnumDescriptor& enm) {
+ google::protobuf::internal::VisitDescriptors(*file_, [&](const EnumDescriptor& enm) {
printer_->Emit({{"resolved_features", GetResolvedFeatures(enm)},
{"descriptor_name", ModuleLevelDescriptorName(enm)},
{"value_features", MAKE_NESTED(enm, value, "values")}},
@@ -534,8 +544,7 @@
m["descriptor_name"] = kDescriptorKey;
m["name"] = file_->name();
m["package"] = file_->package();
- m["syntax"] = std::string(
- FileDescriptorLegacy::SyntaxName(FileDescriptorLegacy(file_).syntax()));
+ m["syntax"] = GetLegacySyntaxName(file_->edition());
m["edition"] = Edition_Name(file_->edition());
m["options"] = OptionsValue(proto_.options().SerializeAsString());
m["serialized_descriptor"] = absl::CHexEscape(file_descriptor_serialized_);
diff --git a/src/google/protobuf/compiler/python/generator.h b/src/google/protobuf/compiler/python/generator.h
index 531c44a..bed2dc8 100644
--- a/src/google/protobuf/compiler/python/generator.h
+++ b/src/google/protobuf/compiler/python/generator.h
@@ -66,7 +66,8 @@
std::string* error) const override;
uint64_t GetSupportedFeatures() const override {
- return Feature::FEATURE_PROTO3_OPTIONAL;
+ return Feature::FEATURE_PROTO3_OPTIONAL |
+ Feature::FEATURE_SUPPORTS_EDITIONS;
}
Edition GetMinimumEdition() const override { return Edition::EDITION_PROTO2; }
Edition GetMaximumEdition() const override { return Edition::EDITION_2023; }
diff --git a/src/google/protobuf/compiler/python/pyi_generator.h b/src/google/protobuf/compiler/python/pyi_generator.h
index 495b296..a015880 100644
--- a/src/google/protobuf/compiler/python/pyi_generator.h
+++ b/src/google/protobuf/compiler/python/pyi_generator.h
@@ -48,7 +48,8 @@
// CodeGenerator methods.
uint64_t GetSupportedFeatures() const override {
// Code generators must explicitly support proto3 optional.
- return CodeGenerator::FEATURE_PROTO3_OPTIONAL;
+ return Feature::FEATURE_PROTO3_OPTIONAL |
+ Feature::FEATURE_SUPPORTS_EDITIONS;
}
bool Generate(const FileDescriptor* file, const std::string& parameter,
GeneratorContext* generator_context,
diff --git a/src/google/protobuf/compiler/ruby/BUILD.bazel b/src/google/protobuf/compiler/ruby/BUILD.bazel
index 62afc3c..9e92154 100644
--- a/src/google/protobuf/compiler/ruby/BUILD.bazel
+++ b/src/google/protobuf/compiler/ruby/BUILD.bazel
@@ -17,7 +17,6 @@
"//src/google/protobuf/compiler:__pkg__",
],
deps = [
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler:code_generator",
"//src/google/protobuf/compiler:retention",
diff --git a/src/google/protobuf/compiler/ruby/ruby_generated_code_pb.rb b/src/google/protobuf/compiler/ruby/ruby_generated_code_pb.rb
index 6c24134..cf37b71 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generated_code_pb.rb
+++ b/src/google/protobuf/compiler/ruby/ruby_generated_code_pb.rb
@@ -10,29 +10,7 @@
descriptor_data = "\n\x19ruby_generated_code.proto\x12\x05\x41.B.C\x1a\'ruby_generated_code_proto2_import.proto\"\x86\x12\n\x0bTestMessage\x12\x16\n\x0eoptional_int32\x18\x01 \x01(\x05\x12\x16\n\x0eoptional_int64\x18\x02 \x01(\x03\x12\x17\n\x0foptional_uint32\x18\x03 \x01(\r\x12\x17\n\x0foptional_uint64\x18\x04 \x01(\x04\x12\x15\n\roptional_bool\x18\x05 \x01(\x08\x12\x17\n\x0foptional_double\x18\x06 \x01(\x01\x12\x16\n\x0eoptional_float\x18\x07 \x01(\x02\x12\x17\n\x0foptional_string\x18\x08 \x01(\t\x12\x16\n\x0eoptional_bytes\x18\t \x01(\x0c\x12&\n\roptional_enum\x18\n \x01(\x0e\x32\x0f.A.B.C.TestEnum\x12(\n\x0coptional_msg\x18\x0b \x01(\x0b\x32\x12.A.B.C.TestMessage\x12>\n\x1aoptional_proto2_submessage\x18\x0c \x01(\x0b\x32\x1a.A.B.C.TestImportedMessage\x12\x16\n\x0erepeated_int32\x18\x15 \x03(\x05\x12\x16\n\x0erepeated_int64\x18\x16 \x03(\x03\x12\x17\n\x0frepeated_uint32\x18\x17 \x03(\r\x12\x17\n\x0frepeated_uint64\x18\x18 \x03(\x04\x12\x15\n\rrepeated_bool\x18\x19 \x03(\x08\x12\x17\n\x0frepeated_double\x18\x1a \x03(\x01\x12\x16\n\x0erepeated_float\x18\x1b \x03(\x02\x12\x17\n\x0frepeated_string\x18\x1c \x03(\t\x12\x16\n\x0erepeated_bytes\x18\x1d \x03(\x0c\x12&\n\rrepeated_enum\x18\x1e \x03(\x0e\x32\x0f.A.B.C.TestEnum\x12(\n\x0crepeated_msg\x18\x1f \x03(\x0b\x32\x12.A.B.C.TestMessage\x12\x15\n\x0boneof_int32\x18) \x01(\x05H\x00\x12\x15\n\x0boneof_int64\x18* \x01(\x03H\x00\x12\x16\n\x0coneof_uint32\x18+ \x01(\rH\x00\x12\x16\n\x0coneof_uint64\x18, \x01(\x04H\x00\x12\x14\n\noneof_bool\x18- \x01(\x08H\x00\x12\x16\n\x0coneof_double\x18. \x01(\x01H\x00\x12\x15\n\x0boneof_float\x18/ \x01(\x02H\x00\x12\x16\n\x0coneof_string\x18\x30 \x01(\tH\x00\x12\x15\n\x0boneof_bytes\x18\x31 \x01(\x0cH\x00\x12%\n\noneof_enum\x18\x32 \x01(\x0e\x32\x0f.A.B.C.TestEnumH\x00\x12\'\n\toneof_msg\x18\x33 \x01(\x0b\x32\x12.A.B.C.TestMessageH\x00\x12@\n\x10map_int32_string\x18= \x03(\x0b\x32&.A.B.C.TestMessage.MapInt32StringEntry\x12@\n\x10map_int64_string\x18> \x03(\x0b\x32&.A.B.C.TestMessage.MapInt64StringEntry\x12\x42\n\x11map_uint32_string\x18? \x03(\x0b\x32\'.A.B.C.TestMessage.MapUint32StringEntry\x12\x42\n\x11map_uint64_string\x18@ \x03(\x0b\x32\'.A.B.C.TestMessage.MapUint64StringEntry\x12>\n\x0fmap_bool_string\x18\x41 \x03(\x0b\x32%.A.B.C.TestMessage.MapBoolStringEntry\x12\x42\n\x11map_string_string\x18\x42 \x03(\x0b\x32\'.A.B.C.TestMessage.MapStringStringEntry\x12<\n\x0emap_string_msg\x18\x43 \x03(\x0b\x32$.A.B.C.TestMessage.MapStringMsgEntry\x12>\n\x0fmap_string_enum\x18\x44 \x03(\x0b\x32%.A.B.C.TestMessage.MapStringEnumEntry\x12@\n\x10map_string_int32\x18\x45 \x03(\x0b\x32&.A.B.C.TestMessage.MapStringInt32Entry\x12>\n\x0fmap_string_bool\x18\x46 \x03(\x0b\x32%.A.B.C.TestMessage.MapStringBoolEntry\x12\x38\n\x0enested_message\x18P \x01(\x0b\x32 .A.B.C.TestMessage.NestedMessage\x1a\x35\n\x13MapInt32StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapInt64StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x36\n\x14MapUint32StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x36\n\x14MapUint64StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x34\n\x12MapBoolStringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x36\n\x14MapStringStringEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1aG\n\x11MapStringMsgEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.A.B.C.TestMessage:\x02\x38\x01\x1a\x45\n\x12MapStringEnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x05value\x18\x02 \x01(\x0e\x32\x0f.A.B.C.TestEnum:\x02\x38\x01\x1a\x35\n\x13MapStringInt32Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x34\n\x12MapStringBoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x1c\n\rNestedMessage\x12\x0b\n\x03\x66oo\x18\x01 \x01(\x05\x42\n\n\x08my_oneof*,\n\x08TestEnum\x12\x0b\n\x07\x44\x65\x66\x61ult\x10\x00\x12\x05\n\x01\x41\x10\x01\x12\x05\n\x01\x42\x10\x02\x12\x05\n\x01\x43\x10\x03\x62\x06proto3"
pool = Google::Protobuf::DescriptorPool.generated_pool
-
-begin
- pool.add_serialized_file(descriptor_data)
-rescue TypeError
- # Compatibility code: will be removed in the next major version.
- require 'google/protobuf/descriptor_pb'
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
- parsed.clear_dependency
- serialized = parsed.class.encode(parsed)
- file = pool.add_serialized_file(serialized)
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
- imports = [
- ["A.B.C.TestImportedMessage", "ruby_generated_code_proto2_import.proto"],
- ]
- imports.each do |type_name, expected_filename|
- import_file = pool.lookup(type_name).file_descriptor
- if import_file.name != expected_filename
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
- end
- end
- warn "Each proto file must use a consistent fully-qualified name."
- warn "This will become an error in the next major version."
-end
+pool.add_serialized_file(descriptor_data)
module A
module B
diff --git a/src/google/protobuf/compiler/ruby/ruby_generated_code_proto2_pb.rb b/src/google/protobuf/compiler/ruby/ruby_generated_code_proto2_pb.rb
index 0649598..053bfea 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generated_code_proto2_pb.rb
+++ b/src/google/protobuf/compiler/ruby/ruby_generated_code_proto2_pb.rb
@@ -10,29 +10,7 @@
descriptor_data = "\n ruby_generated_code_proto2.proto\x12\x05\x41.B.C\x1a\'ruby_generated_code_proto2_import.proto\"\x96\x0b\n\x0bTestMessage\x12\x19\n\x0eoptional_int32\x18\x01 \x01(\x05:\x01\x31\x12\x19\n\x0eoptional_int64\x18\x02 \x01(\x03:\x01\x32\x12\x1a\n\x0foptional_uint32\x18\x03 \x01(\r:\x01\x33\x12\x1a\n\x0foptional_uint64\x18\x04 \x01(\x04:\x01\x34\x12\x1b\n\roptional_bool\x18\x05 \x01(\x08:\x04true\x12\x1a\n\x0foptional_double\x18\x06 \x01(\x01:\x01\x36\x12\x19\n\x0eoptional_float\x18\x07 \x01(\x02:\x01\x37\x12$\n\x0foptional_string\x18\x08 \x01(\t:\x0b\x64\x65\x66\x61ult str\x12*\n\x0eoptional_bytes\x18\t \x01(\x0c:\x12\\000\\001\\002@fubar\x12)\n\roptional_enum\x18\n \x01(\x0e\x32\x0f.A.B.C.TestEnum:\x01\x41\x12(\n\x0coptional_msg\x18\x0b \x01(\x0b\x32\x12.A.B.C.TestMessage\x12>\n\x1aoptional_proto2_submessage\x18\x0c \x01(\x0b\x32\x1a.A.B.C.TestImportedMessage\x12\x16\n\x0erepeated_int32\x18\x15 \x03(\x05\x12\x16\n\x0erepeated_int64\x18\x16 \x03(\x03\x12\x17\n\x0frepeated_uint32\x18\x17 \x03(\r\x12\x17\n\x0frepeated_uint64\x18\x18 \x03(\x04\x12\x15\n\rrepeated_bool\x18\x19 \x03(\x08\x12\x17\n\x0frepeated_double\x18\x1a \x03(\x01\x12\x16\n\x0erepeated_float\x18\x1b \x03(\x02\x12\x17\n\x0frepeated_string\x18\x1c \x03(\t\x12\x16\n\x0erepeated_bytes\x18\x1d \x03(\x0c\x12&\n\rrepeated_enum\x18\x1e \x03(\x0e\x32\x0f.A.B.C.TestEnum\x12(\n\x0crepeated_msg\x18\x1f \x03(\x0b\x32\x12.A.B.C.TestMessage\x12\x16\n\x0erequired_int32\x18) \x02(\x05\x12\x16\n\x0erequired_int64\x18* \x02(\x03\x12\x17\n\x0frequired_uint32\x18+ \x02(\r\x12\x17\n\x0frequired_uint64\x18, \x02(\x04\x12\x15\n\rrequired_bool\x18- \x02(\x08\x12\x17\n\x0frequired_double\x18. \x02(\x01\x12\x16\n\x0erequired_float\x18/ \x02(\x02\x12\x17\n\x0frequired_string\x18\x30 \x02(\t\x12\x16\n\x0erequired_bytes\x18\x31 \x02(\x0c\x12&\n\rrequired_enum\x18\x32 \x02(\x0e\x32\x0f.A.B.C.TestEnum\x12(\n\x0crequired_msg\x18\x33 \x02(\x0b\x32\x12.A.B.C.TestMessage\x12\x15\n\x0boneof_int32\x18= \x01(\x05H\x00\x12\x15\n\x0boneof_int64\x18> \x01(\x03H\x00\x12\x16\n\x0coneof_uint32\x18? \x01(\rH\x00\x12\x16\n\x0coneof_uint64\x18@ \x01(\x04H\x00\x12\x14\n\noneof_bool\x18\x41 \x01(\x08H\x00\x12\x16\n\x0coneof_double\x18\x42 \x01(\x01H\x00\x12\x15\n\x0boneof_float\x18\x43 \x01(\x02H\x00\x12\x16\n\x0coneof_string\x18\x44 \x01(\tH\x00\x12\x15\n\x0boneof_bytes\x18\x45 \x01(\x0cH\x00\x12%\n\noneof_enum\x18\x46 \x01(\x0e\x32\x0f.A.B.C.TestEnumH\x00\x12\'\n\toneof_msg\x18G \x01(\x0b\x32\x12.A.B.C.TestMessageH\x00\x12\x38\n\x0enested_message\x18P \x01(\x0b\x32 .A.B.C.TestMessage.NestedMessage\x1a\x1c\n\rNestedMessage\x12\x0b\n\x03\x66oo\x18\x01 \x01(\x05\x42\n\n\x08my_oneof*,\n\x08TestEnum\x12\x0b\n\x07\x44\x65\x66\x61ult\x10\x00\x12\x05\n\x01\x41\x10\x01\x12\x05\n\x01\x42\x10\x02\x12\x05\n\x01\x43\x10\x03"
pool = Google::Protobuf::DescriptorPool.generated_pool
-
-begin
- pool.add_serialized_file(descriptor_data)
-rescue TypeError
- # Compatibility code: will be removed in the next major version.
- require 'google/protobuf/descriptor_pb'
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
- parsed.clear_dependency
- serialized = parsed.class.encode(parsed)
- file = pool.add_serialized_file(serialized)
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
- imports = [
- ["A.B.C.TestImportedMessage", "ruby_generated_code_proto2_import.proto"],
- ]
- imports.each do |type_name, expected_filename|
- import_file = pool.lookup(type_name).file_descriptor
- if import_file.name != expected_filename
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
- end
- end
- warn "Each proto file must use a consistent fully-qualified name."
- warn "This will become an error in the next major version."
-end
+pool.add_serialized_file(descriptor_data)
module A
module B
diff --git a/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy_pb.rb b/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy_pb.rb
index bb8cc10..69f7745 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy_pb.rb
+++ b/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy_pb.rb
@@ -8,28 +8,7 @@
descriptor_data = "\n(ruby_generated_pkg_explicit_legacy.proto\x12\x13one.two.a_three.and\"\x1e\n\x04\x46our\x12\x16\n\x0e\x61nother_string\x18\x01 \x01(\tB\x0b\xea\x02\x08\x41\x41.BB.CCb\x06proto3"
pool = Google::Protobuf::DescriptorPool.generated_pool
-
-begin
- pool.add_serialized_file(descriptor_data)
-rescue TypeError
- # Compatibility code: will be removed in the next major version.
- require 'google/protobuf/descriptor_pb'
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
- parsed.clear_dependency
- serialized = parsed.class.encode(parsed)
- file = pool.add_serialized_file(serialized)
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
- imports = [
- ]
- imports.each do |type_name, expected_filename|
- import_file = pool.lookup(type_name).file_descriptor
- if import_file.name != expected_filename
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
- end
- end
- warn "Each proto file must use a consistent fully-qualified name."
- warn "This will become an error in the next major version."
-end
+pool.add_serialized_file(descriptor_data)
module AA
module BB
diff --git a/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_pb.rb b/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_pb.rb
index 4d49ff8..f241bd9 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_pb.rb
+++ b/src/google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_pb.rb
@@ -8,28 +8,7 @@
descriptor_data = "\n!ruby_generated_pkg_explicit.proto\x12\x0fone.two.a_three\"\x18\n\x04\x46our\x12\x10\n\x08\x61_string\x18\x01 \x01(\tB\n\xea\x02\x07\x41::B::Cb\x06proto3"
pool = Google::Protobuf::DescriptorPool.generated_pool
-
-begin
- pool.add_serialized_file(descriptor_data)
-rescue TypeError
- # Compatibility code: will be removed in the next major version.
- require 'google/protobuf/descriptor_pb'
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
- parsed.clear_dependency
- serialized = parsed.class.encode(parsed)
- file = pool.add_serialized_file(serialized)
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
- imports = [
- ]
- imports.each do |type_name, expected_filename|
- import_file = pool.lookup(type_name).file_descriptor
- if import_file.name != expected_filename
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
- end
- end
- warn "Each proto file must use a consistent fully-qualified name."
- warn "This will become an error in the next major version."
-end
+pool.add_serialized_file(descriptor_data)
module A
module B
diff --git a/src/google/protobuf/compiler/ruby/ruby_generated_pkg_implicit_pb.rb b/src/google/protobuf/compiler/ruby/ruby_generated_pkg_implicit_pb.rb
index 7235a16..7c652df 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generated_pkg_implicit_pb.rb
+++ b/src/google/protobuf/compiler/ruby/ruby_generated_pkg_implicit_pb.rb
@@ -8,28 +8,7 @@
descriptor_data = "\n!ruby_generated_pkg_implicit.proto\x12\x0fone.two.a_three\"\x18\n\x04\x46our\x12\x10\n\x08\x61_string\x18\x01 \x01(\tb\x06proto3"
pool = Google::Protobuf::DescriptorPool.generated_pool
-
-begin
- pool.add_serialized_file(descriptor_data)
-rescue TypeError
- # Compatibility code: will be removed in the next major version.
- require 'google/protobuf/descriptor_pb'
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
- parsed.clear_dependency
- serialized = parsed.class.encode(parsed)
- file = pool.add_serialized_file(serialized)
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
- imports = [
- ]
- imports.each do |type_name, expected_filename|
- import_file = pool.lookup(type_name).file_descriptor
- if import_file.name != expected_filename
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
- end
- end
- warn "Each proto file must use a consistent fully-qualified name."
- warn "This will become an error in the next major version."
-end
+pool.add_serialized_file(descriptor_data)
module One
module Two
diff --git a/src/google/protobuf/compiler/ruby/ruby_generator.cc b/src/google/protobuf/compiler/ruby/ruby_generator.cc
index 7bc8283..82f1a95 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generator.cc
+++ b/src/google/protobuf/compiler/ruby/ruby_generator.cc
@@ -19,7 +19,6 @@
#include "google/protobuf/compiler/retention.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/io/zero_copy_stream.h"
@@ -40,7 +39,7 @@
io::Printer* printer);
std::string DefaultValueForField(const FieldDescriptor* field);
-template<class numeric_type>
+template <class numeric_type>
std::string NumberToString(numeric_type value) {
std::ostringstream os;
os << value;
@@ -65,7 +64,6 @@
char UpperChar(char ch) { return IsLower(ch) ? (ch - 'a' + 'A') : ch; }
-
// Package names in protobuf are snake_case by convention, but Ruby module
// names must be PascalCased.
//
@@ -123,14 +121,12 @@
return;
}
+ printer->Print("$prefix$$name$ = ", "prefix", prefix, "name",
+ RubifyConstant(message->name()));
printer->Print(
- "$prefix$$name$ = ",
- "prefix", prefix,
- "name", RubifyConstant(message->name()));
- printer->Print(
- "::Google::Protobuf::DescriptorPool.generated_pool."
- "lookup(\"$full_name$\").msgclass\n",
- "full_name", message->full_name());
+ "::Google::Protobuf::DescriptorPool.generated_pool."
+ "lookup(\"$full_name$\").msgclass\n",
+ "full_name", message->full_name());
std::string nested_prefix =
absl::StrCat(prefix, RubifyConstant(message->name()), "::");
@@ -144,14 +140,12 @@
void GenerateEnumAssignment(absl::string_view prefix, const EnumDescriptor* en,
io::Printer* printer) {
+ printer->Print("$prefix$$name$ = ", "prefix", prefix, "name",
+ RubifyConstant(en->name()));
printer->Print(
- "$prefix$$name$ = ",
- "prefix", prefix,
- "name", RubifyConstant(en->name()));
- printer->Print(
- "::Google::Protobuf::DescriptorPool.generated_pool."
- "lookup(\"$full_name$\").enummodule\n",
- "full_name", en->full_name());
+ "::Google::Protobuf::DescriptorPool.generated_pool."
+ "lookup(\"$full_name$\").enummodule\n",
+ "full_name", en->full_name());
}
int GeneratePackageModules(const FileDescriptor* file, io::Printer* printer) {
@@ -197,9 +191,7 @@
if (need_change_to_module) {
component = PackageToModule(component);
}
- printer->Print(
- "module $name$\n",
- "name", component);
+ printer->Print("module $name$\n", "name", component);
printer->Indent();
levels++;
}
@@ -210,8 +202,7 @@
while (levels > 0) {
levels--;
printer->Outdent();
- printer->Print(
- "end\n");
+ printer->Print("end\n");
}
}
@@ -262,28 +253,7 @@
descriptor_data = "$descriptor_data$"
pool = Google::Protobuf::DescriptorPool.generated_pool
-
-begin
- pool.add_serialized_file(descriptor_data)
-rescue TypeError
- # Compatibility code: will be removed in the next major version.
- require 'google/protobuf/descriptor_pb'
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
- parsed.clear_dependency
- serialized = parsed.class.encode(parsed)
- file = pool.add_serialized_file(serialized)
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
- imports = [
-$imports$ ]
- imports.each do |type_name, expected_filename|
- import_file = pool.lookup(type_name).file_descriptor
- if import_file.name != expected_filename
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
- end
- end
- warn "Each proto file must use a consistent fully-qualified name."
- warn "This will become an error in the next major version."
-end
+pool.add_serialized_file(descriptor_data)
)",
"descriptor_data",
@@ -304,16 +274,12 @@
if (file->dependency_count() != 0) {
for (int i = 0; i < file->dependency_count(); i++) {
- printer->Print("require '$name$'\n", "name", GetRequireName(file->dependency(i)->name()));
+ printer->Print("require '$name$'\n", "name",
+ GetRequireName(file->dependency(i)->name()));
}
printer->Print("\n");
}
- // TODO: Remove this when ruby supports extensions.
- if (file->extension_count() > 0) {
- ABSL_LOG(WARNING) << "Extensions are not yet supported in Ruby.";
- }
-
GenerateBinaryDescriptor(file, printer, error);
int levels = GeneratePackageModules(file, printer);
@@ -328,17 +294,10 @@
return true;
}
-bool Generator::Generate(
- const FileDescriptor* file,
- const std::string& parameter,
- GeneratorContext* generator_context,
- std::string* error) const {
- if (FileDescriptorLegacy(file).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_UNKNOWN) {
- *error = "Invalid or unsupported proto syntax";
- return false;
- }
-
+bool Generator::Generate(const FileDescriptor* file,
+ const std::string& parameter,
+ GeneratorContext* generator_context,
+ std::string* error) const {
std::unique_ptr<io::ZeroCopyOutputStream> output(
generator_context->Open(GetOutputFilename(file->name())));
io::Printer printer(output.get(), '$');
diff --git a/src/google/protobuf/compiler/rust/BUILD.bazel b/src/google/protobuf/compiler/rust/BUILD.bazel
index 5d84df3..3dd9b24 100644
--- a/src/google/protobuf/compiler/rust/BUILD.bazel
+++ b/src/google/protobuf/compiler/rust/BUILD.bazel
@@ -17,6 +17,7 @@
],
deps = [
":context",
+ ":enum",
":message",
":naming",
":relative_path",
@@ -38,10 +39,12 @@
deps = [
":accessors",
":context",
+ ":enum",
":naming",
":oneof",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler/cpp:names",
+ "//upb_generator:mangle",
"@com_google_absl//absl/log:absl_check",
"@com_google_absl//absl/log:absl_log",
],
@@ -66,6 +69,7 @@
strip_include_prefix = "/src",
deps = [
":context",
+ ":helpers",
":naming",
"//src/google/protobuf:protobuf_nowkt",
"//src/google/protobuf/compiler/cpp:names_internal",
@@ -93,6 +97,34 @@
)
cc_library(
+ name = "enum",
+ srcs = ["enum.cc"],
+ hdrs = ["enum.h"],
+ copts = COPTS,
+ strip_include_prefix = "/src",
+ deps = [
+ ":context",
+ "//src/google/protobuf:protobuf_nowkt",
+ "//src/google/protobuf/compiler/cpp:names_internal",
+ "@com_google_absl//absl/container:flat_hash_map",
+ "@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_absl//absl/log:absl_check",
+ "@com_google_absl//absl/strings",
+ ],
+)
+
+cc_test(
+ name = "enum_test",
+ srcs = ["enum_test.cc"],
+ deps = [
+ ":enum",
+ "@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
+cc_library(
name = "naming",
srcs = ["naming.cc"],
hdrs = ["naming.h"],
@@ -142,3 +174,16 @@
"@com_google_googletest//:gtest_main",
],
)
+
+cc_library(
+ name = "helpers",
+ srcs = ["accessors/helpers.cc"],
+ hdrs = ["accessors/helpers.h"],
+ strip_include_prefix = "/src",
+ deps = [
+ ":context",
+ "//src/google/protobuf:protobuf_nowkt",
+ "@com_google_absl//absl/log:absl_check",
+ "@com_google_absl//absl/strings",
+ ],
+)
diff --git a/src/google/protobuf/compiler/rust/accessors/accessor_generator.h b/src/google/protobuf/compiler/rust/accessors/accessor_generator.h
index dcefbe8..6aad7bb 100644
--- a/src/google/protobuf/compiler/rust/accessors/accessor_generator.h
+++ b/src/google/protobuf/compiler/rust/accessors/accessor_generator.h
@@ -26,25 +26,26 @@
AccessorGenerator() = default;
virtual ~AccessorGenerator() = default;
- AccessorGenerator(const AccessorGenerator &) = delete;
- AccessorGenerator(AccessorGenerator &&) = delete;
- AccessorGenerator &operator=(const AccessorGenerator &) = delete;
- AccessorGenerator &operator=(AccessorGenerator &&) = delete;
+ AccessorGenerator(const AccessorGenerator&) = delete;
+ AccessorGenerator(AccessorGenerator&&) = delete;
+ AccessorGenerator& operator=(const AccessorGenerator&) = delete;
+ AccessorGenerator& operator=(AccessorGenerator&&) = delete;
// Constructs a generator for the given field.
//
// Returns `nullptr` if there is no known generator for this field.
- static std::unique_ptr<AccessorGenerator> For(Context<FieldDescriptor> field);
+ static std::unique_ptr<AccessorGenerator> For(Context& ctx,
+ const FieldDescriptor& field);
- void GenerateMsgImpl(Context<FieldDescriptor> field) const {
- InMsgImpl(field);
+ void GenerateMsgImpl(Context& ctx, const FieldDescriptor& field) const {
+ InMsgImpl(ctx, field);
}
- void GenerateExternC(Context<FieldDescriptor> field) const {
- InExternC(field);
+ void GenerateExternC(Context& ctx, const FieldDescriptor& field) const {
+ InExternC(ctx, field);
}
- void GenerateThunkCc(Context<FieldDescriptor> field) const {
- ABSL_CHECK(field.is_cpp());
- InThunkCc(field);
+ void GenerateThunkCc(Context& ctx, const FieldDescriptor& field) const {
+ ABSL_CHECK(ctx.is_cpp());
+ InThunkCc(ctx, field);
}
private:
@@ -54,53 +55,53 @@
// prologue to inject variables automatically.
// Called inside the main inherent `impl Msg {}` block.
- virtual void InMsgImpl(Context<FieldDescriptor> field) const {}
+ virtual void InMsgImpl(Context& ctx, const FieldDescriptor& field) const {}
// Called inside of a message's `extern "C" {}` block.
- virtual void InExternC(Context<FieldDescriptor> field) const {}
+ virtual void InExternC(Context& ctx, const FieldDescriptor& field) const {}
// Called inside of an `extern "C" {}` block in the `.thunk.cc` file, if such
// a file is being generated.
- virtual void InThunkCc(Context<FieldDescriptor> field) const {}
+ virtual void InThunkCc(Context& ctx, const FieldDescriptor& field) const {}
};
class SingularScalar final : public AccessorGenerator {
public:
~SingularScalar() override = default;
- void InMsgImpl(Context<FieldDescriptor> field) const override;
- void InExternC(Context<FieldDescriptor> field) const override;
- void InThunkCc(Context<FieldDescriptor> field) const override;
+ void InMsgImpl(Context& ctx, const FieldDescriptor& field) const override;
+ void InExternC(Context& ctx, const FieldDescriptor& field) const override;
+ void InThunkCc(Context& ctx, const FieldDescriptor& field) const override;
};
class SingularString final : public AccessorGenerator {
public:
~SingularString() override = default;
- void InMsgImpl(Context<FieldDescriptor> field) const override;
- void InExternC(Context<FieldDescriptor> field) const override;
- void InThunkCc(Context<FieldDescriptor> field) const override;
+ void InMsgImpl(Context& ctx, const FieldDescriptor& field) const override;
+ void InExternC(Context& ctx, const FieldDescriptor& field) const override;
+ void InThunkCc(Context& ctx, const FieldDescriptor& field) const override;
};
class SingularMessage final : public AccessorGenerator {
public:
~SingularMessage() override = default;
- void InMsgImpl(Context<FieldDescriptor> field) const override;
- void InExternC(Context<FieldDescriptor> field) const override;
- void InThunkCc(Context<FieldDescriptor> field) const override;
+ void InMsgImpl(Context& ctx, const FieldDescriptor& field) const override;
+ void InExternC(Context& ctx, const FieldDescriptor& field) const override;
+ void InThunkCc(Context& ctx, const FieldDescriptor& field) const override;
};
class RepeatedScalar final : public AccessorGenerator {
public:
~RepeatedScalar() override = default;
- void InMsgImpl(Context<FieldDescriptor> field) const override;
- void InExternC(Context<FieldDescriptor> field) const override;
- void InThunkCc(Context<FieldDescriptor> field) const override;
+ void InMsgImpl(Context& ctx, const FieldDescriptor& field) const override;
+ void InExternC(Context& ctx, const FieldDescriptor& field) const override;
+ void InThunkCc(Context& ctx, const FieldDescriptor& field) const override;
};
class UnsupportedField final : public AccessorGenerator {
public:
explicit UnsupportedField(std::string reason) : reason_(std::move(reason)) {}
~UnsupportedField() override = default;
- void InMsgImpl(Context<FieldDescriptor> field) const override;
+ void InMsgImpl(Context& ctx, const FieldDescriptor& field) const override;
private:
std::string reason_;
@@ -109,8 +110,9 @@
class Map final : public AccessorGenerator {
public:
~Map() override = default;
- void InMsgImpl(Context<FieldDescriptor> field) const override;
- void InExternC(Context<FieldDescriptor> field) const override;
+ void InMsgImpl(Context& ctx, const FieldDescriptor& field) const override;
+ void InExternC(Context& ctx, const FieldDescriptor& field) const override;
+ void InThunkCc(Context& ctx, const FieldDescriptor& field) const override;
};
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/accessors/accessors.cc b/src/google/protobuf/compiler/rust/accessors/accessors.cc
index 2f08da5..d4c93f0 100644
--- a/src/google/protobuf/compiler/rust/accessors/accessors.cc
+++ b/src/google/protobuf/compiler/rust/accessors/accessors.cc
@@ -23,16 +23,29 @@
namespace {
std::unique_ptr<AccessorGenerator> AccessorGeneratorFor(
- Context<FieldDescriptor> field) {
- const FieldDescriptor& desc = field.desc();
+ Context& ctx, const FieldDescriptor& field) {
// TODO: We do not support [ctype=FOO] (used to set the field
// type in C++ to cord or string_piece) in V0.6 API.
- if (desc.options().has_ctype()) {
+ if (field.options().has_ctype()) {
return std::make_unique<UnsupportedField>(
"fields with ctype not supported");
}
- switch (desc.type()) {
+ if (field.is_map()) {
+ auto value_type = field.message_type()->map_value()->type();
+ switch (value_type) {
+ case FieldDescriptor::TYPE_BYTES:
+ case FieldDescriptor::TYPE_ENUM:
+ case FieldDescriptor::TYPE_MESSAGE:
+ return std::make_unique<UnsupportedField>(
+ "Maps with values of type bytes, enum and message are not "
+ "supported");
+ default:
+ return std::make_unique<Map>();
+ }
+ }
+
+ switch (field.type()) {
case FieldDescriptor::TYPE_INT32:
case FieldDescriptor::TYPE_INT64:
case FieldDescriptor::TYPE_FIXED32:
@@ -46,35 +59,22 @@
case FieldDescriptor::TYPE_FLOAT:
case FieldDescriptor::TYPE_DOUBLE:
case FieldDescriptor::TYPE_BOOL:
- if (desc.is_repeated()) {
+ if (field.is_repeated()) {
return std::make_unique<RepeatedScalar>();
}
return std::make_unique<SingularScalar>();
case FieldDescriptor::TYPE_BYTES:
case FieldDescriptor::TYPE_STRING:
- if (desc.is_repeated()) {
+ if (field.is_repeated()) {
return std::make_unique<UnsupportedField>("repeated str not supported");
}
return std::make_unique<SingularString>();
case FieldDescriptor::TYPE_MESSAGE:
- if (desc.is_map()) {
- // This switch statement will be removed as we support all map
- // value types.
- switch (desc.message_type()->map_value()->type()) {
- case FieldDescriptor::TYPE_STRING:
- case FieldDescriptor::TYPE_ENUM:
- case FieldDescriptor::TYPE_MESSAGE:
- return std::make_unique<UnsupportedField>(
- "message types in maps are not supported");
- default:
- return std::make_unique<Map>();
- }
- }
- if (desc.is_repeated()) {
+ if (field.is_repeated()) {
return std::make_unique<UnsupportedField>("repeated msg not supported");
}
- if (!field.generator_context().is_file_in_current_crate(
- desc.message_type()->file())) {
+ if (!ctx.generator_context().is_file_in_current_crate(
+ *field.message_type()->file())) {
return std::make_unique<UnsupportedField>(
"message fields that are imported from another proto_library"
" (defined in a separate Rust crate) are not supported");
@@ -88,21 +88,21 @@
return std::make_unique<UnsupportedField>("group not supported");
}
- ABSL_LOG(FATAL) << "Unexpected field type: " << desc.type();
+ ABSL_LOG(FATAL) << "Unexpected field type: " << field.type();
}
} // namespace
-void GenerateAccessorMsgImpl(Context<FieldDescriptor> field) {
- AccessorGeneratorFor(field)->GenerateMsgImpl(field);
+void GenerateAccessorMsgImpl(Context& ctx, const FieldDescriptor& field) {
+ AccessorGeneratorFor(ctx, field)->GenerateMsgImpl(ctx, field);
}
-void GenerateAccessorExternC(Context<FieldDescriptor> field) {
- AccessorGeneratorFor(field)->GenerateExternC(field);
+void GenerateAccessorExternC(Context& ctx, const FieldDescriptor& field) {
+ AccessorGeneratorFor(ctx, field)->GenerateExternC(ctx, field);
}
-void GenerateAccessorThunkCc(Context<FieldDescriptor> field) {
- AccessorGeneratorFor(field)->GenerateThunkCc(field);
+void GenerateAccessorThunkCc(Context& ctx, const FieldDescriptor& field) {
+ AccessorGeneratorFor(ctx, field)->GenerateThunkCc(ctx, field);
}
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/accessors/accessors.h b/src/google/protobuf/compiler/rust/accessors/accessors.h
index 05687e5..801bff2 100644
--- a/src/google/protobuf/compiler/rust/accessors/accessors.h
+++ b/src/google/protobuf/compiler/rust/accessors/accessors.h
@@ -16,9 +16,9 @@
namespace compiler {
namespace rust {
-void GenerateAccessorMsgImpl(Context<FieldDescriptor> field);
-void GenerateAccessorExternC(Context<FieldDescriptor> field);
-void GenerateAccessorThunkCc(Context<FieldDescriptor> field);
+void GenerateAccessorMsgImpl(Context& ctx, const FieldDescriptor& field);
+void GenerateAccessorExternC(Context& ctx, const FieldDescriptor& field);
+void GenerateAccessorThunkCc(Context& ctx, const FieldDescriptor& field);
} // namespace rust
} // namespace compiler
diff --git a/src/google/protobuf/compiler/rust/accessors/helpers.cc b/src/google/protobuf/compiler/rust/accessors/helpers.cc
new file mode 100644
index 0000000..ba41abd
--- /dev/null
+++ b/src/google/protobuf/compiler/rust/accessors/helpers.cc
@@ -0,0 +1,88 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "google/protobuf/compiler/rust/accessors/helpers.h"
+
+#include <cmath>
+#include <limits>
+#include <string>
+
+#include "absl/log/absl_log.h"
+#include "absl/strings/escaping.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/str_format.h"
+#include "google/protobuf/descriptor.h"
+#include "google/protobuf/io/strtod.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace rust {
+
+std::string DefaultValue(const FieldDescriptor& field) {
+ switch (field.type()) {
+ case FieldDescriptor::TYPE_DOUBLE:
+ if (std::isfinite(field.default_value_double())) {
+ return absl::StrCat(io::SimpleDtoa(field.default_value_double()),
+ "f64");
+ } else if (std::isnan(field.default_value_double())) {
+ return std::string("f64::NAN");
+ } else if (field.default_value_double() ==
+ std::numeric_limits<double>::infinity()) {
+ return std::string("f64::INFINITY");
+ } else if (field.default_value_double() ==
+ -std::numeric_limits<double>::infinity()) {
+ return std::string("f64::NEG_INFINITY");
+ } else {
+ ABSL_LOG(FATAL) << "unreachable";
+ }
+ case FieldDescriptor::TYPE_FLOAT:
+ if (std::isfinite(field.default_value_float())) {
+ return absl::StrCat(io::SimpleFtoa(field.default_value_float()), "f32");
+ } else if (std::isnan(field.default_value_float())) {
+ return std::string("f32::NAN");
+ } else if (field.default_value_float() ==
+ std::numeric_limits<float>::infinity()) {
+ return std::string("f32::INFINITY");
+ } else if (field.default_value_float() ==
+ -std::numeric_limits<float>::infinity()) {
+ return std::string("f32::NEG_INFINITY");
+ } else {
+ ABSL_LOG(FATAL) << "unreachable";
+ }
+ case FieldDescriptor::TYPE_INT32:
+ case FieldDescriptor::TYPE_SFIXED32:
+ case FieldDescriptor::TYPE_SINT32:
+ return absl::StrFormat("%d", field.default_value_int32());
+ case FieldDescriptor::TYPE_INT64:
+ case FieldDescriptor::TYPE_SFIXED64:
+ case FieldDescriptor::TYPE_SINT64:
+ return absl::StrFormat("%d", field.default_value_int64());
+ case FieldDescriptor::TYPE_FIXED64:
+ case FieldDescriptor::TYPE_UINT64:
+ return absl::StrFormat("%u", field.default_value_uint64());
+ case FieldDescriptor::TYPE_FIXED32:
+ case FieldDescriptor::TYPE_UINT32:
+ return absl::StrFormat("%u", field.default_value_uint32());
+ case FieldDescriptor::TYPE_BOOL:
+ return absl::StrFormat("%v", field.default_value_bool());
+ case FieldDescriptor::TYPE_STRING:
+ case FieldDescriptor::TYPE_BYTES:
+ return absl::StrFormat("b\"%s\"",
+ absl::CHexEscape(field.default_value_string()));
+ case FieldDescriptor::TYPE_GROUP:
+ case FieldDescriptor::TYPE_MESSAGE:
+ case FieldDescriptor::TYPE_ENUM:
+ ABSL_LOG(FATAL) << "Unsupported field type: " << field.type_name();
+ }
+ ABSL_LOG(FATAL) << "unreachable";
+}
+
+} // namespace rust
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/compiler/rust/accessors/helpers.h b/src/google/protobuf/compiler/rust/accessors/helpers.h
new file mode 100644
index 0000000..ee2c429
--- /dev/null
+++ b/src/google/protobuf/compiler/rust/accessors/helpers.h
@@ -0,0 +1,32 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef GOOGLE_PROTOBUF_COMPILER_RUST_ACCESSORS_HELPERS_H__
+#define GOOGLE_PROTOBUF_COMPILER_RUST_ACCESSORS_HELPERS_H__
+
+#include <string>
+
+#include "google/protobuf/descriptor.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace rust {
+
+// Returns the field's default value as a Rust literal / identifier.
+//
+// Both strings and bytes are represented as a byte string literal, i.e. in the
+// format `b"default value here"`. It is the caller's responsibility to convert
+// the byte literal to an actual string, if needed.
+std::string DefaultValue(const FieldDescriptor& field);
+
+} // namespace rust
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
+
+#endif // GOOGLE_PROTOBUF_COMPILER_RUST_ACCESSORS_HELPERS_H__
diff --git a/src/google/protobuf/compiler/rust/accessors/map.cc b/src/google/protobuf/compiler/rust/accessors/map.cc
index f7eda84..4061d73 100644
--- a/src/google/protobuf/compiler/rust/accessors/map.cc
+++ b/src/google/protobuf/compiler/rust/accessors/map.cc
@@ -5,6 +5,7 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/compiler/rust/accessors/accessor_generator.h"
#include "google/protobuf/compiler/rust/context.h"
#include "google/protobuf/compiler/rust/naming.h"
@@ -16,58 +17,102 @@
namespace compiler {
namespace rust {
-void Map::InMsgImpl(Context<FieldDescriptor> field) const {
- auto& key_type = *field.desc().message_type()->map_key();
- auto& value_type = *field.desc().message_type()->map_value();
+void Map::InMsgImpl(Context& ctx, const FieldDescriptor& field) const {
+ auto& key_type = *field.message_type()->map_key();
+ auto& value_type = *field.message_type()->map_value();
- field.Emit({{"field", field.desc().name()},
- {"Key", PrimitiveRsTypeName(key_type)},
- {"Value", PrimitiveRsTypeName(value_type)},
- {"getter_thunk", Thunk(field, "get")},
- {"getter_thunk_mut", Thunk(field, "get_mut")},
- {"getter",
- [&] {
- if (field.is_upb()) {
- field.Emit({}, R"rs(
- pub fn r#$field$(&self) -> $pb$::MapView<'_, $Key$, $Value$> {
- let inner = unsafe {
- $getter_thunk$(self.inner.msg)
- }.map_or_else(|| unsafe {$pbr$::empty_map()}, |raw| {
- $pbr$::MapInner{ raw, arena: &self.inner.arena }
- });
- $pb$::MapView::from_inner($pbi$::Private, inner)
- }
-
- pub fn r#$field$_mut(&mut self)
- -> $pb$::MapMut<'_, $Key$, $Value$> {
- let raw = unsafe {
- $getter_thunk_mut$(self.inner.msg, self.inner.arena.raw())
- };
- let inner = $pbr$::MapInner{ raw, arena: &self.inner.arena };
- $pb$::MapMut::from_inner($pbi$::Private, inner)
- }
- )rs");
- }
- }}},
- R"rs(
+ ctx.Emit({{"field", field.name()},
+ {"Key", PrimitiveRsTypeName(key_type)},
+ {"Value", PrimitiveRsTypeName(value_type)},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"getter",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$(&self)
+ -> $pb$::View<'_, $pb$::Map<$Key$, $Value$>> {
+ let inner = unsafe {
+ $getter_thunk$(self.inner.msg)
+ }.map_or_else(|| unsafe {$pbr$::empty_map()}, |raw| {
+ $pbr$::MapInner{
+ raw,
+ arena: &self.inner.arena,
+ _phantom_key: std::marker::PhantomData,
+ _phantom_value: std::marker::PhantomData,
+ }
+ });
+ $pb$::MapView::from_inner($pbi$::Private, inner)
+ })rs");
+ } else {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$(&self)
+ -> $pb$::View<'_, $pb$::Map<$Key$, $Value$>> {
+ let inner = $pbr$::MapInner {
+ raw: unsafe { $getter_thunk$(self.inner.msg) },
+ _phantom_key: std::marker::PhantomData,
+ _phantom_value: std::marker::PhantomData,
+ };
+ $pb$::MapView::from_inner($pbi$::Private, inner)
+ })rs");
+ }
+ }},
+ {"getter_mut",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$_mut(&mut self)
+ -> $pb$::Mut<'_, $pb$::Map<$Key$, $Value$>> {
+ let raw = unsafe {
+ $getter_mut_thunk$(self.inner.msg,
+ self.inner.arena.raw())
+ };
+ let inner = $pbr$::MapInner{
+ raw,
+ arena: &self.inner.arena,
+ _phantom_key: std::marker::PhantomData,
+ _phantom_value: std::marker::PhantomData,
+ };
+ $pb$::MapMut::from_inner($pbi$::Private, inner)
+ })rs");
+ } else {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$_mut(&mut self)
+ -> $pb$::Mut<'_, $pb$::Map<$Key$, $Value$>> {
+ let inner = $pbr$::MapInner {
+ raw: unsafe { $getter_mut_thunk$(self.inner.msg) },
+ _phantom_key: std::marker::PhantomData,
+ _phantom_value: std::marker::PhantomData,
+ };
+ $pb$::MapMut::from_inner($pbi$::Private, inner)
+ })rs");
+ }
+ }}},
+ R"rs(
$getter$
+ $getter_mut$
)rs");
}
-void Map::InExternC(Context<FieldDescriptor> field) const {
- field.Emit(
+void Map::InExternC(Context& ctx, const FieldDescriptor& field) const {
+ ctx.Emit(
{
- {"getter_thunk", Thunk(field, "get")},
- {"getter_thunk_mut", Thunk(field, "get_mut")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
{"getter",
[&] {
- if (field.is_upb()) {
- field.Emit({}, R"rs(
- fn $getter_thunk$(raw_msg: $pbi$::RawMessage)
- -> Option<$pbi$::RawMap>;
- fn $getter_thunk_mut$(raw_msg: $pbi$::RawMessage,
- arena: $pbi$::RawArena) -> $pbi$::RawMap;
- )rs");
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ fn $getter_thunk$(raw_msg: $pbi$::RawMessage)
+ -> Option<$pbi$::RawMap>;
+ fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage,
+ arena: $pbi$::RawArena) -> $pbi$::RawMap;
+ )rs");
+ } else {
+ ctx.Emit({}, R"rs(
+ fn $getter_thunk$(msg: $pbi$::RawMessage) -> $pbi$::RawMap;
+ fn $getter_mut_thunk$(msg: $pbi$::RawMessage,) -> $pbi$::RawMap;
+ )rs");
}
}},
},
@@ -76,6 +121,29 @@
)rs");
}
+void Map::InThunkCc(Context& ctx, const FieldDescriptor& field) const {
+ ctx.Emit(
+ {{"field", cpp::FieldName(&field)},
+ {"Key",
+ cpp::PrimitiveTypeName(field.message_type()->map_key()->cpp_type())},
+ {"Value",
+ cpp::PrimitiveTypeName(field.message_type()->map_value()->cpp_type())},
+ {"QualifiedMsg", cpp::QualifiedClassName(field.containing_type())},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"impls",
+ [&] {
+ ctx.Emit(
+ R"cc(
+ const void* $getter_thunk$(const $QualifiedMsg$* msg) {
+ return &msg->$field$();
+ }
+ void* $getter_mut_thunk$($QualifiedMsg$* msg) { return msg->mutable_$field$(); }
+ )cc");
+ }}},
+ "$impls$");
+}
+
} // namespace rust
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/rust/accessors/repeated_scalar.cc b/src/google/protobuf/compiler/rust/accessors/repeated_scalar.cc
index 8f0a762..b88fa9f 100644
--- a/src/google/protobuf/compiler/rust/accessors/repeated_scalar.cc
+++ b/src/google/protobuf/compiler/rust/accessors/repeated_scalar.cc
@@ -17,88 +17,96 @@
namespace compiler {
namespace rust {
-void RepeatedScalar::InMsgImpl(Context<FieldDescriptor> field) const {
- field.Emit({{"field", field.desc().name()},
- {"Scalar", PrimitiveRsTypeName(field.desc())},
- {"getter_thunk", Thunk(field, "get")},
- {"getter_mut_thunk", Thunk(field, "get_mut")},
- {"getter",
- [&] {
- if (field.is_upb()) {
- field.Emit({}, R"rs(
+void RepeatedScalar::InMsgImpl(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"field", field.name()},
+ {"Scalar", PrimitiveRsTypeName(field)},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"getter",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
pub fn r#$field$(&self) -> $pb$::RepeatedView<'_, $Scalar$> {
- let inner = unsafe {
+ unsafe {
$getter_thunk$(
self.inner.msg,
/* optional size pointer */ std::ptr::null(),
) }
- .map_or_else(|| unsafe {$pbr$::empty_array()}, |raw| {
- $pbr$::RepeatedFieldInner{ raw, arena: &self.inner.arena }
- });
- $pb$::RepeatedView::from_inner($pbi$::Private, inner)
+ .map_or_else(
+ $pbr$::empty_array::<$Scalar$>,
+ |raw| unsafe {
+ $pb$::RepeatedView::from_raw($pbi$::Private, raw)
+ }
+ )
}
)rs");
- } else {
- field.Emit({}, R"rs(
+ } else {
+ ctx.Emit({}, R"rs(
pub fn r#$field$(&self) -> $pb$::RepeatedView<'_, $Scalar$> {
- $pb$::RepeatedView::from_inner(
- $pbi$::Private,
- $pbr$::RepeatedFieldInner{
- raw: unsafe { $getter_thunk$(self.inner.msg) },
- _phantom: std::marker::PhantomData,
- },
- )
- }
- )rs");
- }
- }},
- {"clearer_thunk", Thunk(field, "clear")},
- {"field_mutator_getter",
- [&] {
- if (field.is_upb()) {
- field.Emit({}, R"rs(
- pub fn r#$field$_mut(&mut self) -> $pb$::RepeatedMut<'_, $Scalar$> {
- $pb$::RepeatedMut::from_inner(
- $pbi$::Private,
- $pbr$::RepeatedFieldInner{
- raw: unsafe { $getter_mut_thunk$(
- self.inner.msg,
- /* optional size pointer */ std::ptr::null(),
- self.inner.arena.raw(),
- ) },
- arena: &self.inner.arena,
- },
- )
- }
- )rs");
- } else {
- field.Emit({}, R"rs(
- pub fn r#$field$_mut(&mut self) -> $pb$::RepeatedMut<'_, $Scalar$> {
- $pb$::RepeatedMut::from_inner(
+ unsafe {
+ $pb$::RepeatedView::from_raw(
$pbi$::Private,
- $pbr$::RepeatedFieldInner{
- raw: unsafe { $getter_mut_thunk$(self.inner.msg)},
- _phantom: std::marker::PhantomData,
- },
+ unsafe { $getter_thunk$(self.inner.msg) },
)
}
+ }
+ )rs");
+ }
+ }},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"field_mutator_getter",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$_mut(&mut self) -> $pb$::RepeatedMut<'_, $Scalar$> {
+ unsafe {
+ $pb$::RepeatedMut::from_inner(
+ $pbi$::Private,
+ $pbr$::InnerRepeatedMut::new(
+ $pbi$::Private,
+ $getter_mut_thunk$(
+ self.inner.msg,
+ /* optional size pointer */ std::ptr::null(),
+ self.inner.arena.raw(),
+ ),
+ &self.inner.arena,
+ ),
+ )
+ }
+ }
+ )rs");
+ } else {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$_mut(&mut self) -> $pb$::RepeatedMut<'_, $Scalar$> {
+ unsafe {
+ $pb$::RepeatedMut::from_inner(
+ $pbi$::Private,
+ $pbr$::InnerRepeatedMut::new(
+ $pbi$::Private,
+ $getter_mut_thunk$(self.inner.msg),
+ ),
+ )
+ }
+ }
)rs");
- }
- }}},
- R"rs(
+ }
+ }}},
+ R"rs(
$getter$
$field_mutator_getter$
)rs");
}
-void RepeatedScalar::InExternC(Context<FieldDescriptor> field) const {
- field.Emit({{"Scalar", PrimitiveRsTypeName(field.desc())},
- {"getter_thunk", Thunk(field, "get")},
- {"getter_mut_thunk", Thunk(field, "get_mut")},
- {"getter",
- [&] {
- if (field.is_upb()) {
- field.Emit(R"rs(
+void RepeatedScalar::InExternC(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"Scalar", PrimitiveRsTypeName(field)},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"getter",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit(R"rs(
fn $getter_mut_thunk$(
raw_msg: $pbi$::RawMessage,
size: *const usize,
@@ -110,44 +118,45 @@
size: *const usize,
) -> Option<$pbi$::RawRepeatedField>;
)rs");
- } else {
- field.Emit(R"rs(
+ } else {
+ ctx.Emit(R"rs(
fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage) -> $pbi$::RawRepeatedField;
fn $getter_thunk$(raw_msg: $pbi$::RawMessage) -> $pbi$::RawRepeatedField;
)rs");
- }
- }},
- {"clearer_thunk", Thunk(field, "clear")}},
- R"rs(
+ }
+ }},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")}},
+ R"rs(
fn $clearer_thunk$(raw_msg: $pbi$::RawMessage);
$getter$
)rs");
}
-void RepeatedScalar::InThunkCc(Context<FieldDescriptor> field) const {
- field.Emit({{"field", cpp::FieldName(&field.desc())},
- {"Scalar", cpp::PrimitiveTypeName(field.desc().cpp_type())},
- {"QualifiedMsg",
- cpp::QualifiedClassName(field.desc().containing_type())},
- {"clearer_thunk", Thunk(field, "clear")},
- {"getter_thunk", Thunk(field, "get")},
- {"getter_mut_thunk", Thunk(field, "get_mut")},
- {"impls",
- [&] {
- field.Emit(
- R"cc(
- void $clearer_thunk$($QualifiedMsg$* msg) {
- msg->clear_$field$();
- }
- google::protobuf::RepeatedField<$Scalar$>* $getter_mut_thunk$($QualifiedMsg$* msg) {
- return msg->mutable_$field$();
- }
- const google::protobuf::RepeatedField<$Scalar$>& $getter_thunk$($QualifiedMsg$& msg) {
- return msg.$field$();
- }
- )cc");
- }}},
- "$impls$");
+void RepeatedScalar::InThunkCc(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"field", cpp::FieldName(&field)},
+ {"Scalar", cpp::PrimitiveTypeName(field.cpp_type())},
+ {"QualifiedMsg", cpp::QualifiedClassName(field.containing_type())},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"impls",
+ [&] {
+ ctx.Emit(
+ R"cc(
+ void $clearer_thunk$($QualifiedMsg$* msg) {
+ msg->clear_$field$();
+ }
+ google::protobuf::RepeatedField<$Scalar$>* $getter_mut_thunk$($QualifiedMsg$* msg) {
+ return msg->mutable_$field$();
+ }
+ const google::protobuf::RepeatedField<$Scalar$>* $getter_thunk$(
+ const $QualifiedMsg$* msg) {
+ return &msg->$field$();
+ }
+ )cc");
+ }}},
+ "$impls$");
}
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/accessors/singular_message.cc b/src/google/protobuf/compiler/rust/accessors/singular_message.cc
index 26f3358..b94473c 100644
--- a/src/google/protobuf/compiler/rust/accessors/singular_message.cc
+++ b/src/google/protobuf/compiler/rust/accessors/singular_message.cc
@@ -17,74 +17,132 @@
namespace compiler {
namespace rust {
-void SingularMessage::InMsgImpl(Context<FieldDescriptor> field) const {
- Context<Descriptor> d = field.WithDesc(field.desc().message_type());
+void SingularMessage::InMsgImpl(Context& ctx,
+ const FieldDescriptor& field) const {
+ auto& msg = *field.message_type();
+ auto prefix = "crate::" + GetCrateRelativeQualifiedPath(ctx, msg);
- auto prefix = "crate::" + GetCrateRelativeQualifiedPath(d);
-
- if (field.is_cpp()) {
- field.Emit({{"prefix", prefix},
- {"field", field.desc().name()},
- {"getter_thunk", Thunk(field, "get")}},
- R"rs(
- pub fn r#$field$(&self) -> $prefix$View {
- // For C++ kernel, getters automatically return the
- // default_instance if the field is unset.
- let submsg = unsafe { $getter_thunk$(self.inner.msg) };
- $prefix$View::new($pbi$::Private, submsg)
- }
- )rs");
- } else {
- field.Emit({{"prefix", prefix},
- {"field", field.desc().name()},
- {"getter_thunk", Thunk(field, "get")}},
- R"rs(
- pub fn r#$field$(&self) -> $prefix$View {
- let submsg = unsafe { $getter_thunk$(self.inner.msg) };
- // For upb, getters return null if the field is unset, so we need to
- // check for null and return the default instance manually. Note that
- // a null ptr received from upb manifests as Option::None
- match submsg {
+ ctx.Emit(
+ {
+ {"prefix", prefix},
+ {"field", field.name()},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {
+ "view_body",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ let submsg = unsafe { $getter_thunk$(self.inner.msg) };
+ // For upb, getters return null if the field is unset, so we need
+ // to check for null and return the default instance manually.
+ // Note that a nullptr received from upb manifests as Option::None
+ match submsg {
// TODO:(b/304357029)
- None => $prefix$View::new($pbi$::Private, $pbr$::ScratchSpace::zeroed_block($pbi$::Private)),
+ None => $prefix$View::new($pbi$::Private,
+ $pbr$::ScratchSpace::zeroed_block($pbi$::Private)),
Some(field) => $prefix$View::new($pbi$::Private, field),
}
- }
)rs");
- }
+ } else {
+ ctx.Emit({}, R"rs(
+ // For C++ kernel, getters automatically return the
+ // default_instance if the field is unset.
+ let submsg = unsafe { $getter_thunk$(self.inner.msg) };
+ $prefix$View::new($pbi$::Private, submsg)
+ )rs");
+ }
+ },
+ },
+ {"submessage_mut",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ let submsg = unsafe {
+ $getter_mut_thunk$(self.inner.msg, self.inner.arena.raw())
+ };
+ $prefix$Mut::new($pbi$::Private, &mut self.inner, submsg)
+ )rs");
+ } else {
+ ctx.Emit({}, R"rs(
+ let submsg = unsafe { $getter_mut_thunk$(self.inner.msg) };
+ $prefix$Mut::new($pbi$::Private, &mut self.inner, submsg)
+ )rs");
+ }
+ }},
+ },
+ R"rs(
+ pub fn r#$field$(&self) -> $prefix$View {
+ $view_body$
+ }
+
+ pub fn $field$_mut(&mut self) -> $prefix$Mut {
+ $submessage_mut$
+ }
+
+ pub fn $field$_clear(&mut self) {
+ unsafe { $clearer_thunk$(self.inner.msg) }
+ }
+ )rs");
}
-void SingularMessage::InExternC(Context<FieldDescriptor> field) const {
- field.Emit(
+void SingularMessage::InExternC(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit(
{
- {"getter_thunk", Thunk(field, "get")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"getter_mut",
+ [&] {
+ if (ctx.is_cpp()) {
+ ctx.Emit(
+ R"rs(
+ fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage)
+ -> $pbi$::RawMessage;)rs");
+ } else {
+ ctx.Emit(
+ R"rs(fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage,
+ arena: $pbi$::RawArena)
+ -> $pbi$::RawMessage;)rs");
+ }
+ }},
{"ReturnType",
[&] {
- if (field.is_cpp()) {
+ if (ctx.is_cpp()) {
// guaranteed to have a nonnull submsg for the cpp kernel
- field.Emit({}, "$pbi$::RawMessage;");
+ ctx.Emit({}, "$pbi$::RawMessage;");
} else {
// upb kernel may return NULL for a submsg, we can detect this
// in terra rust if the option returned is None
- field.Emit({}, "Option<$pbi$::RawMessage>;");
+ ctx.Emit({}, "Option<$pbi$::RawMessage>;");
}
}},
},
R"rs(
fn $getter_thunk$(raw_msg: $pbi$::RawMessage) -> $ReturnType$;
+ $getter_mut$
+ fn $clearer_thunk$(raw_msg: $pbi$::RawMessage);
)rs");
}
-void SingularMessage::InThunkCc(Context<FieldDescriptor> field) const {
- field.Emit({{"QualifiedMsg",
- cpp::QualifiedClassName(field.desc().containing_type())},
- {"getter_thunk", Thunk(field, "get")},
- {"field", cpp::FieldName(&field.desc())}},
- R"cc(
- const void* $getter_thunk$($QualifiedMsg$* msg) {
- return static_cast<const void*>(&msg->$field$());
- }
- )cc");
+void SingularMessage::InThunkCc(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"QualifiedMsg", cpp::QualifiedClassName(field.containing_type())},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"getter_mut_thunk", ThunkName(ctx, field, "get_mut")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"field", cpp::FieldName(&field)}},
+ R"cc(
+ const void* $getter_thunk$($QualifiedMsg$* msg) {
+ return static_cast<const void*>(&msg->$field$());
+ }
+ void* $getter_mut_thunk$($QualifiedMsg$* msg) {
+ return static_cast<void*>(msg->mutable_$field$());
+ }
+ void $clearer_thunk$($QualifiedMsg$* msg) { msg->clear_$field$(); }
+ )cc");
}
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc b/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc
index b7b7a55..a49cf6c 100644
--- a/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc
+++ b/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc
@@ -5,101 +5,30 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
-#include <cmath>
-#include <limits>
-#include <string>
-
-#include "absl/log/absl_log.h"
-#include "absl/strings/str_cat.h"
-#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/compiler/rust/accessors/accessor_generator.h"
+#include "google/protobuf/compiler/rust/accessors/helpers.h"
#include "google/protobuf/compiler/rust/context.h"
#include "google/protobuf/compiler/rust/naming.h"
#include "google/protobuf/descriptor.h"
-#include "google/protobuf/io/strtod.h"
namespace google {
namespace protobuf {
namespace compiler {
namespace rust {
-void SingularScalar::InMsgImpl(Context<FieldDescriptor> field) const {
- field.Emit(
+void SingularScalar::InMsgImpl(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit(
{
- {"field", field.desc().name()},
- {"Scalar", PrimitiveRsTypeName(field.desc())},
- {"hazzer_thunk", Thunk(field, "has")},
- {"default_value",
- [&] {
- switch (field.desc().type()) {
- case FieldDescriptor::TYPE_DOUBLE:
- if (std::isfinite(field.desc().default_value_double())) {
- return absl::StrCat(
- io::SimpleDtoa(field.desc().default_value_double()),
- "f64");
- } else if (std::isnan(field.desc().default_value_double())) {
- return std::string("f64::NAN");
- } else if (field.desc().default_value_double() ==
- std::numeric_limits<double>::infinity()) {
- return std::string("f64::INFINITY");
- } else if (field.desc().default_value_double() ==
- -std::numeric_limits<double>::infinity()) {
- return std::string("f64::NEG_INFINITY");
- } else {
- ABSL_LOG(FATAL) << "unreachable";
- }
- case FieldDescriptor::TYPE_FLOAT:
- if (std::isfinite(field.desc().default_value_float())) {
- return absl::StrCat(
- io::SimpleFtoa(field.desc().default_value_float()),
- "f32");
- } else if (std::isnan(field.desc().default_value_float())) {
- return std::string("f32::NAN");
- } else if (field.desc().default_value_float() ==
- std::numeric_limits<float>::infinity()) {
- return std::string("f32::INFINITY");
- } else if (field.desc().default_value_float() ==
- -std::numeric_limits<float>::infinity()) {
- return std::string("f32::NEG_INFINITY");
- } else {
- ABSL_LOG(FATAL) << "unreachable";
- }
- case FieldDescriptor::TYPE_INT32:
- case FieldDescriptor::TYPE_SFIXED32:
- case FieldDescriptor::TYPE_SINT32:
- return absl::StrFormat("%d",
- field.desc().default_value_int32());
- case FieldDescriptor::TYPE_INT64:
- case FieldDescriptor::TYPE_SFIXED64:
- case FieldDescriptor::TYPE_SINT64:
- return absl::StrFormat("%d",
- field.desc().default_value_int64());
- case FieldDescriptor::TYPE_FIXED64:
- case FieldDescriptor::TYPE_UINT64:
- return absl::StrFormat("%u",
- field.desc().default_value_uint64());
- case FieldDescriptor::TYPE_FIXED32:
- case FieldDescriptor::TYPE_UINT32:
- return absl::StrFormat("%u",
- field.desc().default_value_uint32());
- case FieldDescriptor::TYPE_BOOL:
- return absl::StrFormat("%v",
- field.desc().default_value_bool());
- case FieldDescriptor::TYPE_STRING:
- case FieldDescriptor::TYPE_GROUP:
- case FieldDescriptor::TYPE_MESSAGE:
- case FieldDescriptor::TYPE_BYTES:
- case FieldDescriptor::TYPE_ENUM:
- ABSL_LOG(FATAL) << "Non-singular scalar field type passed: "
- << field.desc().type_name();
- }
- ABSL_LOG(FATAL) << "unreachable";
- }()},
+ {"field", field.name()},
+ {"Scalar", PrimitiveRsTypeName(field)},
+ {"hazzer_thunk", ThunkName(ctx, field, "has")},
+ {"default_value", DefaultValue(field)},
{"getter",
[&] {
- field.Emit({}, R"rs(
+ ctx.Emit({}, R"rs(
pub fn r#$field$(&self) -> $Scalar$ {
unsafe { $getter_thunk$(self.inner.msg) }
}
@@ -107,9 +36,9 @@
}},
{"getter_opt",
[&] {
- if (!field.desc().is_optional()) return;
- if (!field.desc().has_presence()) return;
- field.Emit({}, R"rs(
+ if (!field.is_optional()) return;
+ if (!field.has_presence()) return;
+ ctx.Emit({}, R"rs(
pub fn r#$field$_opt(&self) -> $pb$::Optional<$Scalar$> {
if !unsafe { $hazzer_thunk$(self.inner.msg) } {
return $pb$::Optional::Unset($default_value$);
@@ -119,26 +48,13 @@
}
)rs");
}},
- {"getter_thunk", Thunk(field, "get")},
- {"setter_thunk", Thunk(field, "set")},
- {"clearer_thunk", Thunk(field, "clear")},
- {"field_setter",
- [&] {
- if (field.desc().has_presence()) {
- field.Emit({}, R"rs(
- pub fn r#$field$_set(&mut self, val: Option<$Scalar$>) {
- match val {
- Some(val) => unsafe { $setter_thunk$(self.inner.msg, val) },
- None => unsafe { $clearer_thunk$(self.inner.msg) },
- }
- }
- )rs");
- }
- }},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"setter_thunk", ThunkName(ctx, field, "set")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
{"field_mutator_getter",
[&] {
- if (field.desc().has_presence()) {
- field.Emit({}, R"rs(
+ if (field.has_presence()) {
+ ctx.Emit({}, R"rs(
pub fn r#$field$_mut(&mut self) -> $pb$::FieldEntry<'_, $Scalar$> {
static VTABLE: $pbi$::PrimitiveOptionalMutVTable<$Scalar$> =
$pbi$::PrimitiveOptionalMutVTable::new(
@@ -161,7 +77,7 @@
}
)rs");
} else {
- field.Emit({}, R"rs(
+ ctx.Emit({}, R"rs(
pub fn r#$field$_mut(&mut self) -> $pb$::Mut<'_, $Scalar$> {
static VTABLE: $pbi$::PrimitiveVTable<$Scalar$> =
$pbi$::PrimitiveVTable::new(
@@ -170,18 +86,23 @@
$setter_thunk$,
);
- $pb$::PrimitiveMut::from_singular(
- $pbi$::Private,
- unsafe {
+ // SAFETY:
+ // - The message is valid for the output lifetime.
+ // - The vtable is valid for the field.
+ // - There is no way to mutate the element for the output
+ // lifetime except through this mutator.
+ unsafe {
+ $pb$::PrimitiveMut::from_inner(
+ $pbi$::Private,
$pbi$::RawVTableMutator::new(
$pbi$::Private,
$pbr$::MutatorMessageRef::new(
$pbi$::Private, &mut self.inner
),
&VTABLE,
- )
- },
- )
+ ),
+ )
+ }
}
)rs");
}
@@ -190,60 +111,61 @@
R"rs(
$getter$
$getter_opt$
- $field_setter$
$field_mutator_getter$
)rs");
}
-void SingularScalar::InExternC(Context<FieldDescriptor> field) const {
- field.Emit(
- {{"Scalar", PrimitiveRsTypeName(field.desc())},
- {"hazzer_thunk", Thunk(field, "has")},
- {"getter_thunk", Thunk(field, "get")},
- {"setter_thunk", Thunk(field, "set")},
- {"clearer_thunk", Thunk(field, "clear")},
- {"hazzer",
- [&] {
- if (field.desc().has_presence()) {
- field.Emit(
- R"rs(fn $hazzer_thunk$(raw_msg: $pbi$::RawMessage) -> bool;)rs");
- }
- }}},
- R"rs(
- $hazzer$
+void SingularScalar::InExternC(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"Scalar", PrimitiveRsTypeName(field)},
+ {"hazzer_thunk", ThunkName(ctx, field, "has")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"setter_thunk", ThunkName(ctx, field, "set")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"with_presence_fields_thunks",
+ [&] {
+ if (field.has_presence()) {
+ ctx.Emit(
+ R"rs(
+ fn $hazzer_thunk$(raw_msg: $pbi$::RawMessage) -> bool;
+ fn $clearer_thunk$(raw_msg: $pbi$::RawMessage);
+ )rs");
+ }
+ }}},
+ R"rs(
+ $with_presence_fields_thunks$
fn $getter_thunk$(raw_msg: $pbi$::RawMessage) -> $Scalar$;
fn $setter_thunk$(raw_msg: $pbi$::RawMessage, val: $Scalar$);
- fn $clearer_thunk$(raw_msg: $pbi$::RawMessage);
)rs");
}
-void SingularScalar::InThunkCc(Context<FieldDescriptor> field) const {
- field.Emit({{"field", cpp::FieldName(&field.desc())},
- {"Scalar", cpp::PrimitiveTypeName(field.desc().cpp_type())},
- {"QualifiedMsg",
- cpp::QualifiedClassName(field.desc().containing_type())},
- {"hazzer_thunk", Thunk(field, "has")},
- {"getter_thunk", Thunk(field, "get")},
- {"setter_thunk", Thunk(field, "set")},
- {"clearer_thunk", Thunk(field, "clear")},
- {"hazzer",
- [&] {
- if (field.desc().has_presence()) {
- field.Emit(R"cc(
- bool $hazzer_thunk$($QualifiedMsg$* msg) {
- return msg->has_$field$();
- }
- )cc");
- }
- }}},
- R"cc(
- $hazzer$;
- $Scalar$ $getter_thunk$($QualifiedMsg$* msg) { return msg->$field$(); }
- void $setter_thunk$($QualifiedMsg$* msg, $Scalar$ val) {
- msg->set_$field$(val);
+void SingularScalar::InThunkCc(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"field", cpp::FieldName(&field)},
+ {"Scalar", cpp::PrimitiveTypeName(field.cpp_type())},
+ {"QualifiedMsg", cpp::QualifiedClassName(field.containing_type())},
+ {"hazzer_thunk", ThunkName(ctx, field, "has")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"setter_thunk", ThunkName(ctx, field, "set")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"with_presence_fields_thunks",
+ [&] {
+ if (field.has_presence()) {
+ ctx.Emit(R"cc(
+ bool $hazzer_thunk$($QualifiedMsg$* msg) {
+ return msg->has_$field$();
+ }
+ void $clearer_thunk$($QualifiedMsg$* msg) { msg->clear_$field$(); }
+ )cc");
}
- void $clearer_thunk$($QualifiedMsg$* msg) { msg->clear_$field$(); }
- )cc");
+ }}},
+ R"cc(
+ $with_presence_fields_thunks$;
+ $Scalar$ $getter_thunk$($QualifiedMsg$* msg) { return msg->$field$(); }
+ void $setter_thunk$($QualifiedMsg$* msg, $Scalar$ val) {
+ msg->set_$field$(val);
+ }
+ )cc");
}
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/accessors/singular_string.cc b/src/google/protobuf/compiler/rust/accessors/singular_string.cc
index 2ba36f6..227c11b 100644
--- a/src/google/protobuf/compiler/rust/accessors/singular_string.cc
+++ b/src/google/protobuf/compiler/rust/accessors/singular_string.cc
@@ -7,10 +7,10 @@
#include <string>
-#include "absl/strings/escaping.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/compiler/rust/accessors/accessor_generator.h"
+#include "google/protobuf/compiler/rust/accessors/helpers.h"
#include "google/protobuf/compiler/rust/context.h"
#include "google/protobuf/compiler/rust/naming.h"
#include "google/protobuf/descriptor.h"
@@ -20,24 +20,25 @@
namespace compiler {
namespace rust {
-void SingularString::InMsgImpl(Context<FieldDescriptor> field) const {
- std::string hazzer_thunk = Thunk(field, "has");
- std::string getter_thunk = Thunk(field, "get");
- std::string setter_thunk = Thunk(field, "set");
- std::string proxied_type = PrimitiveRsTypeName(field.desc());
+void SingularString::InMsgImpl(Context& ctx,
+ const FieldDescriptor& field) const {
+ std::string hazzer_thunk = ThunkName(ctx, field, "has");
+ std::string getter_thunk = ThunkName(ctx, field, "get");
+ std::string setter_thunk = ThunkName(ctx, field, "set");
+ std::string proxied_type = PrimitiveRsTypeName(field);
auto transform_view = [&] {
- if (field.desc().type() == FieldDescriptor::TYPE_STRING) {
- field.Emit(R"rs(
+ if (field.type() == FieldDescriptor::TYPE_STRING) {
+ ctx.Emit(R"rs(
// SAFETY: The runtime doesn't require ProtoStr to be UTF-8.
unsafe { $pb$::ProtoStr::from_utf8_unchecked(view) }
)rs");
} else {
- field.Emit("view");
+ ctx.Emit("view");
}
};
- field.Emit(
+ ctx.Emit(
{
- {"field", field.desc().name()},
+ {"field", field.name()},
{"hazzer_thunk", hazzer_thunk},
{"getter_thunk", getter_thunk},
{"setter_thunk", setter_thunk},
@@ -45,50 +46,46 @@
{"transform_view", transform_view},
{"field_optional_getter",
[&] {
- if (!field.desc().is_optional()) return;
- if (!field.desc().has_presence()) return;
- field.Emit({{"hazzer_thunk", hazzer_thunk},
- {"getter_thunk", getter_thunk},
- {"transform_view", transform_view}},
- R"rs(
+ if (!field.is_optional()) return;
+ if (!field.has_presence()) return;
+ ctx.Emit({{"hazzer_thunk", hazzer_thunk},
+ {"getter_thunk", getter_thunk},
+ {"transform_view", transform_view}},
+ R"rs(
pub fn $field$_opt(&self) -> $pb$::Optional<&$proxied_type$> {
- unsafe {
- let view = $getter_thunk$(self.inner.msg).as_ref();
+ let view = unsafe { $getter_thunk$(self.inner.msg).as_ref() };
$pb$::Optional::new(
$transform_view$ ,
- $hazzer_thunk$(self.inner.msg)
+ unsafe { $hazzer_thunk$(self.inner.msg) }
)
}
- }
)rs");
}},
{"field_mutator_getter",
[&] {
- if (field.desc().has_presence()) {
- field.Emit(
+ if (field.has_presence()) {
+ ctx.Emit(
{
- {"field", field.desc().name()},
+ {"field", field.name()},
{"proxied_type", proxied_type},
- {"default_val",
- absl::CHexEscape(field.desc().default_value_string())},
+ {"default_val", DefaultValue(field)},
{"view_type", proxied_type},
{"transform_field_entry",
[&] {
- if (field.desc().type() ==
- FieldDescriptor::TYPE_STRING) {
- field.Emit(R"rs(
+ if (field.type() == FieldDescriptor::TYPE_STRING) {
+ ctx.Emit(R"rs(
$pb$::ProtoStrMut::field_entry_from_bytes(
$pbi$::Private, out
)
)rs");
} else {
- field.Emit("out");
+ ctx.Emit("out");
}
}},
{"hazzer_thunk", hazzer_thunk},
{"getter_thunk", getter_thunk},
{"setter_thunk", setter_thunk},
- {"clearer_thunk", Thunk(field, "clear")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
},
R"rs(
pub fn $field$_mut(&mut self) -> $pb$::FieldEntry<'_, $proxied_type$> {
@@ -98,7 +95,7 @@
$getter_thunk$,
$setter_thunk$,
$clearer_thunk$,
- b"$default_val$",
+ $default_val$,
)
};
let out = unsafe {
@@ -115,19 +112,18 @@
}
)rs");
} else {
- field.Emit({{"field", field.desc().name()},
- {"proxied_type", proxied_type},
- {"getter_thunk", getter_thunk},
- {"setter_thunk", setter_thunk}},
- R"rs(
+ ctx.Emit({{"field", field.name()},
+ {"proxied_type", proxied_type},
+ {"getter_thunk", getter_thunk},
+ {"setter_thunk", setter_thunk}},
+ R"rs(
pub fn $field$_mut(&mut self) -> $pb$::Mut<'_, $proxied_type$> {
- static VTABLE: $pbi$::BytesMutVTable = unsafe {
+ static VTABLE: $pbi$::BytesMutVTable =
$pbi$::BytesMutVTable::new(
$pbi$::Private,
$getter_thunk$,
$setter_thunk$,
- )
- };
+ );
unsafe {
<$pb$::Mut<$proxied_type$>>::from_inner(
$pbi$::Private,
@@ -155,56 +151,57 @@
)rs");
}
-void SingularString::InExternC(Context<FieldDescriptor> field) const {
- field.Emit({{"hazzer_thunk", Thunk(field, "has")},
- {"getter_thunk", Thunk(field, "get")},
- {"setter_thunk", Thunk(field, "set")},
- {"clearer_thunk", Thunk(field, "clear")},
- {"hazzer",
- [&] {
- if (field.desc().has_presence()) {
- field.Emit(R"rs(
+void SingularString::InExternC(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"hazzer_thunk", ThunkName(ctx, field, "has")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"setter_thunk", ThunkName(ctx, field, "set")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"with_presence_fields_thunks",
+ [&] {
+ if (field.has_presence()) {
+ ctx.Emit(R"rs(
fn $hazzer_thunk$(raw_msg: $pbi$::RawMessage) -> bool;
+ fn $clearer_thunk$(raw_msg: $pbi$::RawMessage);
)rs");
- }
- }}},
- R"rs(
- $hazzer$
+ }
+ }}},
+ R"rs(
+ $with_presence_fields_thunks$
fn $getter_thunk$(raw_msg: $pbi$::RawMessage) -> $pbi$::PtrAndLen;
fn $setter_thunk$(raw_msg: $pbi$::RawMessage, val: $pbi$::PtrAndLen);
- fn $clearer_thunk$(raw_msg: $pbi$::RawMessage);
)rs");
}
-void SingularString::InThunkCc(Context<FieldDescriptor> field) const {
- field.Emit({{"field", cpp::FieldName(&field.desc())},
- {"QualifiedMsg",
- cpp::QualifiedClassName(field.desc().containing_type())},
- {"hazzer_thunk", Thunk(field, "has")},
- {"getter_thunk", Thunk(field, "get")},
- {"setter_thunk", Thunk(field, "set")},
- {"clearer_thunk", Thunk(field, "clear")},
- {"hazzer",
- [&] {
- if (field.desc().has_presence()) {
- field.Emit(R"cc(
- bool $hazzer_thunk$($QualifiedMsg$* msg) {
- return msg->has_$field$();
- }
- void $clearer_thunk$($QualifiedMsg$* msg) { msg->clear_$field$(); }
- )cc");
- }
- }}},
- R"cc(
- $hazzer$;
- ::google::protobuf::rust_internal::PtrAndLen $getter_thunk$($QualifiedMsg$* msg) {
- absl::string_view val = msg->$field$();
- return ::google::protobuf::rust_internal::PtrAndLen(val.data(), val.size());
+void SingularString::InThunkCc(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"field", cpp::FieldName(&field)},
+ {"QualifiedMsg", cpp::QualifiedClassName(field.containing_type())},
+ {"hazzer_thunk", ThunkName(ctx, field, "has")},
+ {"getter_thunk", ThunkName(ctx, field, "get")},
+ {"setter_thunk", ThunkName(ctx, field, "set")},
+ {"clearer_thunk", ThunkName(ctx, field, "clear")},
+ {"with_presence_fields_thunks",
+ [&] {
+ if (field.has_presence()) {
+ ctx.Emit(R"cc(
+ bool $hazzer_thunk$($QualifiedMsg$* msg) {
+ return msg->has_$field$();
+ }
+ void $clearer_thunk$($QualifiedMsg$* msg) { msg->clear_$field$(); }
+ )cc");
}
- void $setter_thunk$($QualifiedMsg$* msg, ::google::protobuf::rust_internal::PtrAndLen s) {
- msg->set_$field$(absl::string_view(s.ptr, s.len));
- }
- )cc");
+ }}},
+ R"cc(
+ $with_presence_fields_thunks$;
+ ::google::protobuf::rust_internal::PtrAndLen $getter_thunk$($QualifiedMsg$* msg) {
+ absl::string_view val = msg->$field$();
+ return ::google::protobuf::rust_internal::PtrAndLen(val.data(), val.size());
+ }
+ void $setter_thunk$($QualifiedMsg$* msg, ::google::protobuf::rust_internal::PtrAndLen s) {
+ msg->set_$field$(absl::string_view(s.ptr, s.len));
+ }
+ )cc");
}
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/accessors/unsupported_field.cc b/src/google/protobuf/compiler/rust/accessors/unsupported_field.cc
index e6bce02..591298a 100644
--- a/src/google/protobuf/compiler/rust/accessors/unsupported_field.cc
+++ b/src/google/protobuf/compiler/rust/accessors/unsupported_field.cc
@@ -15,11 +15,12 @@
namespace compiler {
namespace rust {
-void UnsupportedField::InMsgImpl(Context<FieldDescriptor> field) const {
- field.Emit({{"reason", reason_}}, R"rs(
+void UnsupportedField::InMsgImpl(Context& ctx,
+ const FieldDescriptor& field) const {
+ ctx.Emit({{"reason", reason_}}, R"rs(
// Unsupported! :( Reason: $reason$
)rs");
- field.printer().PrintRaw("\n");
+ ctx.printer().PrintRaw("\n");
}
} // namespace rust
diff --git a/src/google/protobuf/compiler/rust/context.cc b/src/google/protobuf/compiler/rust/context.cc
index 82ac86a..f64e88a 100644
--- a/src/google/protobuf/compiler/rust/context.cc
+++ b/src/google/protobuf/compiler/rust/context.cc
@@ -17,6 +17,7 @@
#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
#include "google/protobuf/compiler/code_generator.h"
+#include "google/protobuf/descriptor.h"
namespace google {
namespace protobuf {
@@ -67,6 +68,14 @@
return opts;
}
+bool IsInCurrentlyGeneratingCrate(Context& ctx, const FileDescriptor& file) {
+ return ctx.generator_context().is_file_in_current_crate(file);
+}
+
+bool IsInCurrentlyGeneratingCrate(Context& ctx, const Descriptor& message) {
+ return IsInCurrentlyGeneratingCrate(ctx, *message.file());
+}
+
} // namespace rust
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/rust/context.h b/src/google/protobuf/compiler/rust/context.h
index ac31e99..1539e2e 100644
--- a/src/google/protobuf/compiler/rust/context.h
+++ b/src/google/protobuf/compiler/rust/context.h
@@ -53,14 +53,14 @@
const std::vector<const FileDescriptor*>* files_in_current_crate)
: files_in_current_crate_(*files_in_current_crate) {}
- const FileDescriptor* primary_file() const {
- return files_in_current_crate_.front();
+ const FileDescriptor& primary_file() const {
+ return *files_in_current_crate_.front();
}
- bool is_file_in_current_crate(const FileDescriptor* f) const {
+ bool is_file_in_current_crate(const FileDescriptor& f) const {
return std::find(files_in_current_crate_.begin(),
files_in_current_crate_.end(),
- f) != files_in_current_crate_.end();
+ &f) != files_in_current_crate_.end();
}
private:
@@ -68,26 +68,20 @@
};
// A context for generating a particular kind of definition.
-// This type acts as an options struct (as in go/totw/173) for most of the
-// generator.
-//
-// `Descriptor` is the type of a descriptor.h class relevant for the current
-// context.
-template <typename Descriptor>
class Context {
public:
- Context(const Options* opts, const Descriptor* desc,
+ Context(const Options* opts,
const RustGeneratorContext* rust_generator_context,
io::Printer* printer)
: opts_(opts),
- desc_(desc),
rust_generator_context_(rust_generator_context),
printer_(printer) {}
- Context(const Context&) = default;
- Context& operator=(const Context&) = default;
+ Context(const Context&) = delete;
+ Context& operator=(const Context&) = delete;
+ Context(Context&&) = default;
+ Context& operator=(Context&&) = default;
- const Descriptor& desc() const { return *desc_; }
const Options& opts() const { return *opts_; }
const RustGeneratorContext& generator_context() const {
return *rust_generator_context_;
@@ -99,19 +93,8 @@
// NOTE: prefer ctx.Emit() over ctx.printer().Emit();
io::Printer& printer() const { return *printer_; }
- // Creates a new context over a different descriptor.
- template <typename D>
- Context<D> WithDesc(const D& desc) const {
- return Context<D>(opts_, &desc, rust_generator_context_, printer_);
- }
-
- template <typename D>
- Context<D> WithDesc(const D* desc) const {
- return Context<D>(opts_, desc, rust_generator_context_, printer_);
- }
-
Context WithPrinter(io::Printer* printer) const {
- return Context(opts_, desc_, rust_generator_context_, printer);
+ return Context(opts_, rust_generator_context_, printer);
}
// Forwards to Emit(), which will likely be called all the time.
@@ -128,10 +111,13 @@
private:
const Options* opts_;
- const Descriptor* desc_;
const RustGeneratorContext* rust_generator_context_;
io::Printer* printer_;
};
+
+bool IsInCurrentlyGeneratingCrate(Context& ctx, const FileDescriptor& file);
+bool IsInCurrentlyGeneratingCrate(Context& ctx, const Descriptor& message);
+
} // namespace rust
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/rust/enum.cc b/src/google/protobuf/compiler/rust/enum.cc
new file mode 100644
index 0000000..4871a34
--- /dev/null
+++ b/src/google/protobuf/compiler/rust/enum.cc
@@ -0,0 +1,365 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "google/protobuf/compiler/rust/enum.h"
+
+#include <cstddef>
+#include <cstdint>
+#include <initializer_list>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/container/flat_hash_map.h"
+#include "absl/container/flat_hash_set.h"
+#include "absl/log/absl_check.h"
+#include "absl/strings/ascii.h"
+#include "absl/strings/match.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/str_join.h"
+#include "absl/strings/string_view.h"
+#include "absl/strings/strip.h"
+#include "absl/types/span.h"
+#include "google/protobuf/compiler/cpp/helpers.h"
+#include "google/protobuf/compiler/rust/context.h"
+#include "google/protobuf/descriptor.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace rust {
+
+namespace {
+
+std::string enumName(const EnumDescriptor& desc) {
+ return cpp::UnderscoresToCamelCase(desc.name(), /*cap first letter=*/true);
+}
+
+// Constructs input for `EnumValues` from an enum descriptor.
+std::vector<std::pair<absl::string_view, int32_t>> enumValuesInput(
+ const EnumDescriptor& desc) {
+ std::vector<std::pair<absl::string_view, int32_t>> result;
+ result.reserve(static_cast<size_t>(desc.value_count()));
+
+ for (int i = 0; i < desc.value_count(); ++i) {
+ result.emplace_back(desc.value(i)->name(), desc.value(i)->number());
+ }
+
+ return result;
+}
+
+} // namespace
+
+std::vector<RustEnumValue> EnumValues(
+ absl::string_view enum_name,
+ absl::Span<const std::pair<absl::string_view, int32_t>> values) {
+ // Enum values may have a prefix of the name of the enum stripped from the
+ // value names in the gencode. This prefix is flexible:
+ // - It can be the original enum name, the name as UpperCamel, or snake_case.
+ // - The stripped prefix may also end in an underscore.
+
+ // The set of prefixes that will be stripped.
+ std::initializer_list<std::string> prefixes = {
+ std::string(enum_name),
+ ScreamingSnakeToUpperCamelCase(enum_name),
+ CamelToSnakeCase(enum_name),
+ };
+
+ absl::flat_hash_set<std::string> seen_by_name;
+ absl::flat_hash_map<int32_t, RustEnumValue*> seen_by_number;
+ std::vector<RustEnumValue> result;
+ // The below code depends on pointer stability of elements in `result`;
+ // this reserve must not be too low.
+ result.reserve(values.size());
+ seen_by_name.reserve(values.size());
+ seen_by_number.reserve(values.size());
+
+ for (const auto& name_and_number : values) {
+ absl::string_view base_value_name = name_and_number.first;
+ for (absl::string_view prefix : prefixes) {
+ if (absl::StartsWithIgnoreCase(base_value_name, prefix)) {
+ base_value_name.remove_prefix(prefix.size());
+
+ // Also strip a joining underscore, if present.
+ absl::ConsumePrefix(&base_value_name, "_");
+
+ // Only strip one prefix.
+ break;
+ }
+ }
+
+ if (base_value_name.empty()) {
+ // The enum value name has a similar name to the enum - don't strip.
+ base_value_name = name_and_number.first;
+ }
+
+ int32_t number = name_and_number.second;
+ std::string rust_value_name =
+ ScreamingSnakeToUpperCamelCase(base_value_name);
+
+ // Invalid identifiers are prefixed with `_`.
+ if (absl::ascii_isdigit(rust_value_name[0])) {
+ rust_value_name = absl::StrCat("_", rust_value_name);
+ }
+
+ if (seen_by_name.contains(rust_value_name)) {
+ // Don't add an alias with the same normalized name.
+ continue;
+ }
+
+ auto it_and_inserted = seen_by_number.try_emplace(number);
+ if (it_and_inserted.second) {
+ // This is the first value with this number; this name is canonical.
+ result.push_back(RustEnumValue{rust_value_name, number});
+ it_and_inserted.first->second = &result.back();
+ } else {
+ // This number has been seen before; this name is an alias.
+ it_and_inserted.first->second->aliases.push_back(rust_value_name);
+ }
+
+ seen_by_name.insert(std::move(rust_value_name));
+ }
+ return result;
+}
+
+std::string CamelToSnakeCase(absl::string_view input) {
+ std::string result;
+ result.reserve(input.size() + 4); // No reallocation for 4 _
+ bool is_first_character = true;
+ bool last_char_was_underscore = false;
+ for (const char c : input) {
+ if (!is_first_character && absl::ascii_isupper(c) &&
+ !last_char_was_underscore) {
+ result += '_';
+ }
+ last_char_was_underscore = c == '_';
+ result += absl::ascii_tolower(c);
+ is_first_character = false;
+ }
+ return result;
+}
+
+std::string ScreamingSnakeToUpperCamelCase(absl::string_view input) {
+ std::string result;
+ bool cap_next_letter = true;
+ for (const char c : input) {
+ if (absl::ascii_isalpha(c)) {
+ if (cap_next_letter) {
+ result += absl::ascii_toupper(c);
+ } else {
+ result += absl::ascii_tolower(c);
+ }
+ cap_next_letter = false;
+ } else if (absl::ascii_isdigit(c)) {
+ result += c;
+ cap_next_letter = true;
+ } else {
+ cap_next_letter = true;
+ }
+ }
+ return result;
+}
+
+void GenerateEnumDefinition(Context& ctx, const EnumDescriptor& desc) {
+ std::string name = enumName(desc);
+ ABSL_CHECK(desc.value_count() > 0);
+ std::vector<RustEnumValue> values =
+ EnumValues(desc.name(), enumValuesInput(desc));
+ ABSL_CHECK(!values.empty());
+
+ ctx.Emit(
+ {
+ {"name", name},
+ {"variants",
+ [&] {
+ for (const auto& value : values) {
+ std::string number_str = absl::StrCat(value.number);
+ // TODO: Replace with open enum variants when stable
+ ctx.Emit({{"variant_name", value.name}, {"number", number_str}},
+ R"rs(
+ pub const $variant_name$: $name$ = $name$($number$);
+ )rs");
+ for (const auto& alias : value.aliases) {
+ ctx.Emit({{"alias_name", alias}, {"number", number_str}},
+ R"rs(
+ pub const $alias_name$: $name$ = $name$($number$);
+ )rs");
+ }
+ }
+ }},
+ // The default value of an enum is the first listed value.
+ // The compiler checks that this is equal to 0 for open enums.
+ {"default_int_value", absl::StrCat(desc.value(0)->number())},
+ {"impl_from_i32",
+ [&] {
+ if (desc.is_closed()) {
+ ctx.Emit({{"name", name},
+ {"known_values_pattern",
+ // TODO: Check validity in UPB/C++.
+ absl::StrJoin(
+ values, "|",
+ [](std::string* o, const RustEnumValue& val) {
+ absl::StrAppend(o, val.number);
+ })}},
+ R"rs(
+ impl $std$::convert::TryFrom<i32> for $name$ {
+ type Error = $pb$::UnknownEnumValue<Self>;
+
+ fn try_from(val: i32) -> Result<$name$, Self::Error> {
+ if matches!(val, $known_values_pattern$) {
+ Ok(Self(val))
+ } else {
+ Err($pb$::UnknownEnumValue::new($pbi$::Private, val))
+ }
+ }
+ }
+ )rs");
+ } else {
+ ctx.Emit({{"name", name}}, R"rs(
+ impl $std$::convert::From<i32> for $name$ {
+ fn from(val: i32) -> $name$ {
+ Self(val)
+ }
+ }
+ )rs");
+ }
+ }},
+ },
+ R"rs(
+ #[repr(transparent)]
+ #[derive(Clone, Copy, PartialEq, Eq)]
+ pub struct $name$(i32);
+
+ #[allow(non_upper_case_globals)]
+ impl $name$ {
+ $variants$
+ }
+
+ impl $std$::convert::From<$name$> for i32 {
+ fn from(val: $name$) -> i32 {
+ val.0
+ }
+ }
+
+ $impl_from_i32$
+
+ impl $std$::default::Default for $name$ {
+ fn default() -> Self {
+ Self($default_int_value$)
+ }
+ }
+
+ impl $std$::fmt::Debug for $name$ {
+ fn fmt(&self, f: &mut $std$::fmt::Formatter<'_>) -> $std$::fmt::Result {
+ f.debug_tuple(stringify!($name$)).field(&self.0).finish()
+ }
+ }
+
+ impl $pb$::Proxied for $name$ {
+ type View<'a> = $name$;
+ type Mut<'a> = $pb$::PrimitiveMut<'a, $name$>;
+ }
+
+ impl $pb$::ViewProxy<'_> for $name$ {
+ type Proxied = $name$;
+
+ fn as_view(&self) -> $name$ {
+ *self
+ }
+
+ fn into_view<'shorter>(self) -> $pb$::View<'shorter, $name$> {
+ self
+ }
+ }
+
+ impl $pb$::SettableValue<$name$> for $name$ {
+ fn set_on<'msg>(
+ self,
+ private: $pbi$::Private,
+ mut mutator: $pb$::Mut<'msg, $name$>
+ ) where $name$: 'msg {
+ mutator.set_primitive(private, self)
+ }
+ }
+
+ impl $pb$::ProxiedWithPresence for $name$ {
+ type PresentMutData<'a> = $pbi$::RawVTableOptionalMutatorData<'a, $name$>;
+ type AbsentMutData<'a> = $pbi$::RawVTableOptionalMutatorData<'a, $name$>;
+
+ fn clear_present_field(
+ present_mutator: Self::PresentMutData<'_>,
+ ) -> Self::AbsentMutData<'_> {
+ present_mutator.clear($pbi$::Private)
+ }
+
+ fn set_absent_to_default(
+ absent_mutator: Self::AbsentMutData<'_>,
+ ) -> Self::PresentMutData<'_> {
+ absent_mutator.set_absent_to_default($pbi$::Private)
+ }
+ }
+
+ unsafe impl $pb$::ProxiedInRepeated for $name$ {
+ fn repeated_len(r: $pb$::View<$pb$::Repeated<Self>>) -> usize {
+ $pbr$::cast_enum_repeated_view($pbi$::Private, r).len()
+ }
+
+ fn repeated_push(r: $pb$::Mut<$pb$::Repeated<Self>>, val: $name$) {
+ $pbr$::cast_enum_repeated_mut($pbi$::Private, r).push(val.into())
+ }
+
+ fn repeated_clear(r: $pb$::Mut<$pb$::Repeated<Self>>) {
+ $pbr$::cast_enum_repeated_mut($pbi$::Private, r).clear()
+ }
+
+ unsafe fn repeated_get_unchecked(
+ r: $pb$::View<$pb$::Repeated<Self>>,
+ index: usize,
+ ) -> $pb$::View<$name$> {
+ // SAFETY: In-bounds as promised by the caller.
+ unsafe {
+ $pbr$::cast_enum_repeated_view($pbi$::Private, r)
+ .get_unchecked(index)
+ .try_into()
+ .unwrap_unchecked()
+ }
+ }
+
+ unsafe fn repeated_set_unchecked(
+ r: $pb$::Mut<$pb$::Repeated<Self>>,
+ index: usize,
+ val: $name$,
+ ) {
+ // SAFETY: In-bounds as promised by the caller.
+ unsafe {
+ $pbr$::cast_enum_repeated_mut($pbi$::Private, r)
+ .set_unchecked(index, val.into())
+ }
+ }
+
+ fn repeated_copy_from(
+ src: $pb$::View<$pb$::Repeated<Self>>,
+ dest: $pb$::Mut<$pb$::Repeated<Self>>,
+ ) {
+ $pbr$::cast_enum_repeated_mut($pbi$::Private, dest)
+ .copy_from($pbr$::cast_enum_repeated_view($pbi$::Private, src))
+ }
+ }
+
+ impl $pbi$::PrimitiveWithRawVTable for $name$ {}
+
+ // SAFETY: this is an enum type
+ unsafe impl $pbi$::Enum for $name$ {
+ const NAME: &'static str = "$name$";
+ }
+ )rs");
+}
+
+} // namespace rust
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/compiler/rust/enum.h b/src/google/protobuf/compiler/rust/enum.h
new file mode 100644
index 0000000..0ef2d68
--- /dev/null
+++ b/src/google/protobuf/compiler/rust/enum.h
@@ -0,0 +1,56 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef GOOGLE_PROTOBUF_COMPILER_RUST_ENUM_H__
+#define GOOGLE_PROTOBUF_COMPILER_RUST_ENUM_H__
+
+#include <cstdint>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/strings/string_view.h"
+#include "absl/types/span.h"
+#include "google/protobuf/compiler/rust/context.h"
+#include "google/protobuf/descriptor.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace rust {
+
+void GenerateEnumDefinition(Context& ctx, const EnumDescriptor& desc);
+
+// An enum value with a unique number and any aliases for it.
+struct RustEnumValue {
+ // The canonical CamelCase name in Rust.
+ std::string name;
+ int32_t number;
+ std::vector<std::string> aliases;
+};
+
+// Returns the list of rust enum variants to produce, along with their aliases.
+// Performs name normalization, deduplication, and alias determination.
+// The `number` and `name` of every returned `RustEnumValue` is unique.
+std::vector<RustEnumValue> EnumValues(
+ absl::string_view enum_name,
+ absl::Span<const std::pair<absl::string_view, int32_t>> values);
+
+// TODO: Unify these with other case-conversion functions.
+
+// Converts an UpperCamel or lowerCamel string to a snake_case string.
+std::string CamelToSnakeCase(absl::string_view input);
+
+// Converts a SCREAMING_SNAKE_CASE string to an UpperCamelCase string.
+std::string ScreamingSnakeToUpperCamelCase(absl::string_view input);
+
+} // namespace rust
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
+
+#endif // GOOGLE_PROTOBUF_COMPILER_RUST_ENUM_H__
diff --git a/src/google/protobuf/compiler/rust/enum_test.cc b/src/google/protobuf/compiler/rust/enum_test.cc
new file mode 100644
index 0000000..e481c18
--- /dev/null
+++ b/src/google/protobuf/compiler/rust/enum_test.cc
@@ -0,0 +1,84 @@
+#include "google/protobuf/compiler/rust/enum.h"
+
+#include <cstdint>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include "absl/strings/string_view.h"
+
+namespace {
+
+using ::google::protobuf::compiler::rust::CamelToSnakeCase;
+using ::google::protobuf::compiler::rust::EnumValues;
+using ::google::protobuf::compiler::rust::RustEnumValue;
+using ::google::protobuf::compiler::rust::ScreamingSnakeToUpperCamelCase;
+using ::testing::AllOf;
+using ::testing::ElementsAre;
+using ::testing::Eq;
+using ::testing::Field;
+using ::testing::IsEmpty;
+
+TEST(EnumTest, CamelToSnakeCase) {
+ // TODO: Review this behavior.
+ EXPECT_EQ(CamelToSnakeCase("CamelCase"), "camel_case");
+ EXPECT_EQ(CamelToSnakeCase("_CamelCase"), "_camel_case");
+ EXPECT_EQ(CamelToSnakeCase("camelCase"), "camel_case");
+ EXPECT_EQ(CamelToSnakeCase("Number2020"), "number2020");
+ EXPECT_EQ(CamelToSnakeCase("Number_2020"), "number_2020");
+ EXPECT_EQ(CamelToSnakeCase("camelCase_"), "camel_case_");
+ EXPECT_EQ(CamelToSnakeCase("CamelCaseTrio"), "camel_case_trio");
+ EXPECT_EQ(CamelToSnakeCase("UnderIn_Middle"), "under_in_middle");
+ EXPECT_EQ(CamelToSnakeCase("Camel_Case"), "camel_case");
+ EXPECT_EQ(CamelToSnakeCase("Camel__Case"), "camel__case");
+ EXPECT_EQ(CamelToSnakeCase("CAMEL_CASE"), "c_a_m_e_l_c_a_s_e");
+}
+
+TEST(EnumTest, ScreamingSnakeToUpperCamelCase) {
+ // TODO: Review this behavior.
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("CAMEL_CASE"), "CamelCase");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("NUMBER2020"), "Number2020");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("NUMBER_2020"), "Number2020");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("FOO_4040_BAR"), "Foo4040Bar");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("FOO_4040bar"), "Foo4040Bar");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("_CAMEL_CASE"), "CamelCase");
+
+ // This function doesn't currently preserve prefix/suffix underscore,
+ // while CamelToSnakeCase does.
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("CAMEL_CASE_"), "CamelCase");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("camel_case"), "CamelCase");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("CAMEL_CASE_TRIO"), "CamelCaseTrio");
+ EXPECT_EQ(ScreamingSnakeToUpperCamelCase("UNDER_IN__MIDDLE"),
+ "UnderInMiddle");
+}
+
+template <class Aliases>
+auto EnumValue(absl::string_view name, int32_t number, Aliases aliases) {
+ return AllOf(Field("name", &RustEnumValue::name, Eq(name)),
+ Field("number", &RustEnumValue::number, Eq(number)),
+ Field("aliases", &RustEnumValue::aliases, aliases));
+}
+
+auto EnumValue(absl::string_view name, int32_t number) {
+ return EnumValue(name, number, IsEmpty());
+}
+
+TEST(EnumTest, EnumValues) {
+ EXPECT_THAT(EnumValues("Enum", {{"ENUM_FOO", 1}, {"ENUM_BAR", 2}}),
+ ElementsAre(EnumValue("Foo", 1), EnumValue("Bar", 2)));
+ EXPECT_THAT(EnumValues("Enum", {{"FOO", 1}, {"ENUM_BAR", 2}}),
+ ElementsAre(EnumValue("Foo", 1), EnumValue("Bar", 2)));
+ EXPECT_THAT(EnumValues("Enum", {{"enumFOO", 1}, {"eNuM_BaR", 2}}),
+ ElementsAre(EnumValue("Foo", 1), EnumValue("Bar", 2)));
+ EXPECT_THAT(EnumValues("Enum", {{"ENUM_ENUM_UNKNOWN", 1}, {"ENUM_ENUM", 2}}),
+ ElementsAre(EnumValue("EnumUnknown", 1), EnumValue("Enum", 2)));
+ EXPECT_THAT(EnumValues("Enum", {{"ENUM_VAL", 1}, {"ENUM_ALIAS", 1}}),
+ ElementsAre(EnumValue("Val", 1, ElementsAre("Alias"))));
+ EXPECT_THAT(
+ EnumValues("Enum",
+ {{"ENUM_VAL", 1}, {"ENUM_ALIAS", 1}, {"ENUM_ALIAS2", 1}}),
+ ElementsAre(EnumValue("Val", 1, ElementsAre("Alias", "Alias2"))));
+ EXPECT_THAT(EnumValues("Enum", {{"ENUM_ENUM", 1}, {"ENUM", 1}}),
+ ElementsAre(EnumValue("Enum", 1, IsEmpty())));
+}
+
+} // namespace
diff --git a/src/google/protobuf/compiler/rust/generator.cc b/src/google/protobuf/compiler/rust/generator.cc
index 585b7aa..c15f874 100644
--- a/src/google/protobuf/compiler/rust/generator.cc
+++ b/src/google/protobuf/compiler/rust/generator.cc
@@ -23,6 +23,7 @@
#include "google/protobuf/compiler/code_generator.h"
#include "google/protobuf/compiler/cpp/names.h"
#include "google/protobuf/compiler/rust/context.h"
+#include "google/protobuf/compiler/rust/enum.h"
#include "google/protobuf/compiler/rust/message.h"
#include "google/protobuf/compiler/rust/naming.h"
#include "google/protobuf/compiler/rust/relative_path.h"
@@ -48,12 +49,12 @@
// pub mod submodule {
// pub mod separator {
// ```
-void EmitOpeningOfPackageModules(absl::string_view pkg,
- Context<FileDescriptor> file) {
+void EmitOpeningOfPackageModules(Context& ctx, absl::string_view pkg) {
if (pkg.empty()) return;
for (absl::string_view segment : absl::StrSplit(pkg, '.')) {
- file.Emit({{"segment", segment}},
- R"rs(
+ ctx.Emit({{"segment", segment}},
+ R"rs(
+ #[allow(non_snake_case)]
pub mod $segment$ {
)rs");
}
@@ -70,14 +71,13 @@
// } // mod uses
// } // mod package
// ```
-void EmitClosingOfPackageModules(absl::string_view pkg,
- Context<FileDescriptor> file) {
+void EmitClosingOfPackageModules(Context& ctx, absl::string_view pkg) {
if (pkg.empty()) return;
std::vector<absl::string_view> segments = absl::StrSplit(pkg, '.');
absl::c_reverse(segments);
for (absl::string_view segment : segments) {
- file.Emit({{"segment", segment}}, R"rs(
+ ctx.Emit({{"segment", segment}}, R"rs(
} // mod $segment$
)rs");
}
@@ -87,17 +87,17 @@
// `non_primary_src` into the `primary_file`.
//
// `non_primary_src` has to be a non-primary src of the current `proto_library`.
-void EmitPubUseOfOwnMessages(Context<FileDescriptor>& primary_file,
- const Context<FileDescriptor>& non_primary_src) {
- for (int i = 0; i < non_primary_src.desc().message_type_count(); ++i) {
- auto msg = primary_file.WithDesc(non_primary_src.desc().message_type(i));
- auto mod = RustInternalModuleName(non_primary_src);
- auto name = msg.desc().name();
- primary_file.Emit({{"mod", mod}, {"Msg", name}},
- R"rs(
+void EmitPubUseOfOwnMessages(Context& ctx, const FileDescriptor& primary_file,
+ const FileDescriptor& non_primary_src) {
+ for (int i = 0; i < non_primary_src.message_type_count(); ++i) {
+ auto& msg = *non_primary_src.message_type(i);
+ auto mod = RustInternalModuleName(ctx, non_primary_src);
+ ctx.Emit({{"mod", mod}, {"Msg", msg.name()}},
+ R"rs(
pub use crate::$mod$::$Msg$;
// TODO Address use for imported crates
pub use crate::$mod$::$Msg$View;
+ pub use crate::$mod$::$Msg$Mut;
)rs");
}
}
@@ -108,14 +108,15 @@
//
// `dep` is a primary src of a dependency of the current `proto_library`.
// TODO: Add support for public import of non-primary srcs of deps.
-void EmitPubUseForImportedMessages(Context<FileDescriptor>& primary_file,
- const Context<FileDescriptor>& dep) {
- std::string crate_name = GetCrateName(dep);
- for (int i = 0; i < dep.desc().message_type_count(); ++i) {
- auto msg = primary_file.WithDesc(dep.desc().message_type(i));
- auto path = GetCrateRelativeQualifiedPath(msg);
- primary_file.Emit({{"crate", crate_name}, {"pkg::Msg", path}},
- R"rs(
+void EmitPubUseForImportedMessages(Context& ctx,
+ const FileDescriptor& primary_file,
+ const FileDescriptor& dep) {
+ std::string crate_name = GetCrateName(ctx, dep);
+ for (int i = 0; i < dep.message_type_count(); ++i) {
+ auto& msg = *dep.message_type(i);
+ auto path = GetCrateRelativeQualifiedPath(ctx, msg);
+ ctx.Emit({{"crate", crate_name}, {"pkg::Msg", path}},
+ R"rs(
pub use $crate$::$pkg::Msg$;
pub use $crate$::$pkg::Msg$View;
)rs");
@@ -123,9 +124,9 @@
}
// Emits all public imports of the current file
-void EmitPublicImports(Context<FileDescriptor>& primary_file) {
- for (int i = 0; i < primary_file.desc().public_dependency_count(); ++i) {
- auto dep_file = primary_file.desc().public_dependency(i);
+void EmitPublicImports(Context& ctx, const FileDescriptor& primary_file) {
+ for (int i = 0; i < primary_file.public_dependency_count(); ++i) {
+ auto& dep_file = *primary_file.public_dependency(i);
// If the publicly imported file is a src of the current `proto_library`
// we don't need to emit `pub use` here, we already do it for all srcs in
// RustGenerator::Generate. In other words, all srcs are implicitly publicly
@@ -133,30 +134,31 @@
// TODO: Handle the case where a non-primary src with the same
// declared package as the primary src publicly imports a file that the
// primary doesn't.
- if (primary_file.generator_context().is_file_in_current_crate(dep_file))
- continue;
- auto dep = primary_file.WithDesc(dep_file);
- EmitPubUseForImportedMessages(primary_file, dep);
+ if (IsInCurrentlyGeneratingCrate(ctx, dep_file)) {
+ return;
+ }
+ EmitPubUseForImportedMessages(ctx, primary_file, dep_file);
}
}
// Emits submodule declarations so `rustc` can find non primary sources from the
// primary file.
void DeclareSubmodulesForNonPrimarySrcs(
- Context<FileDescriptor>& primary_file,
- absl::Span<const Context<FileDescriptor>> non_primary_srcs) {
- std::string primary_file_path = GetRsFile(primary_file);
+ Context& ctx, const FileDescriptor& primary_file,
+ absl::Span<const FileDescriptor* const> non_primary_srcs) {
+ std::string primary_file_path = GetRsFile(ctx, primary_file);
RelativePath primary_relpath(primary_file_path);
- for (const auto& non_primary_src : non_primary_srcs) {
- std::string non_primary_file_path = GetRsFile(non_primary_src);
+ for (const FileDescriptor* non_primary_src : non_primary_srcs) {
+ std::string non_primary_file_path = GetRsFile(ctx, *non_primary_src);
std::string relative_mod_path =
primary_relpath.Relative(RelativePath(non_primary_file_path));
- primary_file.Emit({{"file_path", relative_mod_path},
- {"foo", primary_file_path},
- {"bar", non_primary_file_path},
- {"mod_name", RustInternalModuleName(non_primary_src)}},
- R"rs(
+ ctx.Emit({{"file_path", relative_mod_path},
+ {"foo", primary_file_path},
+ {"bar", non_primary_file_path},
+ {"mod_name", RustInternalModuleName(ctx, *non_primary_src)}},
+ R"rs(
#[path="$file_path$"]
+ #[allow(non_snake_case)]
pub mod $mod_name$;
)rs");
}
@@ -167,33 +169,32 @@
//
// Returns the non-primary sources that should be reexported from the package of
// the primary file.
-std::vector<const Context<FileDescriptor>*> ReexportMessagesFromSubmodules(
- Context<FileDescriptor>& primary_file,
- absl::Span<const Context<FileDescriptor>> non_primary_srcs) {
- absl::btree_map<absl::string_view,
- std::vector<const Context<FileDescriptor>*>>
+std::vector<const FileDescriptor*> ReexportMessagesFromSubmodules(
+ Context& ctx, const FileDescriptor& primary_file,
+ absl::Span<const FileDescriptor* const> non_primary_srcs) {
+ absl::btree_map<absl::string_view, std::vector<const FileDescriptor*>>
packages;
- for (const Context<FileDescriptor>& ctx : non_primary_srcs) {
- packages[ctx.desc().package()].push_back(&ctx);
+ for (const FileDescriptor* file : non_primary_srcs) {
+ packages[file->package()].push_back(file);
}
for (const auto& pair : packages) {
// We will deal with messages for the package of the primary file later.
auto fds = pair.second;
- absl::string_view package = fds[0]->desc().package();
- if (package == primary_file.desc().package()) continue;
+ absl::string_view package = fds[0]->package();
+ if (package == primary_file.package()) continue;
- EmitOpeningOfPackageModules(package, primary_file);
- for (const Context<FileDescriptor>* c : fds) {
- EmitPubUseOfOwnMessages(primary_file, *c);
+ EmitOpeningOfPackageModules(ctx, package);
+ for (const FileDescriptor* c : fds) {
+ EmitPubUseOfOwnMessages(ctx, primary_file, *c);
}
- EmitClosingOfPackageModules(package, primary_file);
+ EmitClosingOfPackageModules(ctx, package);
}
- return packages[primary_file.desc().package()];
+ return packages[primary_file.package()];
}
} // namespace
-bool RustGenerator::Generate(const FileDescriptor* file_desc,
+bool RustGenerator::Generate(const FileDescriptor* file,
const std::string& parameter,
GeneratorContext* generator_context,
std::string* error) const {
@@ -208,15 +209,15 @@
RustGeneratorContext rust_generator_context(&files_in_current_crate);
- Context<FileDescriptor> file(&*opts, file_desc, &rust_generator_context,
- nullptr);
+ Context ctx_without_printer(&*opts, &rust_generator_context, nullptr);
- auto outfile = absl::WrapUnique(generator_context->Open(GetRsFile(file)));
+ auto outfile = absl::WrapUnique(
+ generator_context->Open(GetRsFile(ctx_without_printer, *file)));
io::Printer printer(outfile.get());
- file = file.WithPrinter(&printer);
+ Context ctx = ctx_without_printer.WithPrinter(&printer);
// Convenience shorthands for common symbols.
- auto v = file.printer().WithVars({
+ auto v = ctx.printer().WithVars({
{"std", "::__std"},
{"pb", "::__pb"},
{"pbi", "::__pb::__internal"},
@@ -225,67 +226,72 @@
{"Phantom", "::__std::marker::PhantomData"},
});
- file.Emit({{"kernel", KernelRsName(file.opts().kernel)}}, R"rs(
+ ctx.Emit({{"kernel", KernelRsName(ctx.opts().kernel)}}, R"rs(
extern crate protobuf_$kernel$ as __pb;
extern crate std as __std;
)rs");
- std::vector<Context<FileDescriptor>> file_contexts;
+ std::vector<const FileDescriptor*> file_contexts;
for (const FileDescriptor* f : files_in_current_crate) {
- file_contexts.push_back(file.WithDesc(*f));
+ file_contexts.push_back(f);
}
// Generating the primary file?
- if (file_desc == rust_generator_context.primary_file()) {
+ if (file == &rust_generator_context.primary_file()) {
auto non_primary_srcs = absl::MakeConstSpan(file_contexts).subspan(1);
- DeclareSubmodulesForNonPrimarySrcs(file, non_primary_srcs);
+ DeclareSubmodulesForNonPrimarySrcs(ctx, *file, non_primary_srcs);
- std::vector<const Context<FileDescriptor>*>
- non_primary_srcs_in_primary_package =
- ReexportMessagesFromSubmodules(file, non_primary_srcs);
+ std::vector<const FileDescriptor*> non_primary_srcs_in_primary_package =
+ ReexportMessagesFromSubmodules(ctx, *file, non_primary_srcs);
- EmitOpeningOfPackageModules(file.desc().package(), file);
+ EmitOpeningOfPackageModules(ctx, file->package());
- for (const Context<FileDescriptor>* non_primary_file :
+ for (const FileDescriptor* non_primary_file :
non_primary_srcs_in_primary_package) {
- EmitPubUseOfOwnMessages(file, *non_primary_file);
+ EmitPubUseOfOwnMessages(ctx, *file, *non_primary_file);
}
}
- EmitPublicImports(file);
+ EmitPublicImports(ctx, *file);
std::unique_ptr<io::ZeroCopyOutputStream> thunks_cc;
std::unique_ptr<io::Printer> thunks_printer;
- if (file.is_cpp()) {
- thunks_cc.reset(generator_context->Open(GetThunkCcFile(file)));
+ if (ctx.is_cpp()) {
+ thunks_cc.reset(generator_context->Open(GetThunkCcFile(ctx, *file)));
thunks_printer = std::make_unique<io::Printer>(thunks_cc.get());
- thunks_printer->Emit({{"proto_h", GetHeaderFile(file)}},
+ thunks_printer->Emit({{"proto_h", GetHeaderFile(ctx, *file)}},
R"cc(
#include "$proto_h$"
#include "google/protobuf/rust/cpp_kernel/cpp_api.h"
)cc");
}
- for (int i = 0; i < file.desc().message_type_count(); ++i) {
- auto msg = file.WithDesc(file.desc().message_type(i));
+ for (int i = 0; i < file->message_type_count(); ++i) {
+ auto& msg = *file->message_type(i);
- GenerateRs(msg);
- msg.printer().PrintRaw("\n");
+ GenerateRs(ctx, msg);
+ ctx.printer().PrintRaw("\n");
- if (file.is_cpp()) {
- auto thunks_msg = msg.WithPrinter(thunks_printer.get());
+ if (ctx.is_cpp()) {
+ auto thunks_ctx = ctx.WithPrinter(thunks_printer.get());
- thunks_msg.Emit({{"Msg", msg.desc().full_name()}}, R"cc(
+ thunks_ctx.Emit({{"Msg", msg.full_name()}}, R"cc(
// $Msg$
)cc");
- GenerateThunksCc(thunks_msg);
- thunks_msg.printer().PrintRaw("\n");
+ GenerateThunksCc(thunks_ctx, msg);
+ thunks_ctx.printer().PrintRaw("\n");
}
}
- if (file_desc == files_in_current_crate.front()) {
- EmitClosingOfPackageModules(file.desc().package(), file);
+
+ for (int i = 0; i < file->enum_type_count(); ++i) {
+ GenerateEnumDefinition(ctx, *file->enum_type(i));
+ ctx.printer().PrintRaw("\n");
+ }
+
+ if (file == files_in_current_crate.front()) {
+ EmitClosingOfPackageModules(ctx, file->package());
}
return true;
}
diff --git a/src/google/protobuf/compiler/rust/message.cc b/src/google/protobuf/compiler/rust/message.cc
index 5b4a2fd..4230da2 100644
--- a/src/google/protobuf/compiler/rust/message.cc
+++ b/src/google/protobuf/compiler/rust/message.cc
@@ -7,16 +7,21 @@
#include "google/protobuf/compiler/rust/message.h"
+#include <string>
+
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
+#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/compiler/cpp/names.h"
#include "google/protobuf/compiler/rust/accessors/accessors.h"
#include "google/protobuf/compiler/rust/context.h"
+#include "google/protobuf/compiler/rust/enum.h"
#include "google/protobuf/compiler/rust/naming.h"
#include "google/protobuf/compiler/rust/oneof.h"
#include "google/protobuf/descriptor.h"
+#include "upb_generator/mangle.h"
namespace google {
namespace protobuf {
@@ -24,16 +29,20 @@
namespace rust {
namespace {
-void MessageNew(Context<Descriptor> msg) {
- switch (msg.opts().kernel) {
+std::string UpbMinitableName(const Descriptor& msg) {
+ return upb::generator::MessageInit(msg.full_name());
+}
+
+void MessageNew(Context& ctx, const Descriptor& msg) {
+ switch (ctx.opts().kernel) {
case Kernel::kCpp:
- msg.Emit({{"new_thunk", Thunk(msg, "new")}}, R"rs(
+ ctx.Emit({{"new_thunk", ThunkName(ctx, msg, "new")}}, R"rs(
Self { inner: $pbr$::MessageInner { msg: unsafe { $new_thunk$() } } }
)rs");
return;
case Kernel::kUpb:
- msg.Emit({{"new_thunk", Thunk(msg, "new")}}, R"rs(
+ ctx.Emit({{"new_thunk", ThunkName(ctx, msg, "new")}}, R"rs(
let arena = $pbr$::Arena::new();
Self {
inner: $pbr$::MessageInner {
@@ -48,16 +57,16 @@
ABSL_LOG(FATAL) << "unreachable";
}
-void MessageSerialize(Context<Descriptor> msg) {
- switch (msg.opts().kernel) {
+void MessageSerialize(Context& ctx, const Descriptor& msg) {
+ switch (ctx.opts().kernel) {
case Kernel::kCpp:
- msg.Emit({{"serialize_thunk", Thunk(msg, "serialize")}}, R"rs(
+ ctx.Emit({{"serialize_thunk", ThunkName(ctx, msg, "serialize")}}, R"rs(
unsafe { $serialize_thunk$(self.inner.msg) }
)rs");
return;
case Kernel::kUpb:
- msg.Emit({{"serialize_thunk", Thunk(msg, "serialize")}}, R"rs(
+ ctx.Emit({{"serialize_thunk", ThunkName(ctx, msg, "serialize")}}, R"rs(
let arena = $pbr$::Arena::new();
let mut len = 0;
unsafe {
@@ -71,12 +80,12 @@
ABSL_LOG(FATAL) << "unreachable";
}
-void MessageDeserialize(Context<Descriptor> msg) {
- switch (msg.opts().kernel) {
+void MessageDeserialize(Context& ctx, const Descriptor& msg) {
+ switch (ctx.opts().kernel) {
case Kernel::kCpp:
- msg.Emit(
+ ctx.Emit(
{
- {"deserialize_thunk", Thunk(msg, "deserialize")},
+ {"deserialize_thunk", ThunkName(ctx, msg, "deserialize")},
},
R"rs(
let success = unsafe {
@@ -92,7 +101,7 @@
return;
case Kernel::kUpb:
- msg.Emit({{"deserialize_thunk", Thunk(msg, "parse")}}, R"rs(
+ ctx.Emit({{"deserialize_thunk", ThunkName(ctx, msg, "parse")}}, R"rs(
let arena = $pbr$::Arena::new();
let msg = unsafe {
$deserialize_thunk$(data.as_ptr(), data.len(), arena.raw())
@@ -115,35 +124,41 @@
ABSL_LOG(FATAL) << "unreachable";
}
-void MessageExterns(Context<Descriptor> msg) {
- switch (msg.opts().kernel) {
+void MessageExterns(Context& ctx, const Descriptor& msg) {
+ switch (ctx.opts().kernel) {
case Kernel::kCpp:
- msg.Emit(
+ ctx.Emit(
{
- {"new_thunk", Thunk(msg, "new")},
- {"delete_thunk", Thunk(msg, "delete")},
- {"serialize_thunk", Thunk(msg, "serialize")},
- {"deserialize_thunk", Thunk(msg, "deserialize")},
+ {"new_thunk", ThunkName(ctx, msg, "new")},
+ {"delete_thunk", ThunkName(ctx, msg, "delete")},
+ {"serialize_thunk", ThunkName(ctx, msg, "serialize")},
+ {"deserialize_thunk", ThunkName(ctx, msg, "deserialize")},
+ {"copy_from_thunk", ThunkName(ctx, msg, "copy_from")},
},
R"rs(
fn $new_thunk$() -> $pbi$::RawMessage;
fn $delete_thunk$(raw_msg: $pbi$::RawMessage);
fn $serialize_thunk$(raw_msg: $pbi$::RawMessage) -> $pbr$::SerializedData;
fn $deserialize_thunk$(raw_msg: $pbi$::RawMessage, data: $pbr$::SerializedData) -> bool;
+ fn $copy_from_thunk$(dst: $pbi$::RawMessage, src: $pbi$::RawMessage);
)rs");
return;
case Kernel::kUpb:
- msg.Emit(
+ ctx.Emit(
{
- {"new_thunk", Thunk(msg, "new")},
- {"serialize_thunk", Thunk(msg, "serialize")},
- {"deserialize_thunk", Thunk(msg, "parse")},
+ {"new_thunk", ThunkName(ctx, msg, "new")},
+ {"serialize_thunk", ThunkName(ctx, msg, "serialize")},
+ {"deserialize_thunk", ThunkName(ctx, msg, "parse")},
+ {"minitable", UpbMinitableName(msg)},
},
R"rs(
fn $new_thunk$(arena: $pbi$::RawArena) -> $pbi$::RawMessage;
fn $serialize_thunk$(msg: $pbi$::RawMessage, arena: $pbi$::RawArena, len: &mut usize) -> $NonNull$<u8>;
fn $deserialize_thunk$(data: *const u8, size: usize, arena: $pbi$::RawArena) -> Option<$pbi$::RawMessage>;
+ /// Opaque wrapper for this message's MiniTable. The only valid way to
+ /// reference this static is with `std::ptr::addr_of!(..)`.
+ static $minitable$: $pbr$::OpaqueMiniTable;
)rs");
return;
}
@@ -151,145 +166,272 @@
ABSL_LOG(FATAL) << "unreachable";
}
-void MessageDrop(Context<Descriptor> msg) {
- if (msg.is_upb()) {
+void MessageDrop(Context& ctx, const Descriptor& msg) {
+ if (ctx.is_upb()) {
// Nothing to do here; drop glue (which will run drop(self.arena)
// automatically) is sufficient.
return;
}
- msg.Emit({{"delete_thunk", Thunk(msg, "delete")}}, R"rs(
+ ctx.Emit({{"delete_thunk", ThunkName(ctx, msg, "delete")}}, R"rs(
unsafe { $delete_thunk$(self.inner.msg); }
)rs");
}
-// TODO: deferring on strings and bytes for now, eventually this
-// check will go away as we support more than just simple scalars
-bool IsSimpleScalar(FieldDescriptor::Type type) {
- return type == FieldDescriptor::TYPE_DOUBLE ||
- type == FieldDescriptor::TYPE_FLOAT ||
- type == FieldDescriptor::TYPE_INT32 ||
- type == FieldDescriptor::TYPE_INT64 ||
- type == FieldDescriptor::TYPE_UINT32 ||
- type == FieldDescriptor::TYPE_UINT64 ||
- type == FieldDescriptor::TYPE_SINT32 ||
- type == FieldDescriptor::TYPE_SINT64 ||
- type == FieldDescriptor::TYPE_FIXED32 ||
- type == FieldDescriptor::TYPE_FIXED64 ||
- type == FieldDescriptor::TYPE_SFIXED32 ||
- type == FieldDescriptor::TYPE_SFIXED64 ||
- type == FieldDescriptor::TYPE_BOOL;
+bool IsStringOrBytes(FieldDescriptor::Type t) {
+ return t == FieldDescriptor::TYPE_STRING || t == FieldDescriptor::TYPE_BYTES;
}
-void GenerateSubView(Context<FieldDescriptor> field) {
- field.Emit(
- {
- {"field", field.desc().name()},
- {"getter_thunk", Thunk(field, "get")},
- {"Scalar", PrimitiveRsTypeName(field.desc())},
- },
- R"rs(
- pub fn r#$field$(&self) -> $Scalar$ { unsafe {
- $getter_thunk$(self.msg)
- } }
- )rs");
-}
-} // namespace
+void MessageSettableValue(Context& ctx, const Descriptor& msg) {
+ switch (ctx.opts().kernel) {
+ case Kernel::kCpp:
+ ctx.Emit({{"copy_from_thunk", ThunkName(ctx, msg, "copy_from")}}, R"rs(
+ impl<'msg> $pb$::SettableValue<$Msg$> for $Msg$View<'msg> {
+ fn set_on<'dst>(
+ self, _private: $pbi$::Private, mutator: $pb$::Mut<'dst, $Msg$>)
+ where $Msg$: 'dst {
+ unsafe { $copy_from_thunk$(mutator.inner.msg(), self.msg) };
+ }
+ }
+ )rs");
+ return;
-void GenerateRs(Context<Descriptor> msg) {
- if (msg.desc().map_key() != nullptr) {
- ABSL_LOG(WARNING) << "unsupported map field: " << msg.desc().full_name();
+ case Kernel::kUpb:
+ ctx.Emit({{"minitable", UpbMinitableName(msg)}}, R"rs(
+ impl<'msg> $pb$::SettableValue<$Msg$> for $Msg$View<'msg> {
+ fn set_on<'dst>(
+ self, _private: $pbi$::Private, mutator: $pb$::Mut<'dst, $Msg$>)
+ where $Msg$: 'dst {
+ unsafe { $pbr$::upb_Message_DeepCopy(
+ mutator.inner.msg(),
+ self.msg,
+ $std$::ptr::addr_of!($minitable$),
+ mutator.inner.raw_arena($pbi$::Private),
+ ) };
+ }
+ }
+ )rs");
+ return;
+ }
+
+ ABSL_LOG(FATAL) << "unreachable";
+}
+
+void GetterForViewOrMut(Context& ctx, const FieldDescriptor& field,
+ bool is_mut) {
+ auto fieldName = field.name();
+ auto fieldType = field.type();
+ auto getter_thunk = ThunkName(ctx, field, "get");
+ auto setter_thunk = ThunkName(ctx, field, "set");
+ // If we're dealing with a Mut, the getter must be supplied
+ // self.inner.msg() whereas a View has to be supplied self.msg
+ auto self = is_mut ? "self.inner.msg()" : "self.msg";
+
+ if (fieldType == FieldDescriptor::TYPE_MESSAGE) {
+ const Descriptor& msg = *field.message_type();
+ // TODO: support messages which are defined in other crates.
+ if (!IsInCurrentlyGeneratingCrate(ctx, msg)) {
+ return;
+ }
+ auto prefix = "crate::" + GetCrateRelativeQualifiedPath(ctx, msg);
+ ctx.Emit(
+ {
+ {"prefix", prefix},
+ {"field", fieldName},
+ {"self", self},
+ {"getter_thunk", getter_thunk},
+ // TODO: dedupe with singular_message.cc
+ {
+ "view_body",
+ [&] {
+ if (ctx.is_upb()) {
+ ctx.Emit({}, R"rs(
+ let submsg = unsafe { $getter_thunk$($self$) };
+ match submsg {
+ None => $prefix$View::new($pbi$::Private,
+ $pbr$::ScratchSpace::zeroed_block($pbi$::Private)),
+ Some(field) => $prefix$View::new($pbi$::Private, field),
+ }
+ )rs");
+ } else {
+ ctx.Emit({}, R"rs(
+ let submsg = unsafe { $getter_thunk$($self$) };
+ $prefix$View::new($pbi$::Private, submsg)
+ )rs");
+ }
+ },
+ },
+ },
+ R"rs(
+ pub fn r#$field$(&self) -> $prefix$View {
+ $view_body$
+ }
+ )rs");
return;
}
- msg.Emit(
- {
- {"Msg", msg.desc().name()},
- {"Msg::new", [&] { MessageNew(msg); }},
- {"Msg::serialize", [&] { MessageSerialize(msg); }},
- {"Msg::deserialize", [&] { MessageDeserialize(msg); }},
- {"Msg::drop", [&] { MessageDrop(msg); }},
- {"Msg_externs", [&] { MessageExterns(msg); }},
- {"accessor_fns",
- [&] {
- for (int i = 0; i < msg.desc().field_count(); ++i) {
- auto field = msg.WithDesc(*msg.desc().field(i));
- msg.Emit({{"comment", FieldInfoComment(field)}}, R"rs(
+
+ auto rsType = PrimitiveRsTypeName(field);
+ auto asRef = IsStringOrBytes(fieldType) ? ".as_ref()" : "";
+ auto vtable =
+ IsStringOrBytes(fieldType) ? "BytesMutVTable" : "PrimitiveVTable";
+ // PrimitiveVtable is parameterized based on the underlying primitive, like
+ // u32 so we need to provide this additional type arg
+ auto optionalTypeArgs =
+ IsStringOrBytes(fieldType) ? "" : absl::StrFormat("<%s>", rsType);
+ // need to stuff ProtoStr and [u8] behind a reference since they are DSTs
+ auto stringTransform =
+ IsStringOrBytes(fieldType)
+ ? "unsafe { __pb::ProtoStr::from_utf8_unchecked(res).into() }"
+ : "res";
+
+ ctx.Emit({{"field", fieldName},
+ {"getter_thunk", getter_thunk},
+ {"setter_thunk", setter_thunk},
+ {"self", self},
+ {"RsType", rsType},
+ {"as_ref", asRef},
+ {"vtable", vtable},
+ {"optional_type_args", optionalTypeArgs},
+ {"string_transform", stringTransform},
+ {"maybe_mutator",
+ [&] {
+ // TODO: check mutational pathway genn'd correctly
+ if (is_mut) {
+ ctx.Emit({}, R"rs(
+ pub fn r#$field$_mut(&self) -> $pb$::Mut<'_, $RsType$> {
+ static VTABLE: $pbi$::$vtable$$optional_type_args$ =
+ $pbi$::$vtable$::new(
+ $pbi$::Private,
+ $getter_thunk$,
+ $setter_thunk$);
+ unsafe {
+ <$pb$::Mut<$RsType$>>::from_inner(
+ $pbi$::Private,
+ $pbi$::RawVTableMutator::new(
+ $pbi$::Private,
+ self.inner,
+ &VTABLE
+ ),
+ )
+ }
+ }
+ )rs");
+ }
+ }}},
+ R"rs(
+ pub fn r#$field$(&self) -> $pb$::View<'_, $RsType$> {
+ let res = unsafe { $getter_thunk$($self$)$as_ref$ };
+ $string_transform$
+ }
+
+ $maybe_mutator$
+ )rs");
+}
+
+void AccessorsForViewOrMut(Context& ctx, const Descriptor& msg, bool is_mut) {
+ for (int i = 0; i < msg.field_count(); ++i) {
+ const FieldDescriptor& field = *msg.field(i);
+ if (field.is_repeated()) continue;
+ // TODO - add cord support
+ if (field.options().has_ctype()) continue;
+ // TODO
+ if (field.type() == FieldDescriptor::TYPE_ENUM ||
+ field.type() == FieldDescriptor::TYPE_GROUP)
+ continue;
+ GetterForViewOrMut(ctx, field, is_mut);
+ ctx.printer().PrintRaw("\n");
+ }
+}
+
+} // namespace
+
+void GenerateRs(Context& ctx, const Descriptor& msg) {
+ if (msg.map_key() != nullptr) {
+ ABSL_LOG(WARNING) << "unsupported map field: " << msg.full_name();
+ return;
+ }
+ ctx.Emit({{"Msg", msg.name()},
+ {"Msg::new", [&] { MessageNew(ctx, msg); }},
+ {"Msg::serialize", [&] { MessageSerialize(ctx, msg); }},
+ {"Msg::deserialize", [&] { MessageDeserialize(ctx, msg); }},
+ {"Msg::drop", [&] { MessageDrop(ctx, msg); }},
+ {"Msg_externs", [&] { MessageExterns(ctx, msg); }},
+ {"accessor_fns",
+ [&] {
+ for (int i = 0; i < msg.field_count(); ++i) {
+ auto& field = *msg.field(i);
+ ctx.Emit({{"comment", FieldInfoComment(ctx, field)}}, R"rs(
// $comment$
)rs");
- GenerateAccessorMsgImpl(field);
- msg.printer().PrintRaw("\n");
- }
- }},
- {"oneof_accessor_fns",
- [&] {
- for (int i = 0; i < msg.desc().real_oneof_decl_count(); ++i) {
- GenerateOneofAccessors(
- msg.WithDesc(*msg.desc().real_oneof_decl(i)));
- msg.printer().PrintRaw("\n");
- }
- }},
- {"accessor_externs",
- [&] {
- for (int i = 0; i < msg.desc().field_count(); ++i) {
- GenerateAccessorExternC(msg.WithDesc(*msg.desc().field(i)));
- msg.printer().PrintRaw("\n");
- }
- }},
- {"oneof_externs",
- [&] {
- for (int i = 0; i < msg.desc().real_oneof_decl_count(); ++i) {
- GenerateOneofExternC(
- msg.WithDesc(*msg.desc().real_oneof_decl(i)));
- msg.printer().PrintRaw("\n");
- }
- }},
- {"nested_msgs",
- [&] {
- // If we have no nested types or oneofs, bail out without emitting
- // an empty mod SomeMsg_.
- if (msg.desc().nested_type_count() == 0 &&
- msg.desc().real_oneof_decl_count() == 0) {
- return;
- }
- msg.Emit({{"Msg", msg.desc().name()},
- {"nested_msgs",
- [&] {
- for (int i = 0; i < msg.desc().nested_type_count();
- ++i) {
- auto nested_msg =
- msg.WithDesc(msg.desc().nested_type(i));
- GenerateRs(nested_msg);
- }
- }},
- {"oneofs",
- [&] {
- for (int i = 0;
- i < msg.desc().real_oneof_decl_count(); ++i) {
- GenerateOneofDefinition(
- msg.WithDesc(*msg.desc().real_oneof_decl(i)));
- }
- }}},
- R"rs(
+ GenerateAccessorMsgImpl(ctx, field);
+ ctx.printer().PrintRaw("\n");
+ }
+ }},
+ {"oneof_accessor_fns",
+ [&] {
+ for (int i = 0; i < msg.real_oneof_decl_count(); ++i) {
+ GenerateOneofAccessors(ctx, *msg.real_oneof_decl(i));
+ ctx.printer().PrintRaw("\n");
+ }
+ }},
+ {"accessor_externs",
+ [&] {
+ for (int i = 0; i < msg.field_count(); ++i) {
+ GenerateAccessorExternC(ctx, *msg.field(i));
+ ctx.printer().PrintRaw("\n");
+ }
+ }},
+ {"oneof_externs",
+ [&] {
+ for (int i = 0; i < msg.real_oneof_decl_count(); ++i) {
+ GenerateOneofExternC(ctx, *msg.real_oneof_decl(i));
+ ctx.printer().PrintRaw("\n");
+ }
+ }},
+ {"nested_in_msg",
+ [&] {
+ // If we have no nested types or oneofs, bail out without
+ // emitting an empty mod SomeMsg_.
+ if (msg.nested_type_count() == 0 &&
+ msg.real_oneof_decl_count() == 0) {
+ return;
+ }
+ ctx.Emit(
+ {{"Msg", msg.name()},
+ {"nested_msgs",
+ [&] {
+ for (int i = 0; i < msg.nested_type_count(); ++i) {
+ GenerateRs(ctx, *msg.nested_type(i));
+ }
+ }},
+ {"nested_enums",
+ [&] {
+ for (int i = 0; i < msg.enum_type_count(); ++i) {
+ GenerateEnumDefinition(ctx, *msg.enum_type(i));
+ }
+ }},
+ {"oneofs",
+ [&] {
+ for (int i = 0; i < msg.real_oneof_decl_count(); ++i) {
+ GenerateOneofDefinition(ctx, *msg.real_oneof_decl(i));
+ }
+ }}},
+ R"rs(
#[allow(non_snake_case)]
pub mod $Msg$_ {
$nested_msgs$
+ $nested_enums$
$oneofs$
} // mod $Msg$_
)rs");
- }},
- {"subviews",
- [&] {
- for (int i = 0; i < msg.desc().field_count(); ++i) {
- auto field = msg.WithDesc(*msg.desc().field(i));
- if (field.desc().is_repeated()) continue;
- if (!IsSimpleScalar(field.desc().type())) continue;
- GenerateSubView(field);
- msg.printer().PrintRaw("\n");
- }
- }},
- },
- R"rs(
+ }},
+ {"accessor_fns_for_views",
+ [&] { AccessorsForViewOrMut(ctx, msg, false); }},
+ {"accessor_fns_for_muts",
+ [&] { AccessorsForViewOrMut(ctx, msg, true); }},
+ {"settable_impl", [&] { MessageSettableValue(ctx, msg); }}},
+ R"rs(
#[allow(non_camel_case_types)]
// TODO: Implement support for debug redaction
#[derive(Debug)]
@@ -321,7 +463,7 @@
pub fn new(_private: $pbi$::Private, msg: $pbi$::RawMessage) -> Self {
Self { msg, _phantom: std::marker::PhantomData }
}
- $subviews$
+ $accessor_fns_for_views$
}
// SAFETY:
@@ -344,18 +486,29 @@
}
}
- impl<'a> $pb$::SettableValue<$Msg$> for $Msg$View<'a> {
- fn set_on(self, _private: $pb$::__internal::Private, _mutator: $pb$::Mut<$Msg$>) {
- todo!()
- }
- }
+ $settable_impl$
#[derive(Debug)]
#[allow(dead_code)]
+ #[allow(non_camel_case_types)]
pub struct $Msg$Mut<'a> {
inner: $pbr$::MutatorMessageRef<'a>,
}
+ impl<'a> $Msg$Mut<'a> {
+ #[doc(hidden)]
+ pub fn new(_private: $pbi$::Private,
+ parent: &'a mut $pbr$::MessageInner,
+ msg: $pbi$::RawMessage)
+ -> Self {
+ Self {
+ inner: $pbr$::MutatorMessageRef::from_parent(
+ $pbi$::Private, parent, msg)
+ }
+ }
+ $accessor_fns_for_muts$
+ }
+
// SAFETY:
// - `$Msg$Mut` does not perform any shared mutation.
// - `$Msg$Mut` is not `Send`, and so even in the presence of mutator
@@ -412,12 +565,12 @@
$oneof_externs$
} // extern "C" for $Msg$
- $nested_msgs$
+ $nested_in_msg$
)rs");
- if (msg.is_cpp()) {
- msg.printer().PrintRaw("\n");
- msg.Emit({{"Msg", msg.desc().name()}}, R"rs(
+ if (ctx.is_cpp()) {
+ ctx.printer().PrintRaw("\n");
+ ctx.Emit({{"Msg", msg.name()}}, R"rs(
impl $Msg$ {
pub fn __unstable_wrap_cpp_grant_permission_to_break(msg: $pbi$::RawMessage) -> Self {
Self { inner: $pbr$::MessageInner { msg } }
@@ -431,39 +584,38 @@
}
// Generates code for a particular message in `.pb.thunk.cc`.
-void GenerateThunksCc(Context<Descriptor> msg) {
- ABSL_CHECK(msg.is_cpp());
- if (msg.desc().map_key() != nullptr) {
- ABSL_LOG(WARNING) << "unsupported map field: " << msg.desc().full_name();
+void GenerateThunksCc(Context& ctx, const Descriptor& msg) {
+ ABSL_CHECK(ctx.is_cpp());
+ if (msg.map_key() != nullptr) {
+ ABSL_LOG(WARNING) << "unsupported map field: " << msg.full_name();
return;
}
- msg.Emit(
+ ctx.Emit(
{{"abi", "\"C\""}, // Workaround for syntax highlight bug in VSCode.
- {"Msg", msg.desc().name()},
- {"QualifiedMsg", cpp::QualifiedClassName(&msg.desc())},
- {"new_thunk", Thunk(msg, "new")},
- {"delete_thunk", Thunk(msg, "delete")},
- {"serialize_thunk", Thunk(msg, "serialize")},
- {"deserialize_thunk", Thunk(msg, "deserialize")},
+ {"Msg", msg.name()},
+ {"QualifiedMsg", cpp::QualifiedClassName(&msg)},
+ {"new_thunk", ThunkName(ctx, msg, "new")},
+ {"delete_thunk", ThunkName(ctx, msg, "delete")},
+ {"serialize_thunk", ThunkName(ctx, msg, "serialize")},
+ {"deserialize_thunk", ThunkName(ctx, msg, "deserialize")},
+ {"copy_from_thunk", ThunkName(ctx, msg, "copy_from")},
{"nested_msg_thunks",
[&] {
- for (int i = 0; i < msg.desc().nested_type_count(); ++i) {
- Context<Descriptor> nested_msg =
- msg.WithDesc(msg.desc().nested_type(i));
- GenerateThunksCc(nested_msg);
+ for (int i = 0; i < msg.nested_type_count(); ++i) {
+ GenerateThunksCc(ctx, *msg.nested_type(i));
}
}},
{"accessor_thunks",
[&] {
- for (int i = 0; i < msg.desc().field_count(); ++i) {
- GenerateAccessorThunkCc(msg.WithDesc(*msg.desc().field(i)));
+ for (int i = 0; i < msg.field_count(); ++i) {
+ GenerateAccessorThunkCc(ctx, *msg.field(i));
}
}},
{"oneof_thunks",
[&] {
- for (int i = 0; i < msg.desc().real_oneof_decl_count(); ++i) {
- GenerateOneofThunkCc(msg.WithDesc(*msg.desc().real_oneof_decl(i)));
+ for (int i = 0; i < msg.real_oneof_decl_count(); ++i) {
+ GenerateOneofThunkCc(ctx, *msg.real_oneof_decl(i));
}
}}},
R"cc(
@@ -482,6 +634,10 @@
return msg->ParseFromArray(data.data, data.len);
}
+ void $copy_from_thunk$($QualifiedMsg$* dst, const $QualifiedMsg$* src) {
+ dst->CopyFrom(*src);
+ }
+
$accessor_thunks$
$oneof_thunks$
diff --git a/src/google/protobuf/compiler/rust/message.h b/src/google/protobuf/compiler/rust/message.h
index 4d1c392..e2734eb 100644
--- a/src/google/protobuf/compiler/rust/message.h
+++ b/src/google/protobuf/compiler/rust/message.h
@@ -21,10 +21,10 @@
namespace rust {
// Generates code for a particular message in `.pb.rs`.
-void GenerateRs(Context<Descriptor> msg);
+void GenerateRs(Context& ctx, const Descriptor& msg);
// Generates code for a particular message in `.pb.thunk.cc`.
-void GenerateThunksCc(Context<Descriptor> msg);
+void GenerateThunksCc(Context& ctx, const Descriptor& msg);
} // namespace rust
} // namespace compiler
diff --git a/src/google/protobuf/compiler/rust/naming.cc b/src/google/protobuf/compiler/rust/naming.cc
index 198fbd1..8f6258e 100644
--- a/src/google/protobuf/compiler/rust/naming.cc
+++ b/src/google/protobuf/compiler/rust/naming.cc
@@ -26,22 +26,23 @@
namespace compiler {
namespace rust {
namespace {
-std::string GetUnderscoreDelimitedFullName(Context<Descriptor> msg) {
- std::string result = msg.desc().full_name();
+std::string GetUnderscoreDelimitedFullName(Context& ctx,
+ const Descriptor& msg) {
+ std::string result = msg.full_name();
absl::StrReplaceAll({{".", "_"}}, &result);
return result;
}
} // namespace
-std::string GetCrateName(Context<FileDescriptor> dep) {
- absl::string_view path = dep.desc().name();
+std::string GetCrateName(Context& ctx, const FileDescriptor& dep) {
+ absl::string_view path = dep.name();
auto basename = path.substr(path.rfind('/') + 1);
return absl::StrReplaceAll(basename, {{".", "_"}, {"-", "_"}});
}
-std::string GetRsFile(Context<FileDescriptor> file) {
- auto basename = StripProto(file.desc().name());
- switch (auto k = file.opts().kernel) {
+std::string GetRsFile(Context& ctx, const FileDescriptor& file) {
+ auto basename = StripProto(file.name());
+ switch (auto k = ctx.opts().kernel) {
case Kernel::kUpb:
return absl::StrCat(basename, ".u.pb.rs");
case Kernel::kCpp:
@@ -52,39 +53,41 @@
}
}
-std::string GetThunkCcFile(Context<FileDescriptor> file) {
- auto basename = StripProto(file.desc().name());
+std::string GetThunkCcFile(Context& ctx, const FileDescriptor& file) {
+ auto basename = StripProto(file.name());
return absl::StrCat(basename, ".pb.thunks.cc");
}
-std::string GetHeaderFile(Context<FileDescriptor> file) {
- auto basename = StripProto(file.desc().name());
+std::string GetHeaderFile(Context& ctx, const FileDescriptor& file) {
+ auto basename = StripProto(file.name());
return absl::StrCat(basename, ".proto.h");
}
namespace {
template <typename T>
-std::string FieldPrefix(Context<T> field) {
- // NOTE: When field.is_upb(), this functions outputs must match the symbols
+std::string FieldPrefix(Context& ctx, const T& field) {
+ // NOTE: When ctx.is_upb(), this functions outputs must match the symbols
// that the upbc plugin generates exactly. Failure to do so correctly results
// in a link-time failure.
- absl::string_view prefix = field.is_cpp() ? "__rust_proto_thunk__" : "";
- std::string thunk_prefix =
- absl::StrCat(prefix, GetUnderscoreDelimitedFullName(
- field.WithDesc(field.desc().containing_type())));
+ absl::string_view prefix = ctx.is_cpp() ? "__rust_proto_thunk__" : "";
+ std::string thunk_prefix = absl::StrCat(
+ prefix, GetUnderscoreDelimitedFullName(ctx, *field.containing_type()));
return thunk_prefix;
}
template <typename T>
-std::string Thunk(Context<T> field, absl::string_view op) {
- std::string thunk = FieldPrefix(field);
+std::string ThunkName(Context& ctx, const T& field, absl::string_view op) {
+ std::string thunkName = FieldPrefix(ctx, field);
absl::string_view format;
- if (field.is_upb() && op == "get") {
+ if (ctx.is_upb() && op == "get") {
// upb getter is simply the field name (no "get" in the name).
format = "_$1";
- } else if (field.is_upb() && (op == "case")) {
+ } else if (ctx.is_upb() && op == "get_mut") {
+ // same as above, with with `mutable` prefix
+ format = "_mutable_$1";
+ } else if (ctx.is_upb() && op == "case") {
// some upb functions are in the order x_op compared to has/set/clear which
// are in the other order e.g. op_x.
format = "_$1_$0";
@@ -92,51 +95,54 @@
format = "_$0_$1";
}
- absl::SubstituteAndAppend(&thunk, format, op, field.desc().name());
- return thunk;
+ absl::SubstituteAndAppend(&thunkName, format, op, field.name());
+ return thunkName;
}
-std::string ThunkMapOrRepeated(Context<FieldDescriptor> field,
+std::string ThunkMapOrRepeated(Context& ctx, const FieldDescriptor& field,
absl::string_view op) {
- if (!field.is_upb()) {
- return Thunk<FieldDescriptor>(field, op);
+ if (!ctx.is_upb()) {
+ return ThunkName<FieldDescriptor>(ctx, field, op);
}
- std::string thunk = absl::StrCat("_", FieldPrefix(field));
+ std::string thunkName = absl::StrCat("_", FieldPrefix(ctx, field));
absl::string_view format;
if (op == "get") {
- format = field.desc().is_map() ? "_$1_upb_map" : "_$1_upb_array";
+ format = field.is_map() ? "_$1_upb_map" : "_$1_upb_array";
} else if (op == "get_mut") {
- format =
- field.desc().is_map() ? "_$1_mutable_upb_map" : "_$1_mutable_upb_array";
+ format = field.is_map() ? "_$1_mutable_upb_map" : "_$1_mutable_upb_array";
} else {
- return Thunk<FieldDescriptor>(field, op);
+ return ThunkName<FieldDescriptor>(ctx, field, op);
}
- absl::SubstituteAndAppend(&thunk, format, op, field.desc().name());
- return thunk;
+ absl::SubstituteAndAppend(&thunkName, format, op, field.name());
+ return thunkName;
}
} // namespace
-std::string Thunk(Context<FieldDescriptor> field, absl::string_view op) {
- if (field.desc().is_map() || field.desc().is_repeated()) {
- return ThunkMapOrRepeated(field, op);
+std::string ThunkName(Context& ctx, const FieldDescriptor& field,
+ absl::string_view op) {
+ if (field.is_map() || field.is_repeated()) {
+ return ThunkMapOrRepeated(ctx, field, op);
}
- return Thunk<FieldDescriptor>(field, op);
+ return ThunkName<FieldDescriptor>(ctx, field, op);
}
-std::string Thunk(Context<OneofDescriptor> field, absl::string_view op) {
- return Thunk<OneofDescriptor>(field, op);
+std::string ThunkName(Context& ctx, const OneofDescriptor& field,
+ absl::string_view op) {
+ return ThunkName<OneofDescriptor>(ctx, field, op);
}
-std::string Thunk(Context<Descriptor> msg, absl::string_view op) {
- absl::string_view prefix = msg.is_cpp() ? "__rust_proto_thunk__" : "";
- return absl::StrCat(prefix, GetUnderscoreDelimitedFullName(msg), "_", op);
+std::string ThunkName(Context& ctx, const Descriptor& msg,
+ absl::string_view op) {
+ absl::string_view prefix = ctx.is_cpp() ? "__rust_proto_thunk__" : "";
+ return absl::StrCat(prefix, GetUnderscoreDelimitedFullName(ctx, msg), "_",
+ op);
}
-std::string PrimitiveRsTypeName(const FieldDescriptor& desc) {
- switch (desc.type()) {
+std::string PrimitiveRsTypeName(const FieldDescriptor& field) {
+ switch (field.type()) {
case FieldDescriptor::TYPE_BOOL:
return "bool";
case FieldDescriptor::TYPE_INT32:
@@ -164,7 +170,7 @@
default:
break;
}
- ABSL_LOG(FATAL) << "Unsupported field type: " << desc.type_name();
+ ABSL_LOG(FATAL) << "Unsupported field type: " << field.type_name();
return "";
}
@@ -177,20 +183,18 @@
//
// If the message has no package and no containing messages then this returns
// empty string.
-std::string RustModule(Context<Descriptor> msg) {
- const Descriptor& desc = msg.desc();
-
+std::string RustModule(Context& ctx, const Descriptor& msg) {
std::vector<std::string> modules;
std::vector<std::string> package_modules =
- absl::StrSplit(desc.file()->package(), '.', absl::SkipEmpty());
+ absl::StrSplit(msg.file()->package(), '.', absl::SkipEmpty());
modules.insert(modules.begin(), package_modules.begin(),
package_modules.end());
// Innermost to outermost order.
std::vector<std::string> modules_from_containing_types;
- const Descriptor* parent = desc.containing_type();
+ const Descriptor* parent = msg.containing_type();
while (parent != nullptr) {
modules_from_containing_types.push_back(absl::StrCat(parent->name(), "_"));
parent = parent->containing_type();
@@ -210,27 +214,24 @@
return absl::StrJoin(modules, "::");
}
-std::string RustInternalModuleName(Context<FileDescriptor> file) {
- // TODO: Introduce a more robust mangling here to avoid conflicts
- // between `foo/bar/baz.proto` and `foo_bar/baz.proto`.
- return absl::StrReplaceAll(StripProto(file.desc().name()), {{"/", "_"}});
+std::string RustInternalModuleName(Context& ctx, const FileDescriptor& file) {
+ return absl::StrReplaceAll(StripProto(file.name()),
+ {{"_", "__"}, {"/", "_s"}});
}
-std::string GetCrateRelativeQualifiedPath(Context<Descriptor> msg) {
- return absl::StrCat(RustModule(msg), msg.desc().name());
+std::string GetCrateRelativeQualifiedPath(Context& ctx, const Descriptor& msg) {
+ return absl::StrCat(RustModule(ctx, msg), msg.name());
}
-std::string FieldInfoComment(Context<FieldDescriptor> field) {
- absl::string_view label =
- field.desc().is_repeated() ? "repeated" : "optional";
- std::string comment =
- absl::StrCat(field.desc().name(), ": ", label, " ",
- FieldDescriptor::TypeName(field.desc().type()));
+std::string FieldInfoComment(Context& ctx, const FieldDescriptor& field) {
+ absl::string_view label = field.is_repeated() ? "repeated" : "optional";
+ std::string comment = absl::StrCat(field.name(), ": ", label, " ",
+ FieldDescriptor::TypeName(field.type()));
- if (auto* m = field.desc().message_type()) {
+ if (auto* m = field.message_type()) {
absl::StrAppend(&comment, " ", m->full_name());
}
- if (auto* m = field.desc().enum_type()) {
+ if (auto* m = field.enum_type()) {
absl::StrAppend(&comment, " ", m->full_name());
}
diff --git a/src/google/protobuf/compiler/rust/naming.h b/src/google/protobuf/compiler/rust/naming.h
index 2bb5cc5..154e902 100644
--- a/src/google/protobuf/compiler/rust/naming.h
+++ b/src/google/protobuf/compiler/rust/naming.h
@@ -19,25 +19,28 @@
namespace protobuf {
namespace compiler {
namespace rust {
-std::string GetCrateName(Context<FileDescriptor> dep);
+std::string GetCrateName(Context& ctx, const FileDescriptor& dep);
-std::string GetRsFile(Context<FileDescriptor> file);
-std::string GetThunkCcFile(Context<FileDescriptor> file);
-std::string GetHeaderFile(Context<FileDescriptor> file);
+std::string GetRsFile(Context& ctx, const FileDescriptor& file);
+std::string GetThunkCcFile(Context& ctx, const FileDescriptor& file);
+std::string GetHeaderFile(Context& ctx, const FileDescriptor& file);
-std::string Thunk(Context<FieldDescriptor> field, absl::string_view op);
-std::string Thunk(Context<OneofDescriptor> field, absl::string_view op);
+std::string ThunkName(Context& ctx, const FieldDescriptor& field,
+ absl::string_view op);
+std::string ThunkName(Context& ctx, const OneofDescriptor& field,
+ absl::string_view op);
-std::string Thunk(Context<Descriptor> msg, absl::string_view op);
+std::string ThunkName(Context& ctx, const Descriptor& msg,
+ absl::string_view op);
-std::string PrimitiveRsTypeName(const FieldDescriptor& desc);
+std::string PrimitiveRsTypeName(const FieldDescriptor& field);
-std::string FieldInfoComment(Context<FieldDescriptor> field);
+std::string FieldInfoComment(Context& ctx, const FieldDescriptor& field);
-std::string RustModule(Context<Descriptor> msg);
-std::string RustInternalModuleName(Context<FileDescriptor> file);
+std::string RustModule(Context& ctx, const Descriptor& msg);
+std::string RustInternalModuleName(Context& ctx, const FileDescriptor& file);
-std::string GetCrateRelativeQualifiedPath(Context<Descriptor> msg);
+std::string GetCrateRelativeQualifiedPath(Context& ctx, const Descriptor& msg);
} // namespace rust
} // namespace compiler
diff --git a/src/google/protobuf/compiler/rust/naming_test.cc b/src/google/protobuf/compiler/rust/naming_test.cc
new file mode 100644
index 0000000..a9294d0
--- /dev/null
+++ b/src/google/protobuf/compiler/rust/naming_test.cc
@@ -0,0 +1,37 @@
+#include "google/protobuf/compiler/rust/naming.h"
+
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+#include "google/protobuf/compiler/rust/context.h"
+#include "google/protobuf/descriptor.h"
+#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
+
+using google::protobuf::compiler::rust::Context;
+using google::protobuf::compiler::rust::Kernel;
+using google::protobuf::compiler::rust::Options;
+using google::protobuf::compiler::rust::RustGeneratorContext;
+using google::protobuf::compiler::rust::RustInternalModuleName;
+using google::protobuf::io::Printer;
+using google::protobuf::io::StringOutputStream;
+
+namespace {
+TEST(RustProtoNaming, RustInternalModuleName) {
+ google::protobuf::FileDescriptorProto foo_file;
+ foo_file.set_name("strong_bad/lol.proto");
+ google::protobuf::DescriptorPool pool;
+ const google::protobuf::FileDescriptor* fd = pool.BuildFile(foo_file);
+
+ const Options opts = {Kernel::kUpb};
+ std::vector<const google::protobuf::FileDescriptor*> files{fd};
+ const RustGeneratorContext rust_generator_context(&files);
+ std::string output;
+ StringOutputStream stream{&output};
+ Printer printer(&stream);
+ Context c = Context(&opts, &rust_generator_context, &printer);
+
+ EXPECT_EQ(RustInternalModuleName(c, *fd), "strong__bad_slol");
+}
+
+} // namespace
diff --git a/src/google/protobuf/compiler/rust/oneof.cc b/src/google/protobuf/compiler/rust/oneof.cc
index 7f2671d..a2d4ca8 100644
--- a/src/google/protobuf/compiler/rust/oneof.cc
+++ b/src/google/protobuf/compiler/rust/oneof.cc
@@ -9,6 +9,8 @@
#include <string>
+#include "absl/log/absl_log.h"
+#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/compiler/rust/context.h"
@@ -37,7 +39,7 @@
// message SomeMsg {
// oneof some_oneof {
// int32 field_a = 7;
-// uint32 field_b = 9;
+// SomeMsg field_b = 9;
// }
// }
//
@@ -45,14 +47,14 @@
// pub mod SomeMsg_ {
// // The 'view' struct (no suffix on the name)
// pub enum SomeOneof<'msg> {
-// FieldA(View<'msg, i32>) = 7,
-// FieldB(View<'msg, u32>) = 9,
-// not_set = 0
+// FieldA(i32) = 7,
+// FieldB(View<'msg, SomeMsg>) = 9,
+// not_set(std::marker::PhantomData<&'msg ()>) = 0
// }
// pub enum SomeOneofMut<'msg> {
// FieldA(Mut<'msg, i32>) = 7,
-// FieldB(Mut<'msg, u32>) = 9,
-// not_set = 0
+// FieldB(Mut<'msg, SomeMsg>) = 9,
+// not_set(std::marker::PhantomData<&'msg ()>) = 0
// }
// }
// impl SomeMsg {
@@ -76,84 +78,124 @@
return cpp::UnderscoresToCamelCase(name, /* upper initial letter */ true);
}
-std::string oneofViewEnumRsName(const OneofDescriptor& desc) {
- return ToCamelCase(desc.name());
+std::string oneofViewEnumRsName(const OneofDescriptor& oneof) {
+ return ToCamelCase(oneof.name());
}
-std::string oneofMutEnumRsName(const OneofDescriptor& desc) {
- return ToCamelCase(desc.name()) + "Mut";
+std::string oneofMutEnumRsName(const OneofDescriptor& oneof) {
+ return ToCamelCase(oneof.name()) + "Mut";
}
-std::string oneofCaseEnumName(const OneofDescriptor& desc) {
+std::string oneofCaseEnumName(const OneofDescriptor& oneof) {
// Note: This is the name used for the cpp Case enum, we use it for both
// the Rust Case enum as well as for the cpp case enum in the cpp thunk.
- return ToCamelCase(desc.name()) + "Case";
+ return ToCamelCase(oneof.name()) + "Case";
}
-// TODO: Promote up to naming.h once all types can be spelled.
-std::string RsTypeName(const FieldDescriptor& desc) {
- // TODO: Fields with a ctype set not supported in v0.6 api.
- if (desc.options().has_ctype()) {
- return "";
+std::string RsTypeNameView(Context& ctx, const FieldDescriptor& field) {
+ if (field.options().has_ctype()) {
+ return ""; // TODO: b/308792377 - ctype fields not supported yet.
}
-
- switch (desc.type()) {
+ switch (field.type()) {
+ case FieldDescriptor::TYPE_INT32:
+ case FieldDescriptor::TYPE_INT64:
+ case FieldDescriptor::TYPE_FIXED32:
+ case FieldDescriptor::TYPE_FIXED64:
+ case FieldDescriptor::TYPE_SFIXED32:
+ case FieldDescriptor::TYPE_SFIXED64:
+ case FieldDescriptor::TYPE_SINT32:
+ case FieldDescriptor::TYPE_SINT64:
+ case FieldDescriptor::TYPE_UINT32:
+ case FieldDescriptor::TYPE_UINT64:
+ case FieldDescriptor::TYPE_FLOAT:
+ case FieldDescriptor::TYPE_DOUBLE:
+ case FieldDescriptor::TYPE_BOOL:
+ return PrimitiveRsTypeName(field);
+ case FieldDescriptor::TYPE_BYTES:
+ return "&'msg [u8]";
+ case FieldDescriptor::TYPE_STRING:
+ return "&'msg ::__pb::ProtoStr";
case FieldDescriptor::TYPE_MESSAGE:
- case FieldDescriptor::TYPE_ENUM:
- case FieldDescriptor::TYPE_GROUP:
+ return absl::StrCat(
+ "::__pb::View<'msg, crate::",
+ GetCrateRelativeQualifiedPath(ctx, *field.message_type()), ">");
+ case FieldDescriptor::TYPE_ENUM: // TODO: b/300257770 - Support enums.
+ case FieldDescriptor::TYPE_GROUP: // Not supported yet.
return "";
- default:
- return PrimitiveRsTypeName(desc);
}
+
+ ABSL_LOG(FATAL) << "Unexpected field type: " << field.type_name();
+ return "";
}
-std::string RsTypeNameView(const FieldDescriptor& desc) {
- std::string type = RsTypeName(desc);
- if (type.empty()) return "";
- return "View<'msg, " + type + ">";
-}
+std::string RsTypeNameMut(Context& ctx, const FieldDescriptor& field) {
+ if (field.options().has_ctype()) {
+ return ""; // TODO: b/308792377 - ctype fields not supported yet.
+ }
+ switch (field.type()) {
+ case FieldDescriptor::TYPE_INT32:
+ case FieldDescriptor::TYPE_INT64:
+ case FieldDescriptor::TYPE_FIXED32:
+ case FieldDescriptor::TYPE_FIXED64:
+ case FieldDescriptor::TYPE_SFIXED32:
+ case FieldDescriptor::TYPE_SFIXED64:
+ case FieldDescriptor::TYPE_SINT32:
+ case FieldDescriptor::TYPE_SINT64:
+ case FieldDescriptor::TYPE_UINT32:
+ case FieldDescriptor::TYPE_UINT64:
+ case FieldDescriptor::TYPE_FLOAT:
+ case FieldDescriptor::TYPE_DOUBLE:
+ case FieldDescriptor::TYPE_BOOL:
+ case FieldDescriptor::TYPE_BYTES:
+ case FieldDescriptor::TYPE_STRING:
+ return absl::StrCat("::__pb::Mut<'msg, ", PrimitiveRsTypeName(field),
+ ">");
+ case FieldDescriptor::TYPE_MESSAGE:
+ return absl::StrCat(
+ "::__pb::Mut<'msg, crate::",
+ GetCrateRelativeQualifiedPath(ctx, *field.message_type()), ">");
+ case FieldDescriptor::TYPE_ENUM: // TODO: b/300257770 - Support enums.
+ case FieldDescriptor::TYPE_GROUP: // Not supported yet.
+ return "";
+ }
-std::string RsTypeNameMut(const FieldDescriptor& desc) {
- std::string type = RsTypeName(desc);
- if (type.empty()) return "";
- return "Mut<'msg, " + type + ">";
+ ABSL_LOG(FATAL) << "Unexpected field type: " << field.type_name();
+ return "";
}
} // namespace
-void GenerateOneofDefinition(Context<OneofDescriptor> oneof) {
- const auto& desc = oneof.desc();
-
- oneof.Emit(
- {{"view_enum_name", oneofViewEnumRsName(desc)},
- {"mut_enum_name", oneofMutEnumRsName(desc)},
+void GenerateOneofDefinition(Context& ctx, const OneofDescriptor& oneof) {
+ ctx.Emit(
+ {{"view_enum_name", oneofViewEnumRsName(oneof)},
+ {"mut_enum_name", oneofMutEnumRsName(oneof)},
{"view_fields",
[&] {
- for (int i = 0; i < desc.field_count(); ++i) {
- const auto& field = desc.field(i);
- std::string rs_type = RsTypeNameView(*field);
+ for (int i = 0; i < oneof.field_count(); ++i) {
+ auto& field = *oneof.field(i);
+ std::string rs_type = RsTypeNameView(ctx, field);
if (rs_type.empty()) {
continue;
}
- oneof.Emit({{"name", ToCamelCase(field->name())},
- {"type", rs_type},
- {"number", std::to_string(field->number())}},
- R"rs($name$($pb$::$type$) = $number$,
+ ctx.Emit({{"name", ToCamelCase(field.name())},
+ {"type", rs_type},
+ {"number", std::to_string(field.number())}},
+ R"rs($name$($type$) = $number$,
)rs");
}
}},
{"mut_fields",
[&] {
- for (int i = 0; i < desc.field_count(); ++i) {
- const auto& field = desc.field(i);
- std::string rs_type = RsTypeNameMut(*field);
+ for (int i = 0; i < oneof.field_count(); ++i) {
+ auto& field = *oneof.field(i);
+ std::string rs_type = RsTypeNameMut(ctx, field);
if (rs_type.empty()) {
continue;
}
- oneof.Emit({{"name", ToCamelCase(field->name())},
- {"type", rs_type},
- {"number", std::to_string(field->number())}},
- R"rs($name$($pb$::$type$) = $number$,
+ ctx.Emit({{"name", ToCamelCase(field.name())},
+ {"type", rs_type},
+ {"number", std::to_string(field.number())}},
+ R"rs($name$($type$) = $number$,
)rs");
}
}}},
@@ -188,20 +230,21 @@
// Note: This enum is used as the Thunk return type for getting which case is
// used: it exactly matches the generate case enum that both cpp and upb use.
- oneof.Emit({{"case_enum_name", oneofCaseEnumName(desc)},
- {"cases",
- [&] {
- for (int i = 0; i < desc.field_count(); ++i) {
- const auto& field = desc.field(i);
- oneof.Emit({{"name", ToCamelCase(field->name())},
- {"number", std::to_string(field->number())}},
- R"rs($name$ = $number$,
+ ctx.Emit({{"case_enum_name", oneofCaseEnumName(oneof)},
+ {"cases",
+ [&] {
+ for (int i = 0; i < oneof.field_count(); ++i) {
+ auto& field = *oneof.field(i);
+ ctx.Emit({{"name", ToCamelCase(field.name())},
+ {"number", std::to_string(field.number())}},
+ R"rs($name$ = $number$,
)rs");
- }
- }}},
- R"rs(
+ }
+ }}},
+ R"rs(
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+ #[allow(dead_code)]
pub(super) enum $case_enum_name$ {
$cases$
@@ -212,63 +255,71 @@
)rs");
}
-void GenerateOneofAccessors(Context<OneofDescriptor> oneof) {
- const auto& desc = oneof.desc();
-
- oneof.Emit(
- {{"oneof_name", desc.name()},
- {"view_enum_name", oneofViewEnumRsName(desc)},
- {"mut_enum_name", oneofMutEnumRsName(desc)},
- {"case_enum_name", oneofCaseEnumName(desc)},
+void GenerateOneofAccessors(Context& ctx, const OneofDescriptor& oneof) {
+ ctx.Emit(
+ {{"oneof_name", oneof.name()},
+ {"view_enum_name", oneofViewEnumRsName(oneof)},
+ {"mut_enum_name", oneofMutEnumRsName(oneof)},
+ {"case_enum_name", oneofCaseEnumName(oneof)},
{"view_cases",
[&] {
- for (int i = 0; i < desc.field_count(); ++i) {
- const auto& field = desc.field(i);
- std::string rs_type = RsTypeNameView(*field);
+ for (int i = 0; i < oneof.field_count(); ++i) {
+ auto& field = *oneof.field(i);
+ std::string rs_type = RsTypeNameView(ctx, field);
if (rs_type.empty()) {
continue;
}
- oneof.Emit(
+ ctx.Emit(
{
- {"case", ToCamelCase(field->name())},
- {"rs_getter", field->name()},
+ {"case", ToCamelCase(field.name())},
+ {"rs_getter", field.name()},
{"type", rs_type},
},
- R"rs($Msg$_::$case_enum_name$::$case$ => $Msg$_::$view_enum_name$::$case$(self.$rs_getter$()),
+ R"rs(
+ $Msg$_::$case_enum_name$::$case$ =>
+ $Msg$_::$view_enum_name$::$case$(self.$rs_getter$()),
)rs");
}
}},
{"mut_cases",
[&] {
- for (int i = 0; i < desc.field_count(); ++i) {
- const auto& field = desc.field(i);
- std::string rs_type = RsTypeNameMut(*field);
+ for (int i = 0; i < oneof.field_count(); ++i) {
+ auto& field = *oneof.field(i);
+ std::string rs_type = RsTypeNameMut(ctx, field);
if (rs_type.empty()) {
continue;
}
- oneof.Emit(
- {
- {"case", ToCamelCase(field->name())},
- {"rs_mut_getter", field->name() + "_mut"},
- {"type", rs_type},
- },
+ ctx.Emit(
+ {{"case", ToCamelCase(field.name())},
+ {"rs_mut_getter", field.name() + "_mut"},
+ {"type", rs_type},
- // The flow here is:
- // 1) First find out which oneof field is already set (if any)
- // 2) If a field is set, call the corresponding field's _mut()
- // and wrap that Mut<> in the SomeOneofMut eum.
- // During step 2 this code uses try_into_mut().unwrap() instead
- // of .or_default() so that it will panic if step 1 says that
- // the field is set, but then the _mut() accessor for the
- // corresponding field shows as unset; if that happened it would
- // imply a severe error in protobuf code; .or_default() would
- // silently continue and cause the field to become set on the
- // message, which is not the intended behavior.
- R"rs($Msg$_::$case_enum_name$::$case$ =>
- $Msg$_::$mut_enum_name$::$case$(self.$rs_mut_getter$().try_into_mut().unwrap()), )rs");
+ // Any extra behavior needed to map the mut getter into the
+ // unwrapped Mut<>. Right now Message's _mut already returns
+ // the Mut directly, but for scalars the accessor will return
+ // an Optional which we then grab the mut by doing
+ // .try_into_mut().unwrap().
+ //
+ // Note that this unwrap() is safe because the flow is:
+ // 1) Find out which oneof field is already set (if any)
+ // 2) If a field is set, call the corresponding field's _mut()
+ // and wrap the result in the SomeOneofMut enum.
+ // The unwrap() will only ever panic if the which oneof enum
+ // disagrees with the corresponding field presence which.
+ // TODO: If the message _mut accessor returns
+ // Optional<> then this conditional behavior should be removed.
+ {"into_mut_transform",
+ field.type() == FieldDescriptor::TYPE_MESSAGE
+ ? ""
+ : ".try_into_mut().unwrap()"}},
+ R"rs(
+ $Msg$_::$case_enum_name$::$case$ =>
+ $Msg$_::$mut_enum_name$::$case$(
+ self.$rs_mut_getter$()$into_mut_transform$),
+ )rs");
}
}},
- {"case_thunk", Thunk(oneof, "case")}},
+ {"case_thunk", ThunkName(ctx, oneof, "case")}},
R"rs(
pub fn r#$oneof_name$(&self) -> $Msg$_::$view_enum_name$ {
match unsafe { $case_thunk$(self.inner.msg) } {
@@ -287,26 +338,24 @@
)rs");
}
-void GenerateOneofExternC(Context<OneofDescriptor> oneof) {
- const auto& desc = oneof.desc();
- oneof.Emit(
+void GenerateOneofExternC(Context& ctx, const OneofDescriptor& oneof) {
+ ctx.Emit(
{
- {"case_enum_rs_name", oneofCaseEnumName(desc)},
- {"case_thunk", Thunk(oneof, "case")},
+ {"case_enum_rs_name", oneofCaseEnumName(oneof)},
+ {"case_thunk", ThunkName(ctx, oneof, "case")},
},
R"rs(
fn $case_thunk$(raw_msg: $pbi$::RawMessage) -> $Msg$_::$case_enum_rs_name$;
)rs");
}
-void GenerateOneofThunkCc(Context<OneofDescriptor> oneof) {
- const auto& desc = oneof.desc();
- oneof.Emit(
+void GenerateOneofThunkCc(Context& ctx, const OneofDescriptor& oneof) {
+ ctx.Emit(
{
- {"oneof_name", desc.name()},
- {"case_enum_name", oneofCaseEnumName(desc)},
- {"case_thunk", Thunk(oneof, "case")},
- {"QualifiedMsg", cpp::QualifiedClassName(desc.containing_type())},
+ {"oneof_name", oneof.name()},
+ {"case_enum_name", oneofCaseEnumName(oneof)},
+ {"case_thunk", ThunkName(ctx, oneof, "case")},
+ {"QualifiedMsg", cpp::QualifiedClassName(oneof.containing_type())},
},
R"cc(
$QualifiedMsg$::$case_enum_name$ $case_thunk$($QualifiedMsg$* msg) {
diff --git a/src/google/protobuf/compiler/rust/oneof.h b/src/google/protobuf/compiler/rust/oneof.h
index 98e2bc9..7ad2143 100644
--- a/src/google/protobuf/compiler/rust/oneof.h
+++ b/src/google/protobuf/compiler/rust/oneof.h
@@ -16,10 +16,10 @@
namespace compiler {
namespace rust {
-void GenerateOneofDefinition(Context<OneofDescriptor> oneof);
-void GenerateOneofAccessors(Context<OneofDescriptor> oneof);
-void GenerateOneofExternC(Context<OneofDescriptor> oneof);
-void GenerateOneofThunkCc(Context<OneofDescriptor> oneof);
+void GenerateOneofDefinition(Context& ctx, const OneofDescriptor& oneof);
+void GenerateOneofAccessors(Context& ctx, const OneofDescriptor& oneof);
+void GenerateOneofExternC(Context& ctx, const OneofDescriptor& oneof);
+void GenerateOneofThunkCc(Context& ctx, const OneofDescriptor& oneof);
} // namespace rust
} // namespace compiler
diff --git a/src/google/protobuf/compiler/versions.cc b/src/google/protobuf/compiler/versions.cc
new file mode 100644
index 0000000..8927d8c
--- /dev/null
+++ b/src/google/protobuf/compiler/versions.cc
@@ -0,0 +1,58 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "google/protobuf/compiler/versions.h"
+
+#include <string>
+#include <vector>
+
+#include "absl/log/absl_check.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/str_split.h"
+#include "absl/strings/string_view.h"
+#include "google/protobuf/compiler/plugin.pb.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace internal {
+Version ParseProtobufVersion(absl::string_view version) {
+ ABSL_CHECK(!version.empty()) << "version cannot be empty.";
+ Version result;
+ std::vector<std::string> parts = absl::StrSplit(version, '-');
+ ABSL_CHECK(parts.size() <= 2)
+ << "version cannot have more than one suffix annotated by \"-\".";
+ if (parts.size() == 2) result.set_suffix(absl::StrCat("-", parts[1]));
+ parts = absl::StrSplit(parts[0], '.');
+ ABSL_CHECK(parts.size() == 3)
+ << "version string must provide major, minor and micro numbers.";
+ result.set_major(std::stoi(parts[0]));
+ result.set_minor(std::stoi(parts[1]));
+ result.set_patch(std::stoi(parts[2]));
+ return result;
+}
+} // namespace internal
+
+const Version& GetProtobufCPPVersion() {
+ // Heap-allocated versions to avoid re-parsing version strings
+ static const Version* cpp_version =
+ new Version(internal::ParseProtobufVersion(PROTOBUF_CPP_VERSION_STRING));
+ return *cpp_version;
+}
+const Version& GetProtobufJavaVersion() {
+ static const Version* java_version =
+ new Version(internal::ParseProtobufVersion(PROTOBUF_JAVA_VERSION_STRING));
+ return *java_version;
+}
+const Version& GetProtobufPythonVersion() {
+ static const Version* python_version = new Version(
+ internal::ParseProtobufVersion(PROTOBUF_PYTHON_VERSION_STRING));
+ return *python_version;
+}
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/compiler/versions.h b/src/google/protobuf/compiler/versions.h
index e84b303..b2ac1c3 100644
--- a/src/google/protobuf/compiler/versions.h
+++ b/src/google/protobuf/compiler/versions.h
@@ -31,6 +31,12 @@
#ifndef GOOGLE_PROTOBUF_VERSIONS_H__
#define GOOGLE_PROTOBUF_VERSIONS_H__
+#include "absl/strings/string_view.h"
+#include "google/protobuf/compiler/plugin.pb.h"
+
+// Must be included last.
+#include "google/protobuf/port_def.inc"
+
// Defines compiler version strings for Protobuf code generators.
//
// When they are suffixed with "-dev", they reflect the version of the next
@@ -51,4 +57,20 @@
#define PROTOBUF_JAVA_VERSION_STRING "3.26.0-dev"
#define PROTOBUF_PYTHON_VERSION_STRING "4.26.0-dev"
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace internal {
+// For internal use to parse the Protobuf language version strings.
+PROTOC_EXPORT Version ParseProtobufVersion(absl::string_view version);
+} // namespace internal
+
+// Gets the version message according to the version strings defined above.
+const Version& GetProtobufCPPVersion();
+const Version& GetProtobufJavaVersion();
+const Version& GetProtobufPythonVersion();
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
+#include "google/protobuf/port_undef.inc"
#endif // GOOGLE_PROTOBUF_VERSIONS_H__
diff --git a/src/google/protobuf/compiler/versions_test.cc b/src/google/protobuf/compiler/versions_test.cc
new file mode 100644
index 0000000..31e65c1
--- /dev/null
+++ b/src/google/protobuf/compiler/versions_test.cc
@@ -0,0 +1,51 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "google/protobuf/compiler/versions.h"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include "google/protobuf/test_textproto.h"
+
+namespace google {
+namespace protobuf {
+namespace compiler {
+namespace internal {
+namespace {
+TEST(ParseProtobufVersionTest, EmptyVersionString) {
+ EXPECT_DEATH({ ParseProtobufVersion(""); }, "version cannot be empty.");
+}
+
+TEST(ParseProtobufVersionTest, MissingVersionSegment) {
+ EXPECT_DEATH({ ParseProtobufVersion("3.26-dev"); },
+ "version string must provide major, minor and micro numbers.");
+}
+
+TEST(ParseProtobufVersionTest, RedundantVersionSuffix) {
+ EXPECT_DEATH({ ParseProtobufVersion("3.26-dev-rc1"); },
+ "version cannot have more than one suffix annotated by \"-\".");
+}
+
+TEST(ParseProtobufVersionTest, FullVersionWithRCSuffix) {
+ EXPECT_THAT(ParseProtobufVersion("3.26.2-rc1"),
+ EqualsProto(R"pb(major: 3 minor: 26 patch: 2 suffix: "-rc1")pb"));
+}
+
+TEST(ParseProtobufVersionTest, FullVersionWithoutSuffix) {
+ EXPECT_THAT(ParseProtobufVersion("3.26.2"),
+ EqualsProto(R"pb(major: 3 minor: 26 patch: 2)pb"));
+}
+
+TEST(ParseProtobufVersionTest, VersionWithDevSuffix) {
+ EXPECT_THAT(ParseProtobufVersion("3.26.0-dev"),
+ EqualsProto(R"pb(major: 3 minor: 26 patch: 0 suffix: "-dev")pb"));
+}
+} // namespace
+} // namespace internal
+} // namespace compiler
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/cpp_edition_defaults.h b/src/google/protobuf/cpp_edition_defaults.h
index 0e87733..151455f 100644
--- a/src/google/protobuf/cpp_edition_defaults.h
+++ b/src/google/protobuf/cpp_edition_defaults.h
@@ -5,7 +5,7 @@
// the C++ runtime. This is used for feature resolution under Editions.
// NOLINTBEGIN
// clang-format off
-#define PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS "\n\026\022\021\010\001\020\002\030\002 \001(\0010\002\302>\002\010\001\030\346\007\n\026\022\021\010\002\020\001\030\001 \002(\0010\001\302>\002\010\000\030\347\007\n\026\022\021\010\001\020\001\030\001 \002(\0010\001\302>\002\010\000\030\350\007 \346\007(\350\007"
+#define PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS "\n\026\022\021\010\001\020\002\030\002 \003(\0010\002\302>\002\010\001\030\346\007\n\026\022\021\010\002\020\001\030\001 \002(\0010\001\302>\002\010\000\030\347\007\n\026\022\021\010\001\020\001\030\001 \002(\0010\001\302>\002\010\000\030\350\007 \346\007(\350\007"
// clang-format on
// NOLINTEND
diff --git a/src/google/protobuf/cpp_features.pb.cc b/src/google/protobuf/cpp_features.pb.cc
index 6e77d54..9ed6b80 100644
--- a/src/google/protobuf/cpp_features.pb.cc
+++ b/src/google/protobuf/cpp_features.pb.cc
@@ -124,9 +124,6 @@
using HasBits = decltype(std::declval<CppFeatures>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(CppFeatures, _impl_._has_bits_);
- static void set_has_legacy_closed_enum(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
CppFeatures::CppFeatures(::google::protobuf::Arena* arena)
@@ -160,12 +157,15 @@
const ::google::protobuf::MessageLite::ClassData*
CppFeatures::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- CppFeatures::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(CppFeatures, _impl_._cached_size_),
+ false,
+ },
+ &CppFeatures::MergeImpl,
+ &CppFeatures::kDescriptorMethods,
};
return &_data_;
}
@@ -263,7 +263,7 @@
}
-void CppFeatures::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void CppFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<CppFeatures*>(&to_msg);
auto& from = static_cast<const CppFeatures&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:pb.CppFeatures)
@@ -271,9 +271,11 @@
::uint32_t cached_has_bits = 0;
(void) cached_has_bits;
- if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) {
- _this->_internal_set_legacy_closed_enum(from._internal_legacy_closed_enum());
+ cached_has_bits = from._impl_._has_bits_[0];
+ if (cached_has_bits & 0x00000001u) {
+ _this->_impl_.legacy_closed_enum_ = from._impl_.legacy_closed_enum_;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -296,15 +298,15 @@
}
::google::protobuf::Metadata CppFeatures::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fcpp_5ffeatures_2eproto_getter, &descriptor_table_google_2fprotobuf_2fcpp_5ffeatures_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fcpp_5ffeatures_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fcpp_5ffeatures_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fcpp_5ffeatures_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fcpp_5ffeatures_2eproto[0]);
}
PROTOBUF_CONSTINIT PROTOBUF_EXPORT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 ::_pbi::
ExtensionIdentifier<::google::protobuf::FeatureSet, ::_pbi::MessageTypeTraits< ::pb::CppFeatures >,
11, false>
- cpp(kCppFieldNumber);
+ cpp(kCppFieldNumber, &::pb::_CppFeatures_default_instance_);
// @@protoc_insertion_point(namespace_scope)
} // namespace pb
namespace google {
diff --git a/src/google/protobuf/cpp_features.pb.h b/src/google/protobuf/cpp_features.pb.h
index f8d995c..3a9558b 100644
--- a/src/google/protobuf/cpp_features.pb.h
+++ b/src/google/protobuf/cpp_features.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -73,21 +67,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT CppFeatures final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:pb.CppFeatures) */ {
+class PROTOBUF_EXPORT CppFeatures final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:pb.CppFeatures) */ {
public:
inline CppFeatures() : CppFeatures(nullptr) {}
~CppFeatures() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR CppFeatures(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR CppFeatures(
+ ::google::protobuf::internal::ConstantInitialized);
- inline CppFeatures(const CppFeatures& from)
- : CppFeatures(nullptr, from) {}
- CppFeatures(CppFeatures&& from) noexcept
- : CppFeatures() {
- *this = ::std::move(from);
- }
-
+ inline CppFeatures(const CppFeatures& from) : CppFeatures(nullptr, from) {}
+ inline CppFeatures(CppFeatures&& from) noexcept
+ : CppFeatures(nullptr, std::move(from)) {}
inline CppFeatures& operator=(const CppFeatures& from) {
CopyFrom(from);
return *this;
@@ -95,9 +86,9 @@
inline CppFeatures& operator=(CppFeatures&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -129,22 +120,17 @@
}
static inline const CppFeatures* internal_default_instance() {
return reinterpret_cast<const CppFeatures*>(
- &_CppFeatures_default_instance_);
+ &_CppFeatures_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(CppFeatures& a, CppFeatures& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(CppFeatures& a, CppFeatures& b) { a.Swap(&b); }
inline void Swap(CppFeatures* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -164,11 +150,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const CppFeatures& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const CppFeatures& from) {
- CppFeatures::MergeImpl(*this, from);
- }
+ void MergeFrom(const CppFeatures& from) { CppFeatures::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -176,31 +164,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(CppFeatures* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "pb.CppFeatures";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "pb.CppFeatures"; }
+
+ protected:
explicit CppFeatures(::google::protobuf::Arena* arena);
CppFeatures(::google::protobuf::Arena* arena, const CppFeatures& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ CppFeatures(::google::protobuf::Arena* arena, CppFeatures&& from) noexcept
+ : CppFeatures(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kLegacyClosedEnumFieldNumber = 1,
};
@@ -218,7 +208,6 @@
// @@protoc_insertion_point(class_scope:pb.CppFeatures)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -230,14 +219,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
bool legacy_closed_enum_;
@@ -284,6 +272,7 @@
}
inline void CppFeatures::set_legacy_closed_enum(bool value) {
_internal_set_legacy_closed_enum(value);
+ _impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:pb.CppFeatures.legacy_closed_enum)
}
inline bool CppFeatures::_internal_legacy_closed_enum() const {
@@ -292,7 +281,6 @@
}
inline void CppFeatures::_internal_set_legacy_closed_enum(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
_impl_.legacy_closed_enum_ = value;
}
diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc
index 0f1cd6b..00c21dd 100644
--- a/src/google/protobuf/descriptor.cc
+++ b/src/google/protobuf/descriptor.cc
@@ -36,6 +36,7 @@
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/memory/memory.h"
+#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/ascii.h"
#include "absl/strings/escaping.h"
@@ -54,7 +55,6 @@
#include "google/protobuf/cpp_features.pb.h"
#include "google/protobuf/descriptor.pb.h"
#include "google/protobuf/descriptor_database.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/descriptor_visitor.h"
#include "google/protobuf/dynamic_message.h"
#include "google/protobuf/feature_resolver.h"
@@ -810,23 +810,6 @@
"repeated", // LABEL_REPEATED
};
-PROTOBUF_IGNORE_DEPRECATION_START
-const char* FileDescriptor::SyntaxName(FileDescriptor::Syntax syntax) {
- switch (syntax) {
- case SYNTAX_PROTO2:
- return "proto2";
- case SYNTAX_PROTO3:
- return "proto3";
- case SYNTAX_EDITIONS:
- return "editions";
- case SYNTAX_UNKNOWN:
- return "unknown";
- }
- ABSL_LOG(FATAL) << "can't reach here.";
- return nullptr;
-}
-PROTOBUF_IGNORE_DEPRECATION_STOP
-
static const char* const kNonLinkedWeakMessageReplacementName = "google.protobuf.Empty";
#if !defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)
@@ -1092,14 +1075,16 @@
}
const FeatureSetDefaults& GetCppFeatureSetDefaults() {
- static const FeatureSetDefaults* default_spec = [] {
- auto* defaults = new FeatureSetDefaults();
- internal::ParseNoReflection(
- absl::string_view{PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
- sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
- *defaults);
- return defaults;
- }();
+ static const FeatureSetDefaults* default_spec =
+ internal::OnShutdownDelete([] {
+ auto* defaults = new FeatureSetDefaults();
+ internal::ParseNoReflection(
+ absl::string_view{
+ PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
+ sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
+ *defaults);
+ return defaults;
+ }());
return *default_spec;
}
@@ -1178,6 +1163,25 @@
const FeatureSet& GetParentFeatures(const MethodDescriptor* method) {
return internal::InternalFeatureHelper::GetFeatures(*method->service());
}
+
+bool IsLegacyEdition(const FileDescriptor* file) {
+ return file->edition() < Edition::EDITION_2023;
+}
+
+template <class DescriptorT>
+bool IsLegacyEdition(const DescriptorT* descriptor) {
+ return IsLegacyEdition(descriptor->file());
+}
+
+Edition GetDescriptorEdition(const FileDescriptor* descriptor) {
+ return descriptor->edition();
+}
+
+template <class DescriptorT>
+Edition GetDescriptorEdition(const DescriptorT* descriptor) {
+ return GetDescriptorEdition(descriptor->file());
+}
+
} // anonymous namespace
// Contains tables specific to a particular file. These tables are not
@@ -2720,6 +2724,7 @@
void FileDescriptor::CopyTo(FileDescriptorProto* proto) const {
CopyHeadingTo(proto);
+
for (int i = 0; i < dependency_count(); i++) {
proto->add_dependency(dependency(i)->name());
}
@@ -2752,13 +2757,10 @@
proto->set_package(package());
}
- // TODO: Also populate when syntax="proto2".
- FileDescriptorLegacy::Syntax syntax = FileDescriptorLegacy(this).syntax();
- if (syntax == FileDescriptorLegacy::Syntax::SYNTAX_PROTO3 ||
- syntax == FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS) {
- proto->set_syntax(FileDescriptorLegacy::SyntaxName(syntax));
- }
- if (syntax == FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS) {
+ if (edition() == Edition::EDITION_PROTO3) {
+ proto->set_syntax("proto3");
+ } else if (!IsLegacyEdition(this)) {
+ proto->set_syntax("editions");
proto->set_edition(edition());
}
@@ -2855,8 +2857,7 @@
}
// Some compilers do not allow static_cast directly between two enum types,
// so we must cast to int first.
- if (is_required() && FileDescriptorLegacy(file()).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS) {
+ if (is_required() && !IsLegacyEdition(this)) {
// Editions files have no required keyword, and we only set this label
// during descriptor build.
proto->set_label(static_cast<FieldDescriptorProto::Label>(
@@ -2865,9 +2866,7 @@
proto->set_label(static_cast<FieldDescriptorProto::Label>(
absl::implicit_cast<int>(label())));
}
- if (type() == TYPE_GROUP &&
- FileDescriptorLegacy(file()).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS) {
+ if (type() == TYPE_GROUP && !IsLegacyEdition(this)) {
// Editions files have no group keyword, and we only set this label
// during descriptor build.
proto->set_type(static_cast<FieldDescriptorProto::Type>(
@@ -3004,11 +3003,7 @@
namespace {
bool IsGroupSyntax(const FieldDescriptor* desc) {
- if (FileDescriptorLegacy(desc->file()).syntax() ==
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
- return false;
- }
- return desc->type() == FieldDescriptor::TYPE_GROUP;
+ return IsLegacyEdition(desc) && desc->type() == FieldDescriptor::TYPE_GROUP;
}
template <typename OptionsT>
@@ -3122,6 +3117,14 @@
return !all_options.empty();
}
+static std::string GetLegacySyntaxName(const FileDescriptor* file) {
+ if (file->edition() == Edition::EDITION_PROTO3) {
+ return "proto3";
+ }
+ return "proto2";
+}
+
+
class SourceLocationCommentPrinter {
public:
template <typename DescType>
@@ -3198,13 +3201,11 @@
SourceLocationCommentPrinter syntax_comment(this, path, "",
debug_string_options);
syntax_comment.AddPreComment(&contents);
- if (FileDescriptorLegacy(this).syntax() ==
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
- absl::SubstituteAndAppend(&contents, "edition = \"$0\";\n\n", edition());
- } else {
+ if (IsLegacyEdition(this)) {
absl::SubstituteAndAppend(&contents, "syntax = \"$0\";\n\n",
- FileDescriptorLegacy::SyntaxName(
- FileDescriptorLegacy(this).syntax()));
+ GetLegacySyntaxName(this));
+ } else {
+ absl::SubstituteAndAppend(&contents, "edition = \"$0\";\n\n", edition());
}
syntax_comment.AddPostComment(&contents);
}
@@ -3477,13 +3478,11 @@
// Label is omitted for maps, oneof, and plain proto3 fields.
if (is_map() || real_containing_oneof() ||
- (is_optional() && !FieldDescriptorLegacy(this).has_optional_keyword())) {
+ (is_optional() && !has_optional_keyword())) {
label.clear();
}
// Label is omitted for optional and required fields under editions.
- if ((is_optional() || is_required()) &&
- FileDescriptorLegacy(file()).syntax() ==
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
+ if ((is_optional() || is_required()) && !IsLegacyEdition(this)) {
label.clear();
}
@@ -3788,6 +3787,11 @@
enum_type()->is_closed());
}
+bool FieldDescriptor::has_optional_keyword() const {
+ return proto3_optional_ || (file()->edition() == Edition::EDITION_PROTO2 &&
+ is_optional() && !containing_oneof());
+}
+
// Location methods ===============================================
bool FileDescriptor::GetSourceLocation(const std::vector<int>& path,
@@ -4257,7 +4261,6 @@
void CheckFieldJsonNameUniqueness(const std::string& message_name,
const DescriptorProto& message,
const Descriptor* descriptor,
- FileDescriptorLegacy::Syntax syntax,
bool use_custom_names);
void CheckEnumValueUniqueness(const EnumDescriptorProto& proto,
const EnumDescriptor* result);
@@ -4546,21 +4549,51 @@
if (tables_->known_bad_files_.contains(proto.name())) {
return nullptr;
}
- const FileDescriptor* result =
- DescriptorBuilder::New(this, tables_.get(), default_error_collector_)
- ->BuildFile(proto);
+ const FileDescriptor* result;
+ const auto build_file = [&] {
+ result =
+ DescriptorBuilder::New(this, tables_.get(), default_error_collector_)
+ ->BuildFile(proto);
+ };
+ if (dispatcher_ != nullptr) {
+ (*dispatcher_)(build_file);
+ } else {
+ build_file();
+ }
if (result == nullptr) {
tables_->known_bad_files_.insert(proto.name());
}
return result;
}
-void DescriptorPool::SetFeatureSetDefaults(FeatureSetDefaults spec) {
- ABSL_CHECK(!build_started_)
- << "Feature set defaults can't be changed once the pool has started "
- "building.";
+absl::Status DescriptorPool::SetFeatureSetDefaults(FeatureSetDefaults spec) {
+ if (build_started_) {
+ return absl::FailedPreconditionError(
+ "Feature set defaults can't be changed once the pool has started "
+ "building.");
+ }
+ if (spec.minimum_edition() > spec.maximum_edition()) {
+ return absl::InvalidArgumentError(
+ absl::StrCat("Invalid edition range ", spec.minimum_edition(), " to ",
+ spec.maximum_edition(), "."));
+ }
+ Edition prev_edition = EDITION_UNKNOWN;
+ for (const auto& edition_default : spec.defaults()) {
+ if (edition_default.edition() == EDITION_UNKNOWN) {
+ return absl::InvalidArgumentError(absl::StrCat(
+ "Invalid edition ", edition_default.edition(), " specified."));
+ }
+ if (edition_default.edition() <= prev_edition) {
+ return absl::InvalidArgumentError(absl::StrCat(
+ "Feature set defaults are not strictly increasing. Edition ",
+ prev_edition, " is greater than or equal to edition ",
+ edition_default.edition(), "."));
+ }
+ prev_edition = edition_default.edition();
+ }
feature_set_defaults_spec_ =
absl::make_unique<FeatureSetDefaults>(std::move(spec));
+ return absl::OkStatus();
}
DescriptorBuilder::DescriptorBuilder(
@@ -4577,7 +4610,14 @@
// have to avoid registering these pre-main, because we need to ensure that
// the linker --gc-sections step can strip out the full runtime if it is
// unused.
- pb::cpp.LazyRegister();
+ PROTOBUF_UNUSED static std::true_type lazy_register =
+ (internal::ExtensionSet::RegisterMessageExtension(
+ &FeatureSet::default_instance(), pb::cpp.number(),
+ FieldDescriptor::TYPE_MESSAGE, false, false,
+ &pb::CppFeatures::default_instance(),
+ nullptr,
+ internal::LazyAnnotation::kUndefined),
+ std::true_type{});
}
DescriptorBuilder::~DescriptorBuilder() {}
@@ -5020,7 +5060,6 @@
placeholder->tables_ = &FileDescriptorTables::GetEmptyInstance();
placeholder->source_code_info_ = &SourceCodeInfo::default_instance();
placeholder->is_placeholder_ = true;
- placeholder->syntax_ = FileDescriptorLegacy::SYNTAX_UNKNOWN;
placeholder->finished_building_ = true;
// All other fields are zero or nullptr.
@@ -5242,14 +5281,12 @@
template <class ProtoT, class OptionsT>
static void InferLegacyProtoFeatures(const ProtoT& proto,
- const OptionsT& options,
- FileDescriptorLegacy::Syntax syntax,
+ const OptionsT& options, Edition edition,
FeatureSet& features) {}
static void InferLegacyProtoFeatures(const FieldDescriptorProto& proto,
const FieldOptions& options,
- FileDescriptorLegacy::Syntax syntax,
- FeatureSet& features) {
+ Edition edition, FeatureSet& features) {
if (proto.label() == FieldDescriptorProto::LABEL_REQUIRED) {
features.set_field_presence(FeatureSet::LEGACY_REQUIRED);
}
@@ -5259,7 +5296,7 @@
if (options.packed()) {
features.set_repeated_field_encoding(FeatureSet::PACKED);
}
- if (syntax == FileDescriptorLegacy::SYNTAX_PROTO3) {
+ if (edition == Edition::EDITION_PROTO3) {
if (options.has_packed() && !options.packed()) {
features.set_repeated_field_encoding(FeatureSet::EXPANDED);
}
@@ -5267,18 +5304,6 @@
}
template <class DescriptorT>
-FileDescriptorLegacy::Syntax GetDescriptorSyntax(
- const DescriptorT* descriptor) {
- return FileDescriptorLegacy(descriptor->file()).syntax();
-}
-
-template <>
-FileDescriptorLegacy::Syntax GetDescriptorSyntax(
- const FileDescriptor* descriptor) {
- return FileDescriptorLegacy(descriptor).syntax();
-}
-
-template <class DescriptorT>
void DescriptorBuilder::ResolveFeaturesImpl(
const typename DescriptorT::Proto& proto, DescriptorT* descriptor,
typename DescriptorT::OptionsType* options, internal::FlatAllocator& alloc,
@@ -5301,13 +5326,12 @@
FeatureSet base_features = *descriptor->proto_features_;
// Handle feature inference from proto2/proto3.
- if (GetDescriptorSyntax(descriptor) !=
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
+ if (IsLegacyEdition(descriptor)) {
if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
AddError(descriptor->name(), proto, error_location,
"Features are only valid under editions.");
}
- InferLegacyProtoFeatures(proto, *options, GetDescriptorSyntax(descriptor),
+ InferLegacyProtoFeatures(proto, *options, GetDescriptorEdition(descriptor),
base_features);
}
@@ -5423,13 +5447,9 @@
const FileDescriptor* existing_file, const FileDescriptorProto& proto) {
FileDescriptorProto existing_proto;
existing_file->CopyTo(&existing_proto);
- // TODO: Remove it when CopyTo supports copying syntax params when
- // syntax="proto2".
- if (FileDescriptorLegacy(existing_file).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO2 &&
+ if (existing_file->edition() == Edition::EDITION_PROTO2 &&
proto.has_syntax()) {
- existing_proto.set_syntax(FileDescriptorLegacy::SyntaxName(
- FileDescriptorLegacy(existing_file).syntax()));
+ existing_proto.set_syntax("proto2");
}
return existing_proto.SerializeAsString() == proto.SerializeAsString();
@@ -5651,16 +5671,12 @@
// TODO: Report error when the syntax is empty after all the protos
// have added the syntax statement.
if (proto.syntax().empty() || proto.syntax() == "proto2") {
- file_->syntax_ = FileDescriptorLegacy::SYNTAX_PROTO2;
file_->edition_ = Edition::EDITION_PROTO2;
} else if (proto.syntax() == "proto3") {
- file_->syntax_ = FileDescriptorLegacy::SYNTAX_PROTO3;
file_->edition_ = Edition::EDITION_PROTO3;
} else if (proto.syntax() == "editions") {
- file_->syntax_ = FileDescriptorLegacy::SYNTAX_EDITIONS;
file_->edition_ = proto.edition();
} else {
- file_->syntax_ = FileDescriptorLegacy::SYNTAX_UNKNOWN;
file_->edition_ = Edition::EDITION_UNKNOWN;
AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER, [&] {
return absl::StrCat("Unrecognized syntax: ", proto.syntax());
@@ -6174,21 +6190,19 @@
void DescriptorBuilder::CheckFieldJsonNameUniqueness(
const DescriptorProto& proto, const Descriptor* result) {
- FileDescriptorLegacy::Syntax syntax =
- FileDescriptorLegacy(result->file()).syntax();
std::string message_name = result->full_name();
if (pool_->deprecated_legacy_json_field_conflicts_ ||
IsLegacyJsonFieldConflictEnabled(result->options())) {
- if (syntax == FileDescriptorLegacy::Syntax::SYNTAX_PROTO3) {
+ if (result->file()->edition() == Edition::EDITION_PROTO3) {
// Only check default JSON names for conflicts in proto3. This is legacy
// behavior that will be removed in a later version.
- CheckFieldJsonNameUniqueness(message_name, proto, result, syntax, false);
+ CheckFieldJsonNameUniqueness(message_name, proto, result, false);
}
} else {
// Check both with and without taking json_name into consideration. This is
// needed for field masks, which don't use json_name.
- CheckFieldJsonNameUniqueness(message_name, proto, result, syntax, false);
- CheckFieldJsonNameUniqueness(message_name, proto, result, syntax, true);
+ CheckFieldJsonNameUniqueness(message_name, proto, result, false);
+ CheckFieldJsonNameUniqueness(message_name, proto, result, true);
}
}
@@ -6208,7 +6222,7 @@
field->json_name() != default_json_name) {
return {field, field->json_name(), true};
}
- return {field, default_json_name, false};
+ return {field, std::move(default_json_name), false};
}
bool JsonNameLooksLikeExtension(std::string name) {
@@ -6219,8 +6233,7 @@
void DescriptorBuilder::CheckFieldJsonNameUniqueness(
const std::string& message_name, const DescriptorProto& message,
- const Descriptor* descriptor, FileDescriptorLegacy::Syntax syntax,
- bool use_custom_names) {
+ const Descriptor* descriptor, bool use_custom_names) {
absl::flat_hash_map<std::string, JsonNameDetails> name_to_field;
for (const FieldDescriptorProto& field : message.field()) {
JsonNameDetails details = GetJsonNameDetails(&field, use_custom_names);
@@ -6304,9 +6317,7 @@
result->is_oneof_ = false;
result->proto3_optional_ = proto.proto3_optional();
- if (proto.proto3_optional() &&
- FileDescriptorLegacy(file_).syntax() !=
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO3) {
+ if (proto.proto3_optional() && file_->edition() != Edition::EDITION_PROTO3) {
AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
[&] {
return absl::StrCat(
@@ -6699,15 +6710,14 @@
return absl::StrFormat(
"Enum name %s has the same name as %s if you ignore case and strip "
"out the enum name prefix (if any). (If you are using allow_alias, "
- "please assign the same numeric value to both enums.)",
+ "please assign the same number to each enum value name.)",
value->name(), insert_result.first->second->name());
};
// There are proto2 enums out there with conflicting names, so to preserve
// compatibility we issue only a warning for proto2.
if ((pool_->deprecated_legacy_json_field_conflicts_ ||
IsLegacyJsonFieldConflictEnabled(result->options())) &&
- FileDescriptorLegacy(result->file()).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO2) {
+ result->file()->edition() == Edition::EDITION_PROTO2) {
AddWarning(value->full_name(), proto.value(i),
DescriptorPool::ErrorCollector::NAME, make_error);
continue;
@@ -7054,7 +7064,7 @@
const FieldDescriptor* field = message->field(i);
if (field->proto3_optional_) {
if (!field->containing_oneof() ||
- !OneofDescriptorLegacy(field->containing_oneof()).is_synthetic()) {
+ !field->containing_oneof()->is_synthetic()) {
AddError(message->full_name(), proto.field(i),
DescriptorPool::ErrorCollector::OTHER,
"Fields with proto3_optional set must be "
@@ -7066,8 +7076,7 @@
// Synthetic oneofs must be last.
int first_synthetic = -1;
for (int i = 0; i < message->oneof_decl_count(); i++) {
- const OneofDescriptor* oneof = message->oneof_decl(i);
- if (OneofDescriptorLegacy(oneof).is_synthetic()) {
+ if (message->oneof_decl(i)->is_synthetic()) {
if (first_synthetic == -1) {
first_synthetic = i;
}
@@ -7631,8 +7640,7 @@
}
}
}
- if (FileDescriptorLegacy(file).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO3) {
+ if (file->edition() == Edition::EDITION_PROTO3) {
ValidateProto3(file, proto);
}
}
@@ -7688,17 +7696,13 @@
"Explicit default values are not allowed in proto3.");
}
if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM &&
- field->enum_type() &&
- FileDescriptorLegacy(field->enum_type()->file()).syntax() !=
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO3 &&
- FileDescriptorLegacy(field->enum_type()->file()).syntax() !=
- FileDescriptorLegacy::Syntax::SYNTAX_UNKNOWN) {
- // Proto3 messages can only use Proto3 enum types; otherwise we can't
+ field->enum_type() && field->enum_type()->is_closed()) {
+ // Proto3 messages can only use open enum types; otherwise we can't
// guarantee that the default value is zero.
AddError(
field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE, [&] {
return absl::StrCat("Enum type \"", field->enum_type()->full_name(),
- "\" is not a proto3 enum, but is used in \"",
+ "\" is not an open enum, but is used in \"",
field->containing_type()->full_name(),
"\" which is a proto3 message type.");
});
@@ -7878,8 +7882,7 @@
void DescriptorBuilder::ValidateFileFeatures(const FileDescriptor* file,
const FileDescriptorProto& proto) {
// Rely on our legacy validation for proto2/proto3 files.
- if (FileDescriptorLegacy(file).syntax() !=
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
+ if (IsLegacyEdition(file)) {
return;
}
@@ -7898,8 +7901,7 @@
void DescriptorBuilder::ValidateFieldFeatures(
const FieldDescriptor* field, const FieldDescriptorProto& proto) {
// Rely on our legacy validation for proto2/proto3 files.
- if (FileDescriptorLegacy(field->file()).syntax() !=
- FileDescriptorLegacy::SYNTAX_EDITIONS) {
+ if (field->file()->edition() < Edition::EDITION_2023) {
return;
}
@@ -9555,13 +9557,18 @@
// Which level of UTF-8 enforcemant is placed on this file.
Utf8CheckMode GetUtf8CheckMode(const FieldDescriptor* field, bool is_lite) {
- if (IsStrictUtf8(field)) {
- return Utf8CheckMode::kStrict;
- } else if (IsVerifyUtf8(field, is_lite)) {
- return Utf8CheckMode::kVerify;
- } else {
- return Utf8CheckMode::kNone;
+ if (field->type() == FieldDescriptor::TYPE_STRING ||
+ (field->is_map() && (field->message_type()->map_key()->type() ==
+ FieldDescriptor::TYPE_STRING ||
+ field->message_type()->map_value()->type() ==
+ FieldDescriptor::TYPE_STRING))) {
+ if (IsStrictUtf8(field)) {
+ return Utf8CheckMode::kStrict;
+ } else if (IsVerifyUtf8(field, is_lite)) {
+ return Utf8CheckMode::kVerify;
+ }
}
+ return Utf8CheckMode::kNone;
}
bool IsLazilyInitializedFile(absl::string_view filename) {
diff --git a/src/google/protobuf/descriptor.h b/src/google/protobuf/descriptor.h
index 115a1f8..9b24cb1 100644
--- a/src/google/protobuf/descriptor.h
+++ b/src/google/protobuf/descriptor.h
@@ -36,6 +36,7 @@
#include <iterator>
#include <memory>
#include <string>
+#include <utility>
#include <vector>
#include "google/protobuf/stubs/common.h"
@@ -43,6 +44,8 @@
#include "absl/base/call_once.h"
#include "absl/container/btree_map.h"
#include "absl/container/flat_hash_map.h"
+#include "absl/functional/any_invocable.h"
+#include "absl/functional/function_ref.h"
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/strings/str_format.h"
@@ -494,10 +497,7 @@
// Never nullptr.
const Descriptor* containing_type() const { return containing_type_; }
-#ifdef PROTOBUF_FUTURE_EXTENSION_RANGE_CLASS
-
private:
-#endif
int start_;
int end_;
const ExtensionRangeOptions* options_;
@@ -1033,17 +1033,10 @@
friend class Reflection;
friend class FieldDescriptorLegacy;
-
- public:
- ABSL_DEPRECATED(
- "Syntax is deprecated in favor of editions, please use "
- "FieldDescriptor::has_presence instead.")
// Returns true if this field was syntactically written with "optional" in the
// .proto file. Excludes singular proto3 fields that do not have a label.
bool has_optional_keyword() const;
- private:
-
// Get the merged features that apply to this field. These are specified in
// the .proto file through the feature options in the message definition.
// Allowed features are defined by Features in descriptor.proto, along with
@@ -1216,17 +1209,10 @@
friend class compiler::cpp::Formatter;
friend class OneofDescriptorLegacy;
-
- public:
- ABSL_DEPRECATED(
- "Syntax is deprecated in favor of editions, please use "
- "real_oneof_decl_count for now instead of is_synthetic.")
// Returns whether this oneof was inserted by the compiler to wrap a proto3
// optional field. If this returns true, code generators should *not* emit it.
bool is_synthetic() const;
- private:
-
// Get the merged features that apply to this oneof. These are specified in
// the .proto file through the feature options in the oneof definition.
// Allowed features are defined by Features in descriptor.proto, along with
@@ -1261,6 +1247,7 @@
friend class DescriptorBuilder;
friend class Descriptor;
friend class FieldDescriptor;
+ friend class Reflection;
};
PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(OneofDescriptor, 56);
@@ -1866,46 +1853,9 @@
// descriptor.proto, and any available extensions of that message.
const FileOptions& options() const;
-
- private:
- // With the upcoming release of editions, syntax should not be used for
- // business logic. Instead, the various feature helpers defined in this file
- // should be used to query more targeted behaviors. For example:
- // has_presence, is_closed, requires_utf8_validation.
- enum
- ABSL_DEPRECATED(
- "Syntax is deprecated in favor of editions. Please use targeted "
- "feature helpers instead (e.g. has_presence, is_packed, "
- "requires_utf8_validation, etc).")
- Syntax
-#ifndef SWIG
- : int
-#endif // !SWIG
- {
- SYNTAX_UNKNOWN = 0,
- SYNTAX_PROTO2 = 2,
- SYNTAX_PROTO3 = 3,
- SYNTAX_EDITIONS = 99,
- };
- PROTOBUF_IGNORE_DEPRECATION_START
- ABSL_DEPRECATED(
- "Syntax is deprecated in favor of editions. Please use targeted "
- "feature helpers instead (e.g. has_presence, is_packed, "
- "requires_utf8_validation, etc).")
- Syntax syntax() const;
- PROTOBUF_IGNORE_DEPRECATION_STOP
-
- // Define a visibility-restricted wrapper for internal use until the migration
- // is complete.
- friend class FileDescriptorLegacy;
-
- PROTOBUF_IGNORE_DEPRECATION_START
- ABSL_DEPRECATED("Syntax is deprecated in favor of editions")
- static const char* SyntaxName(Syntax syntax);
- PROTOBUF_IGNORE_DEPRECATION_STOP
-
public:
- // Returns EDITION_UNKNOWN if syntax() is not SYNTAX_EDITIONS.
+ // Returns edition of this file. For legacy proto2/proto3 files, special
+ // EDITION_PROTO2 and EDITION_PROTO3 values are used.
Edition edition() const;
// Find a top-level message type by name (not full_name). Returns nullptr if
@@ -1941,7 +1891,7 @@
// Fill the json_name field of FieldDescriptorProto for all fields. Can only
// be called after CopyTo().
void CopyJsonNameTo(FileDescriptorProto* proto) const;
- // Fills in the file-level settings of this file (e.g. syntax, package,
+ // Fills in the file-level settings of this file (e.g. edition, package,
// file options) to `proto`.
void CopyHeadingTo(FileDescriptorProto* proto) const;
@@ -1983,8 +1933,6 @@
// that type accessor functions that can possibly build a dependent file
// aren't called during the process of building the file.
bool finished_building_;
- // Actually a `Syntax` but stored as uint8_t to save space.
- uint8_t syntax_;
// This one is here to fill the padding.
int extension_count_;
@@ -2208,12 +2156,8 @@
virtual void RecordError(absl::string_view filename,
absl::string_view element_name,
const Message* descriptor, ErrorLocation location,
- absl::string_view message) {
- PROTOBUF_IGNORE_DEPRECATION_START
- AddError(std::string(filename), std::string(element_name), descriptor,
- location, std::string(message));
- PROTOBUF_IGNORE_DEPRECATION_STOP
- }
+ absl::string_view message)
+ = 0;
// Reports a warning in the FileDescriptorProto. Use this function if the
// problem occurred should NOT interrupt building the FileDescriptorProto.
@@ -2228,27 +2172,8 @@
const Message* descriptor,
ErrorLocation location,
absl::string_view message) {
- PROTOBUF_IGNORE_DEPRECATION_START
- AddWarning(std::string(filename), std::string(element_name), descriptor,
- location, std::string(message));
- PROTOBUF_IGNORE_DEPRECATION_STOP
}
- private:
- // These should never be called directly, but if a legacy class overrides
- // them they'll get routed to by the Record* methods.
- ABSL_DEPRECATED("Use RecordError")
- virtual void AddError(const std::string& filename,
- const std::string& element_name,
- const Message* descriptor, ErrorLocation location,
- const std::string& message) {
- ABSL_LOG(FATAL) << "AddError or RecordError must be implemented.";
- }
- ABSL_DEPRECATED("Use RecordWarning")
- virtual void AddWarning(const std::string& filename,
- const std::string& element_name,
- const Message* descriptor, ErrorLocation location,
- const std::string& message) {}
};
// Convert the FileDescriptorProto to real descriptors and place them in
@@ -2290,7 +2215,7 @@
// called, these defaults will be used instead.
// FeatureSetDefaults includes a minimum/maximum supported edition, which will
// be enforced while building proto files.
- void SetFeatureSetDefaults(FeatureSetDefaults spec);
+ absl::Status SetFeatureSetDefaults(FeatureSetDefaults spec);
// Toggles enforcement of extension declarations.
// This enforcement is disabled by default because it requires full
@@ -2299,6 +2224,20 @@
void EnforceExtensionDeclarations(bool enforce) {
enforce_extension_declarations_ = enforce;
}
+
+#ifndef SWIG
+ // Dispatch recursive builds to a callback that may stick them onto a separate
+ // thread. This is primarily to avoid stack overflows on untrusted inputs.
+ // The dispatcher must always synchronously execute the provided callback.
+ // Asynchronous execution is undefined behavior.
+ void SetRecursiveBuildDispatcher(
+ absl::AnyInvocable<void(absl::FunctionRef<void()>) const> dispatcher) {
+ dispatcher_ = std::make_unique<
+ absl::AnyInvocable<void(absl::FunctionRef<void()>) const>>(
+ std::move(dispatcher));
+ }
+#endif // SWIG
+
// Internal stuff --------------------------------------------------
// These methods MUST NOT be called from outside the proto2 library.
// These methods may contain hidden pitfalls and may be removed in a
@@ -2460,6 +2399,12 @@
ErrorCollector* default_error_collector_;
const DescriptorPool* underlay_;
+#ifndef SWIG
+ // Dispatcher for recursive calls during builds.
+ std::unique_ptr<absl::AnyInvocable<void(absl::FunctionRef<void()>) const>>
+ dispatcher_;
+#endif // SWIG
+
// This class contains a lot of hash maps with complicated types that
// we'd like to keep out of the header.
class Tables;
@@ -2726,19 +2671,9 @@
return type() == TYPE_MESSAGE && is_map_message_type();
}
-inline bool FieldDescriptor::has_optional_keyword() const {
- PROTOBUF_IGNORE_DEPRECATION_START
- return proto3_optional_ ||
- (file()->syntax() == FileDescriptor::SYNTAX_PROTO2 && is_optional() &&
- !containing_oneof());
- PROTOBUF_IGNORE_DEPRECATION_STOP
-}
-
inline const OneofDescriptor* FieldDescriptor::real_containing_oneof() const {
- PROTOBUF_IGNORE_DEPRECATION_START
auto* oneof = containing_oneof();
return oneof && !oneof->is_synthetic() ? oneof : nullptr;
- PROTOBUF_IGNORE_DEPRECATION_STOP
}
// To save space, index() is computed by looking at the descriptor's position
@@ -2845,12 +2780,6 @@
return dependency(weak_dependencies_[index]);
}
-PROTOBUF_IGNORE_DEPRECATION_START
-inline FileDescriptor::Syntax FileDescriptor::syntax() const {
- return static_cast<Syntax>(syntax_);
-}
-PROTOBUF_IGNORE_DEPRECATION_STOP
-
namespace internal {
// FieldRange(desc) provides an iterable range for the fields of a
diff --git a/src/google/protobuf/descriptor.pb.cc b/src/google/protobuf/descriptor.pb.cc
index 9fcfdea..4d80cf1 100644
--- a/src/google/protobuf/descriptor.pb.cc
+++ b/src/google/protobuf/descriptor.pb.cc
@@ -512,7 +512,6 @@
cc_generic_services_{false},
java_generic_services_{false},
py_generic_services_{false},
- php_generic_services_{false},
deprecated_{false},
optimize_for_{static_cast< ::google::protobuf::FileOptions_OptimizeMode >(1)},
cc_enable_arenas_{true} {}
@@ -1276,7 +1275,6 @@
PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.cc_generic_services_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.java_generic_services_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.py_generic_services_),
- PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.php_generic_services_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.deprecated_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.cc_enable_arenas_),
PROTOBUF_FIELD_OFFSET(::google::protobuf::FileOptions, _impl_.objc_class_prefix_),
@@ -1293,14 +1291,13 @@
11,
12,
13,
- 19,
+ 18,
2,
14,
15,
16,
17,
- 18,
- 20,
+ 19,
3,
4,
5,
@@ -1606,24 +1603,24 @@
{203, 214, -1, sizeof(::google::protobuf::EnumValueDescriptorProto)},
{217, 228, -1, sizeof(::google::protobuf::ServiceDescriptorProto)},
{231, 245, -1, sizeof(::google::protobuf::MethodDescriptorProto)},
- {251, 281, -1, sizeof(::google::protobuf::FileOptions)},
- {303, 318, -1, sizeof(::google::protobuf::MessageOptions)},
- {325, 335, -1, sizeof(::google::protobuf::FieldOptions_EditionDefault)},
- {337, 358, -1, sizeof(::google::protobuf::FieldOptions)},
- {371, 381, -1, sizeof(::google::protobuf::OneofOptions)},
- {383, 396, -1, sizeof(::google::protobuf::EnumOptions)},
- {401, 413, -1, sizeof(::google::protobuf::EnumValueOptions)},
- {417, 428, -1, sizeof(::google::protobuf::ServiceOptions)},
- {431, 443, -1, sizeof(::google::protobuf::MethodOptions)},
- {447, 457, -1, sizeof(::google::protobuf::UninterpretedOption_NamePart)},
- {459, 474, -1, sizeof(::google::protobuf::UninterpretedOption)},
- {481, 495, -1, sizeof(::google::protobuf::FeatureSet)},
- {501, 511, -1, sizeof(::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault)},
- {513, 524, -1, sizeof(::google::protobuf::FeatureSetDefaults)},
- {527, 540, -1, sizeof(::google::protobuf::SourceCodeInfo_Location)},
- {545, -1, -1, sizeof(::google::protobuf::SourceCodeInfo)},
- {554, 567, -1, sizeof(::google::protobuf::GeneratedCodeInfo_Annotation)},
- {572, -1, -1, sizeof(::google::protobuf::GeneratedCodeInfo)},
+ {251, 280, -1, sizeof(::google::protobuf::FileOptions)},
+ {301, 316, -1, sizeof(::google::protobuf::MessageOptions)},
+ {323, 333, -1, sizeof(::google::protobuf::FieldOptions_EditionDefault)},
+ {335, 356, -1, sizeof(::google::protobuf::FieldOptions)},
+ {369, 379, -1, sizeof(::google::protobuf::OneofOptions)},
+ {381, 394, -1, sizeof(::google::protobuf::EnumOptions)},
+ {399, 411, -1, sizeof(::google::protobuf::EnumValueOptions)},
+ {415, 426, -1, sizeof(::google::protobuf::ServiceOptions)},
+ {429, 441, -1, sizeof(::google::protobuf::MethodOptions)},
+ {445, 455, -1, sizeof(::google::protobuf::UninterpretedOption_NamePart)},
+ {457, 472, -1, sizeof(::google::protobuf::UninterpretedOption)},
+ {479, 493, -1, sizeof(::google::protobuf::FeatureSet)},
+ {499, 509, -1, sizeof(::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault)},
+ {511, 522, -1, sizeof(::google::protobuf::FeatureSetDefaults)},
+ {525, 538, -1, sizeof(::google::protobuf::SourceCodeInfo_Location)},
+ {543, -1, -1, sizeof(::google::protobuf::SourceCodeInfo)},
+ {552, 565, -1, sizeof(::google::protobuf::GeneratedCodeInfo_Annotation)},
+ {570, -1, -1, sizeof(::google::protobuf::GeneratedCodeInfo)},
};
static const ::_pb::Message* const file_default_instances[] = {
@@ -1695,218 +1692,218 @@
"\r\n\005start\030\001 \001(\005\022\013\n\003end\030\002 \001(\005\0227\n\007options\030\003"
" \001(\0132&.google.protobuf.ExtensionRangeOpt"
"ions\032+\n\rReservedRange\022\r\n\005start\030\001 \001(\005\022\013\n\003"
- "end\030\002 \001(\005\"\340\003\n\025ExtensionRangeOptions\022C\n\024u"
+ "end\030\002 \001(\005\"\345\003\n\025ExtensionRangeOptions\022C\n\024u"
"ninterpreted_option\030\347\007 \003(\0132$.google.prot"
"obuf.UninterpretedOption\022L\n\013declaration\030"
"\002 \003(\01322.google.protobuf.ExtensionRangeOp"
"tions.DeclarationB\003\210\001\002\022-\n\010features\0302 \001(\013"
- "2\033.google.protobuf.FeatureSet\022Z\n\014verific"
+ "2\033.google.protobuf.FeatureSet\022_\n\014verific"
"ation\030\003 \001(\01628.google.protobuf.ExtensionR"
"angeOptions.VerificationState:\nUNVERIFIE"
- "D\032h\n\013Declaration\022\016\n\006number\030\001 \001(\005\022\021\n\tfull"
- "_name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\022\020\n\010reserved\030\005 "
- "\001(\010\022\020\n\010repeated\030\006 \001(\010J\004\010\004\020\005\"4\n\021Verificat"
- "ionState\022\017\n\013DECLARATION\020\000\022\016\n\nUNVERIFIED\020"
- "\001*\t\010\350\007\020\200\200\200\200\002\"\325\005\n\024FieldDescriptorProto\022\014\n"
- "\004name\030\001 \001(\t\022\016\n\006number\030\003 \001(\005\022:\n\005label\030\004 \001"
- "(\0162+.google.protobuf.FieldDescriptorProt"
- "o.Label\0228\n\004type\030\005 \001(\0162*.google.protobuf."
- "FieldDescriptorProto.Type\022\021\n\ttype_name\030\006"
- " \001(\t\022\020\n\010extendee\030\002 \001(\t\022\025\n\rdefault_value\030"
- "\007 \001(\t\022\023\n\013oneof_index\030\t \001(\005\022\021\n\tjson_name\030"
- "\n \001(\t\022.\n\007options\030\010 \001(\0132\035.google.protobuf"
- ".FieldOptions\022\027\n\017proto3_optional\030\021 \001(\010\"\266"
- "\002\n\004Type\022\017\n\013TYPE_DOUBLE\020\001\022\016\n\nTYPE_FLOAT\020\002"
- "\022\016\n\nTYPE_INT64\020\003\022\017\n\013TYPE_UINT64\020\004\022\016\n\nTYP"
- "E_INT32\020\005\022\020\n\014TYPE_FIXED64\020\006\022\020\n\014TYPE_FIXE"
- "D32\020\007\022\r\n\tTYPE_BOOL\020\010\022\017\n\013TYPE_STRING\020\t\022\016\n"
- "\nTYPE_GROUP\020\n\022\020\n\014TYPE_MESSAGE\020\013\022\016\n\nTYPE_"
- "BYTES\020\014\022\017\n\013TYPE_UINT32\020\r\022\r\n\tTYPE_ENUM\020\016\022"
- "\021\n\rTYPE_SFIXED32\020\017\022\021\n\rTYPE_SFIXED64\020\020\022\017\n"
- "\013TYPE_SINT32\020\021\022\017\n\013TYPE_SINT64\020\022\"C\n\005Label"
- "\022\022\n\016LABEL_OPTIONAL\020\001\022\022\n\016LABEL_REPEATED\020\003"
- "\022\022\n\016LABEL_REQUIRED\020\002\"T\n\024OneofDescriptorP"
- "roto\022\014\n\004name\030\001 \001(\t\022.\n\007options\030\002 \001(\0132\035.go"
- "ogle.protobuf.OneofOptions\"\244\002\n\023EnumDescr"
- "iptorProto\022\014\n\004name\030\001 \001(\t\0228\n\005value\030\002 \003(\0132"
- ").google.protobuf.EnumValueDescriptorPro"
- "to\022-\n\007options\030\003 \001(\0132\034.google.protobuf.En"
- "umOptions\022N\n\016reserved_range\030\004 \003(\01326.goog"
- "le.protobuf.EnumDescriptorProto.EnumRese"
- "rvedRange\022\025\n\rreserved_name\030\005 \003(\t\032/\n\021Enum"
- "ReservedRange\022\r\n\005start\030\001 \001(\005\022\013\n\003end\030\002 \001("
- "\005\"l\n\030EnumValueDescriptorProto\022\014\n\004name\030\001 "
- "\001(\t\022\016\n\006number\030\002 \001(\005\0222\n\007options\030\003 \001(\0132!.g"
- "oogle.protobuf.EnumValueOptions\"\220\001\n\026Serv"
- "iceDescriptorProto\022\014\n\004name\030\001 \001(\t\0226\n\006meth"
- "od\030\002 \003(\0132&.google.protobuf.MethodDescrip"
- "torProto\0220\n\007options\030\003 \001(\0132\037.google.proto"
- "buf.ServiceOptions\"\301\001\n\025MethodDescriptorP"
- "roto\022\014\n\004name\030\001 \001(\t\022\022\n\ninput_type\030\002 \001(\t\022\023"
- "\n\013output_type\030\003 \001(\t\022/\n\007options\030\004 \001(\0132\036.g"
- "oogle.protobuf.MethodOptions\022\037\n\020client_s"
- "treaming\030\005 \001(\010:\005false\022\037\n\020server_streamin"
- "g\030\006 \001(\010:\005false\"\324\006\n\013FileOptions\022\024\n\014java_p"
- "ackage\030\001 \001(\t\022\034\n\024java_outer_classname\030\010 \001"
- "(\t\022\"\n\023java_multiple_files\030\n \001(\010:\005false\022)"
- "\n\035java_generate_equals_and_hash\030\024 \001(\010B\002\030"
- "\001\022%\n\026java_string_check_utf8\030\033 \001(\010:\005false"
- "\022F\n\014optimize_for\030\t \001(\0162).google.protobuf"
- ".FileOptions.OptimizeMode:\005SPEED\022\022\n\ngo_p"
- "ackage\030\013 \001(\t\022\"\n\023cc_generic_services\030\020 \001("
- "\010:\005false\022$\n\025java_generic_services\030\021 \001(\010:"
- "\005false\022\"\n\023py_generic_services\030\022 \001(\010:\005fal"
- "se\022#\n\024php_generic_services\030* \001(\010:\005false\022"
- "\031\n\ndeprecated\030\027 \001(\010:\005false\022\036\n\020cc_enable_"
- "arenas\030\037 \001(\010:\004true\022\031\n\021objc_class_prefix\030"
- "$ \001(\t\022\030\n\020csharp_namespace\030% \001(\t\022\024\n\014swift"
- "_prefix\030\' \001(\t\022\030\n\020php_class_prefix\030( \001(\t\022"
- "\025\n\rphp_namespace\030) \001(\t\022\036\n\026php_metadata_n"
- "amespace\030, \001(\t\022\024\n\014ruby_package\030- \001(\t\022-\n\010"
- "features\0302 \001(\0132\033.google.protobuf.Feature"
- "Set\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.goo"
- "gle.protobuf.UninterpretedOption\":\n\014Opti"
- "mizeMode\022\t\n\005SPEED\020\001\022\r\n\tCODE_SIZE\020\002\022\020\n\014LI"
- "TE_RUNTIME\020\003*\t\010\350\007\020\200\200\200\200\002J\004\010&\020\'\"\347\002\n\016Messag"
- "eOptions\022&\n\027message_set_wire_format\030\001 \001("
- "\010:\005false\022.\n\037no_standard_descriptor_acces"
- "sor\030\002 \001(\010:\005false\022\031\n\ndeprecated\030\003 \001(\010:\005fa"
- "lse\022\021\n\tmap_entry\030\007 \001(\010\0222\n&deprecated_leg"
- "acy_json_field_conflicts\030\013 \001(\010B\002\030\001\022-\n\010fe"
- "atures\030\014 \001(\0132\033.google.protobuf.FeatureSe"
- "t\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.googl"
- "e.protobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200"
- "\002J\004\010\004\020\005J\004\010\005\020\006J\004\010\006\020\007J\004\010\010\020\tJ\004\010\t\020\n\"\215\t\n\014Fiel"
- "dOptions\022:\n\005ctype\030\001 \001(\0162#.google.protobu"
- "f.FieldOptions.CType:\006STRING\022\016\n\006packed\030\002"
- " \001(\010\022\?\n\006jstype\030\006 \001(\0162$.google.protobuf.F"
- "ieldOptions.JSType:\tJS_NORMAL\022\023\n\004lazy\030\005 "
- "\001(\010:\005false\022\036\n\017unverified_lazy\030\017 \001(\010:\005fal"
- "se\022\031\n\ndeprecated\030\003 \001(\010:\005false\022\023\n\004weak\030\n "
- "\001(\010:\005false\022\033\n\014debug_redact\030\020 \001(\010:\005false\022"
- "@\n\tretention\030\021 \001(\0162-.google.protobuf.Fie"
- "ldOptions.OptionRetention\022\?\n\007targets\030\023 \003"
- "(\0162..google.protobuf.FieldOptions.Option"
- "TargetType\022F\n\020edition_defaults\030\024 \003(\0132,.g"
- "oogle.protobuf.FieldOptions.EditionDefau"
- "lt\022-\n\010features\030\025 \001(\0132\033.google.protobuf.F"
- "eatureSet\022C\n\024uninterpreted_option\030\347\007 \003(\013"
- "2$.google.protobuf.UninterpretedOption\032J"
- "\n\016EditionDefault\022)\n\007edition\030\003 \001(\0162\030.goog"
- "le.protobuf.Edition\022\r\n\005value\030\002 \001(\t\"/\n\005CT"
- "ype\022\n\n\006STRING\020\000\022\010\n\004CORD\020\001\022\020\n\014STRING_PIEC"
- "E\020\002\"5\n\006JSType\022\r\n\tJS_NORMAL\020\000\022\r\n\tJS_STRIN"
- "G\020\001\022\r\n\tJS_NUMBER\020\002\"U\n\017OptionRetention\022\025\n"
- "\021RETENTION_UNKNOWN\020\000\022\025\n\021RETENTION_RUNTIM"
- "E\020\001\022\024\n\020RETENTION_SOURCE\020\002\"\214\002\n\020OptionTarg"
- "etType\022\027\n\023TARGET_TYPE_UNKNOWN\020\000\022\024\n\020TARGE"
- "T_TYPE_FILE\020\001\022\037\n\033TARGET_TYPE_EXTENSION_R"
- "ANGE\020\002\022\027\n\023TARGET_TYPE_MESSAGE\020\003\022\025\n\021TARGE"
- "T_TYPE_FIELD\020\004\022\025\n\021TARGET_TYPE_ONEOF\020\005\022\024\n"
- "\020TARGET_TYPE_ENUM\020\006\022\032\n\026TARGET_TYPE_ENUM_"
- "ENTRY\020\007\022\027\n\023TARGET_TYPE_SERVICE\020\010\022\026\n\022TARG"
- "ET_TYPE_METHOD\020\t*\t\010\350\007\020\200\200\200\200\002J\004\010\004\020\005J\004\010\022\020\023\""
- "\215\001\n\014OneofOptions\022-\n\010features\030\001 \001(\0132\033.goo"
+ "DB\003\210\001\002\032h\n\013Declaration\022\016\n\006number\030\001 \001(\005\022\021\n"
+ "\tfull_name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\022\020\n\010reserv"
+ "ed\030\005 \001(\010\022\020\n\010repeated\030\006 \001(\010J\004\010\004\020\005\"4\n\021Veri"
+ "ficationState\022\017\n\013DECLARATION\020\000\022\016\n\nUNVERI"
+ "FIED\020\001*\t\010\350\007\020\200\200\200\200\002\"\325\005\n\024FieldDescriptorPro"
+ "to\022\014\n\004name\030\001 \001(\t\022\016\n\006number\030\003 \001(\005\022:\n\005labe"
+ "l\030\004 \001(\0162+.google.protobuf.FieldDescripto"
+ "rProto.Label\0228\n\004type\030\005 \001(\0162*.google.prot"
+ "obuf.FieldDescriptorProto.Type\022\021\n\ttype_n"
+ "ame\030\006 \001(\t\022\020\n\010extendee\030\002 \001(\t\022\025\n\rdefault_v"
+ "alue\030\007 \001(\t\022\023\n\013oneof_index\030\t \001(\005\022\021\n\tjson_"
+ "name\030\n \001(\t\022.\n\007options\030\010 \001(\0132\035.google.pro"
+ "tobuf.FieldOptions\022\027\n\017proto3_optional\030\021 "
+ "\001(\010\"\266\002\n\004Type\022\017\n\013TYPE_DOUBLE\020\001\022\016\n\nTYPE_FL"
+ "OAT\020\002\022\016\n\nTYPE_INT64\020\003\022\017\n\013TYPE_UINT64\020\004\022\016"
+ "\n\nTYPE_INT32\020\005\022\020\n\014TYPE_FIXED64\020\006\022\020\n\014TYPE"
+ "_FIXED32\020\007\022\r\n\tTYPE_BOOL\020\010\022\017\n\013TYPE_STRING"
+ "\020\t\022\016\n\nTYPE_GROUP\020\n\022\020\n\014TYPE_MESSAGE\020\013\022\016\n\n"
+ "TYPE_BYTES\020\014\022\017\n\013TYPE_UINT32\020\r\022\r\n\tTYPE_EN"
+ "UM\020\016\022\021\n\rTYPE_SFIXED32\020\017\022\021\n\rTYPE_SFIXED64"
+ "\020\020\022\017\n\013TYPE_SINT32\020\021\022\017\n\013TYPE_SINT64\020\022\"C\n\005"
+ "Label\022\022\n\016LABEL_OPTIONAL\020\001\022\022\n\016LABEL_REPEA"
+ "TED\020\003\022\022\n\016LABEL_REQUIRED\020\002\"T\n\024OneofDescri"
+ "ptorProto\022\014\n\004name\030\001 \001(\t\022.\n\007options\030\002 \001(\013"
+ "2\035.google.protobuf.OneofOptions\"\244\002\n\023Enum"
+ "DescriptorProto\022\014\n\004name\030\001 \001(\t\0228\n\005value\030\002"
+ " \003(\0132).google.protobuf.EnumValueDescript"
+ "orProto\022-\n\007options\030\003 \001(\0132\034.google.protob"
+ "uf.EnumOptions\022N\n\016reserved_range\030\004 \003(\01326"
+ ".google.protobuf.EnumDescriptorProto.Enu"
+ "mReservedRange\022\025\n\rreserved_name\030\005 \003(\t\032/\n"
+ "\021EnumReservedRange\022\r\n\005start\030\001 \001(\005\022\013\n\003end"
+ "\030\002 \001(\005\"l\n\030EnumValueDescriptorProto\022\014\n\004na"
+ "me\030\001 \001(\t\022\016\n\006number\030\002 \001(\005\0222\n\007options\030\003 \001("
+ "\0132!.google.protobuf.EnumValueOptions\"\220\001\n"
+ "\026ServiceDescriptorProto\022\014\n\004name\030\001 \001(\t\0226\n"
+ "\006method\030\002 \003(\0132&.google.protobuf.MethodDe"
+ "scriptorProto\0220\n\007options\030\003 \001(\0132\037.google."
+ "protobuf.ServiceOptions\"\301\001\n\025MethodDescri"
+ "ptorProto\022\014\n\004name\030\001 \001(\t\022\022\n\ninput_type\030\002 "
+ "\001(\t\022\023\n\013output_type\030\003 \001(\t\022/\n\007options\030\004 \001("
+ "\0132\036.google.protobuf.MethodOptions\022\037\n\020cli"
+ "ent_streaming\030\005 \001(\010:\005false\022\037\n\020server_str"
+ "eaming\030\006 \001(\010:\005false\"\265\006\n\013FileOptions\022\024\n\014j"
+ "ava_package\030\001 \001(\t\022\034\n\024java_outer_classnam"
+ "e\030\010 \001(\t\022\"\n\023java_multiple_files\030\n \001(\010:\005fa"
+ "lse\022)\n\035java_generate_equals_and_hash\030\024 \001"
+ "(\010B\002\030\001\022%\n\026java_string_check_utf8\030\033 \001(\010:\005"
+ "false\022F\n\014optimize_for\030\t \001(\0162).google.pro"
+ "tobuf.FileOptions.OptimizeMode:\005SPEED\022\022\n"
+ "\ngo_package\030\013 \001(\t\022\"\n\023cc_generic_services"
+ "\030\020 \001(\010:\005false\022$\n\025java_generic_services\030\021"
+ " \001(\010:\005false\022\"\n\023py_generic_services\030\022 \001(\010"
+ ":\005false\022\031\n\ndeprecated\030\027 \001(\010:\005false\022\036\n\020cc"
+ "_enable_arenas\030\037 \001(\010:\004true\022\031\n\021objc_class"
+ "_prefix\030$ \001(\t\022\030\n\020csharp_namespace\030% \001(\t\022"
+ "\024\n\014swift_prefix\030\' \001(\t\022\030\n\020php_class_prefi"
+ "x\030( \001(\t\022\025\n\rphp_namespace\030) \001(\t\022\036\n\026php_me"
+ "tadata_namespace\030, \001(\t\022\024\n\014ruby_package\030-"
+ " \001(\t\022-\n\010features\0302 \001(\0132\033.google.protobuf"
+ ".FeatureSet\022C\n\024uninterpreted_option\030\347\007 \003"
+ "(\0132$.google.protobuf.UninterpretedOption"
+ "\":\n\014OptimizeMode\022\t\n\005SPEED\020\001\022\r\n\tCODE_SIZE"
+ "\020\002\022\020\n\014LITE_RUNTIME\020\003*\t\010\350\007\020\200\200\200\200\002J\004\010*\020+J\004\010"
+ "&\020\'\"\347\002\n\016MessageOptions\022&\n\027message_set_wi"
+ "re_format\030\001 \001(\010:\005false\022.\n\037no_standard_de"
+ "scriptor_accessor\030\002 \001(\010:\005false\022\031\n\ndeprec"
+ "ated\030\003 \001(\010:\005false\022\021\n\tmap_entry\030\007 \001(\010\0222\n&"
+ "deprecated_legacy_json_field_conflicts\030\013"
+ " \001(\010B\002\030\001\022-\n\010features\030\014 \001(\0132\033.google.prot"
+ "obuf.FeatureSet\022C\n\024uninterpreted_option\030"
+ "\347\007 \003(\0132$.google.protobuf.UninterpretedOp"
+ "tion*\t\010\350\007\020\200\200\200\200\002J\004\010\004\020\005J\004\010\005\020\006J\004\010\006\020\007J\004\010\010\020\tJ"
+ "\004\010\t\020\n\"\215\t\n\014FieldOptions\022:\n\005ctype\030\001 \001(\0162#."
+ "google.protobuf.FieldOptions.CType:\006STRI"
+ "NG\022\016\n\006packed\030\002 \001(\010\022\?\n\006jstype\030\006 \001(\0162$.goo"
+ "gle.protobuf.FieldOptions.JSType:\tJS_NOR"
+ "MAL\022\023\n\004lazy\030\005 \001(\010:\005false\022\036\n\017unverified_l"
+ "azy\030\017 \001(\010:\005false\022\031\n\ndeprecated\030\003 \001(\010:\005fa"
+ "lse\022\023\n\004weak\030\n \001(\010:\005false\022\033\n\014debug_redact"
+ "\030\020 \001(\010:\005false\022@\n\tretention\030\021 \001(\0162-.googl"
+ "e.protobuf.FieldOptions.OptionRetention\022"
+ "\?\n\007targets\030\023 \003(\0162..google.protobuf.Field"
+ "Options.OptionTargetType\022F\n\020edition_defa"
+ "ults\030\024 \003(\0132,.google.protobuf.FieldOption"
+ "s.EditionDefault\022-\n\010features\030\025 \001(\0132\033.goo"
"gle.protobuf.FeatureSet\022C\n\024uninterpreted"
"_option\030\347\007 \003(\0132$.google.protobuf.Uninter"
- "pretedOption*\t\010\350\007\020\200\200\200\200\002\"\366\001\n\013EnumOptions\022"
- "\023\n\013allow_alias\030\002 \001(\010\022\031\n\ndeprecated\030\003 \001(\010"
- ":\005false\0222\n&deprecated_legacy_json_field_"
- "conflicts\030\006 \001(\010B\002\030\001\022-\n\010features\030\007 \001(\0132\033."
- "google.protobuf.FeatureSet\022C\n\024uninterpre"
- "ted_option\030\347\007 \003(\0132$.google.protobuf.Unin"
- "terpretedOption*\t\010\350\007\020\200\200\200\200\002J\004\010\005\020\006\"\311\001\n\020Enu"
- "mValueOptions\022\031\n\ndeprecated\030\001 \001(\010:\005false"
- "\022-\n\010features\030\002 \001(\0132\033.google.protobuf.Fea"
- "tureSet\022\033\n\014debug_redact\030\003 \001(\010:\005false\022C\n\024"
- "uninterpreted_option\030\347\007 \003(\0132$.google.pro"
- "tobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200\002\"\252\001\n"
- "\016ServiceOptions\022-\n\010features\030\" \001(\0132\033.goog"
- "le.protobuf.FeatureSet\022\031\n\ndeprecated\030! \001"
- "(\010:\005false\022C\n\024uninterpreted_option\030\347\007 \003(\013"
- "2$.google.protobuf.UninterpretedOption*\t"
- "\010\350\007\020\200\200\200\200\002\"\334\002\n\rMethodOptions\022\031\n\ndeprecate"
- "d\030! \001(\010:\005false\022_\n\021idempotency_level\030\" \001("
- "\0162/.google.protobuf.MethodOptions.Idempo"
- "tencyLevel:\023IDEMPOTENCY_UNKNOWN\022-\n\010featu"
- "res\030# \001(\0132\033.google.protobuf.FeatureSet\022C"
- "\n\024uninterpreted_option\030\347\007 \003(\0132$.google.p"
- "rotobuf.UninterpretedOption\"P\n\020Idempoten"
- "cyLevel\022\027\n\023IDEMPOTENCY_UNKNOWN\020\000\022\023\n\017NO_S"
- "IDE_EFFECTS\020\001\022\016\n\nIDEMPOTENT\020\002*\t\010\350\007\020\200\200\200\200\002"
- "\"\236\002\n\023UninterpretedOption\022;\n\004name\030\002 \003(\0132-"
- ".google.protobuf.UninterpretedOption.Nam"
- "ePart\022\030\n\020identifier_value\030\003 \001(\t\022\032\n\022posit"
- "ive_int_value\030\004 \001(\004\022\032\n\022negative_int_valu"
- "e\030\005 \001(\003\022\024\n\014double_value\030\006 \001(\001\022\024\n\014string_"
- "value\030\007 \001(\014\022\027\n\017aggregate_value\030\010 \001(\t\0323\n\010"
- "NamePart\022\021\n\tname_part\030\001 \002(\t\022\024\n\014is_extens"
- "ion\030\002 \002(\010\"\235\t\n\nFeatureSet\022|\n\016field_presen"
- "ce\030\001 \001(\0162).google.protobuf.FeatureSet.Fi"
- "eldPresenceB9\210\001\001\230\001\004\230\001\001\242\001\r\022\010EXPLICIT\030\346\007\242\001"
- "\r\022\010IMPLICIT\030\347\007\242\001\r\022\010EXPLICIT\030\350\007\022\\\n\tenum_t"
- "ype\030\002 \001(\0162$.google.protobuf.FeatureSet.E"
- "numTypeB#\210\001\001\230\001\006\230\001\001\242\001\013\022\006CLOSED\030\346\007\242\001\t\022\004OPE"
- "N\030\347\007\022{\n\027repeated_field_encoding\030\003 \001(\01621."
- "google.protobuf.FeatureSet.RepeatedField"
- "EncodingB\'\210\001\001\230\001\004\230\001\001\242\001\r\022\010EXPANDED\030\346\007\242\001\013\022\006"
- "PACKED\030\347\007\022h\n\017utf8_validation\030\004 \001(\0162*.goo"
- "gle.protobuf.FeatureSet.Utf8ValidationB#"
- "\210\001\001\230\001\004\230\001\001\242\001\t\022\004NONE\030\346\007\242\001\013\022\006VERIFY\030\347\007\022g\n\020m"
- "essage_encoding\030\005 \001(\0162+.google.protobuf."
- "FeatureSet.MessageEncodingB \210\001\001\230\001\004\230\001\001\242\001\024"
- "\022\017LENGTH_PREFIXED\030\346\007\022p\n\013json_format\030\006 \001("
- "\0162&.google.protobuf.FeatureSet.JsonForma"
- "tB3\210\001\001\230\001\003\230\001\006\230\001\001\242\001\027\022\022LEGACY_BEST_EFFORT\030\346"
- "\007\242\001\n\022\005ALLOW\030\347\007\"\\\n\rFieldPresence\022\032\n\026FIELD"
- "_PRESENCE_UNKNOWN\020\000\022\014\n\010EXPLICIT\020\001\022\014\n\010IMP"
- "LICIT\020\002\022\023\n\017LEGACY_REQUIRED\020\003\"7\n\010EnumType"
- "\022\025\n\021ENUM_TYPE_UNKNOWN\020\000\022\010\n\004OPEN\020\001\022\n\n\006CLO"
- "SED\020\002\"V\n\025RepeatedFieldEncoding\022#\n\037REPEAT"
- "ED_FIELD_ENCODING_UNKNOWN\020\000\022\n\n\006PACKED\020\001\022"
- "\014\n\010EXPANDED\020\002\"C\n\016Utf8Validation\022\033\n\027UTF8_"
- "VALIDATION_UNKNOWN\020\000\022\010\n\004NONE\020\001\022\n\n\006VERIFY"
- "\020\002\"S\n\017MessageEncoding\022\034\n\030MESSAGE_ENCODIN"
- "G_UNKNOWN\020\000\022\023\n\017LENGTH_PREFIXED\020\001\022\r\n\tDELI"
- "MITED\020\002\"H\n\nJsonFormat\022\027\n\023JSON_FORMAT_UNK"
- "NOWN\020\000\022\t\n\005ALLOW\020\001\022\026\n\022LEGACY_BEST_EFFORT\020"
- "\002*\006\010\350\007\020\351\007*\006\010\351\007\020\352\007*\006\010\213N\020\220NJ\006\010\347\007\020\350\007\"\300\002\n\022Fe"
- "atureSetDefaults\022N\n\010defaults\030\001 \003(\0132<.goo"
- "gle.protobuf.FeatureSetDefaults.FeatureS"
- "etEditionDefault\0221\n\017minimum_edition\030\004 \001("
- "\0162\030.google.protobuf.Edition\0221\n\017maximum_e"
- "dition\030\005 \001(\0162\030.google.protobuf.Edition\032t"
- "\n\030FeatureSetEditionDefault\022)\n\007edition\030\003 "
- "\001(\0162\030.google.protobuf.Edition\022-\n\010feature"
- "s\030\002 \001(\0132\033.google.protobuf.FeatureSet\"\325\001\n"
- "\016SourceCodeInfo\022:\n\010location\030\001 \003(\0132(.goog"
- "le.protobuf.SourceCodeInfo.Location\032\206\001\n\010"
- "Location\022\020\n\004path\030\001 \003(\005B\002\020\001\022\020\n\004span\030\002 \003(\005"
- "B\002\020\001\022\030\n\020leading_comments\030\003 \001(\t\022\031\n\021traili"
- "ng_comments\030\004 \001(\t\022!\n\031leading_detached_co"
- "mments\030\006 \003(\t\"\234\002\n\021GeneratedCodeInfo\022A\n\nan"
- "notation\030\001 \003(\0132-.google.protobuf.Generat"
- "edCodeInfo.Annotation\032\303\001\n\nAnnotation\022\020\n\004"
- "path\030\001 \003(\005B\002\020\001\022\023\n\013source_file\030\002 \001(\t\022\r\n\005b"
- "egin\030\003 \001(\005\022\013\n\003end\030\004 \001(\005\022H\n\010semantic\030\005 \001("
- "\01626.google.protobuf.GeneratedCodeInfo.An"
- "notation.Semantic\"(\n\010Semantic\022\010\n\004NONE\020\000\022"
- "\007\n\003SET\020\001\022\t\n\005ALIAS\020\002*\352\001\n\007Edition\022\023\n\017EDITI"
- "ON_UNKNOWN\020\000\022\023\n\016EDITION_PROTO2\020\346\007\022\023\n\016EDI"
- "TION_PROTO3\020\347\007\022\021\n\014EDITION_2023\020\350\007\022\027\n\023EDI"
- "TION_1_TEST_ONLY\020\001\022\027\n\023EDITION_2_TEST_ONL"
- "Y\020\002\022\035\n\027EDITION_99997_TEST_ONLY\020\235\215\006\022\035\n\027ED"
- "ITION_99998_TEST_ONLY\020\236\215\006\022\035\n\027EDITION_999"
- "99_TEST_ONLY\020\237\215\006B~\n\023com.google.protobufB"
- "\020DescriptorProtosH\001Z-google.golang.org/p"
- "rotobuf/types/descriptorpb\370\001\001\242\002\003GPB\252\002\032Go"
- "ogle.Protobuf.Reflection"
+ "pretedOption\032J\n\016EditionDefault\022)\n\007editio"
+ "n\030\003 \001(\0162\030.google.protobuf.Edition\022\r\n\005val"
+ "ue\030\002 \001(\t\"/\n\005CType\022\n\n\006STRING\020\000\022\010\n\004CORD\020\001\022"
+ "\020\n\014STRING_PIECE\020\002\"5\n\006JSType\022\r\n\tJS_NORMAL"
+ "\020\000\022\r\n\tJS_STRING\020\001\022\r\n\tJS_NUMBER\020\002\"U\n\017Opti"
+ "onRetention\022\025\n\021RETENTION_UNKNOWN\020\000\022\025\n\021RE"
+ "TENTION_RUNTIME\020\001\022\024\n\020RETENTION_SOURCE\020\002\""
+ "\214\002\n\020OptionTargetType\022\027\n\023TARGET_TYPE_UNKN"
+ "OWN\020\000\022\024\n\020TARGET_TYPE_FILE\020\001\022\037\n\033TARGET_TY"
+ "PE_EXTENSION_RANGE\020\002\022\027\n\023TARGET_TYPE_MESS"
+ "AGE\020\003\022\025\n\021TARGET_TYPE_FIELD\020\004\022\025\n\021TARGET_T"
+ "YPE_ONEOF\020\005\022\024\n\020TARGET_TYPE_ENUM\020\006\022\032\n\026TAR"
+ "GET_TYPE_ENUM_ENTRY\020\007\022\027\n\023TARGET_TYPE_SER"
+ "VICE\020\010\022\026\n\022TARGET_TYPE_METHOD\020\t*\t\010\350\007\020\200\200\200\200"
+ "\002J\004\010\004\020\005J\004\010\022\020\023\"\215\001\n\014OneofOptions\022-\n\010featur"
+ "es\030\001 \001(\0132\033.google.protobuf.FeatureSet\022C\n"
+ "\024uninterpreted_option\030\347\007 \003(\0132$.google.pr"
+ "otobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200\002\"\366\001"
+ "\n\013EnumOptions\022\023\n\013allow_alias\030\002 \001(\010\022\031\n\nde"
+ "precated\030\003 \001(\010:\005false\0222\n&deprecated_lega"
+ "cy_json_field_conflicts\030\006 \001(\010B\002\030\001\022-\n\010fea"
+ "tures\030\007 \001(\0132\033.google.protobuf.FeatureSet"
+ "\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.google"
+ ".protobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200\002"
+ "J\004\010\005\020\006\"\311\001\n\020EnumValueOptions\022\031\n\ndeprecate"
+ "d\030\001 \001(\010:\005false\022-\n\010features\030\002 \001(\0132\033.googl"
+ "e.protobuf.FeatureSet\022\033\n\014debug_redact\030\003 "
+ "\001(\010:\005false\022C\n\024uninterpreted_option\030\347\007 \003("
+ "\0132$.google.protobuf.UninterpretedOption*"
+ "\t\010\350\007\020\200\200\200\200\002\"\252\001\n\016ServiceOptions\022-\n\010feature"
+ "s\030\" \001(\0132\033.google.protobuf.FeatureSet\022\031\n\n"
+ "deprecated\030! \001(\010:\005false\022C\n\024uninterpreted"
+ "_option\030\347\007 \003(\0132$.google.protobuf.Uninter"
+ "pretedOption*\t\010\350\007\020\200\200\200\200\002\"\334\002\n\rMethodOption"
+ "s\022\031\n\ndeprecated\030! \001(\010:\005false\022_\n\021idempote"
+ "ncy_level\030\" \001(\0162/.google.protobuf.Method"
+ "Options.IdempotencyLevel:\023IDEMPOTENCY_UN"
+ "KNOWN\022-\n\010features\030# \001(\0132\033.google.protobu"
+ "f.FeatureSet\022C\n\024uninterpreted_option\030\347\007 "
+ "\003(\0132$.google.protobuf.UninterpretedOptio"
+ "n\"P\n\020IdempotencyLevel\022\027\n\023IDEMPOTENCY_UNK"
+ "NOWN\020\000\022\023\n\017NO_SIDE_EFFECTS\020\001\022\016\n\nIDEMPOTEN"
+ "T\020\002*\t\010\350\007\020\200\200\200\200\002\"\236\002\n\023UninterpretedOption\022;"
+ "\n\004name\030\002 \003(\0132-.google.protobuf.Uninterpr"
+ "etedOption.NamePart\022\030\n\020identifier_value\030"
+ "\003 \001(\t\022\032\n\022positive_int_value\030\004 \001(\004\022\032\n\022neg"
+ "ative_int_value\030\005 \001(\003\022\024\n\014double_value\030\006 "
+ "\001(\001\022\024\n\014string_value\030\007 \001(\014\022\027\n\017aggregate_v"
+ "alue\030\010 \001(\t\0323\n\010NamePart\022\021\n\tname_part\030\001 \002("
+ "\t\022\024\n\014is_extension\030\002 \002(\010\"\235\t\n\nFeatureSet\022|"
+ "\n\016field_presence\030\001 \001(\0162).google.protobuf"
+ ".FeatureSet.FieldPresenceB9\210\001\001\230\001\004\230\001\001\242\001\r\022"
+ "\010EXPLICIT\030\346\007\242\001\r\022\010IMPLICIT\030\347\007\242\001\r\022\010EXPLICI"
+ "T\030\350\007\022\\\n\tenum_type\030\002 \001(\0162$.google.protobu"
+ "f.FeatureSet.EnumTypeB#\210\001\001\230\001\006\230\001\001\242\001\013\022\006CLO"
+ "SED\030\346\007\242\001\t\022\004OPEN\030\347\007\022{\n\027repeated_field_enc"
+ "oding\030\003 \001(\01621.google.protobuf.FeatureSet"
+ ".RepeatedFieldEncodingB\'\210\001\001\230\001\004\230\001\001\242\001\r\022\010EX"
+ "PANDED\030\346\007\242\001\013\022\006PACKED\030\347\007\022h\n\017utf8_validati"
+ "on\030\004 \001(\0162*.google.protobuf.FeatureSet.Ut"
+ "f8ValidationB#\210\001\001\230\001\004\230\001\001\242\001\t\022\004NONE\030\346\007\242\001\013\022\006"
+ "VERIFY\030\347\007\022g\n\020message_encoding\030\005 \001(\0162+.go"
+ "ogle.protobuf.FeatureSet.MessageEncoding"
+ "B \210\001\001\230\001\004\230\001\001\242\001\024\022\017LENGTH_PREFIXED\030\346\007\022p\n\013js"
+ "on_format\030\006 \001(\0162&.google.protobuf.Featur"
+ "eSet.JsonFormatB3\210\001\001\230\001\003\230\001\006\230\001\001\242\001\027\022\022LEGACY"
+ "_BEST_EFFORT\030\346\007\242\001\n\022\005ALLOW\030\347\007\"\\\n\rFieldPre"
+ "sence\022\032\n\026FIELD_PRESENCE_UNKNOWN\020\000\022\014\n\010EXP"
+ "LICIT\020\001\022\014\n\010IMPLICIT\020\002\022\023\n\017LEGACY_REQUIRED"
+ "\020\003\"7\n\010EnumType\022\025\n\021ENUM_TYPE_UNKNOWN\020\000\022\010\n"
+ "\004OPEN\020\001\022\n\n\006CLOSED\020\002\"V\n\025RepeatedFieldEnco"
+ "ding\022#\n\037REPEATED_FIELD_ENCODING_UNKNOWN\020"
+ "\000\022\n\n\006PACKED\020\001\022\014\n\010EXPANDED\020\002\"C\n\016Utf8Valid"
+ "ation\022\033\n\027UTF8_VALIDATION_UNKNOWN\020\000\022\n\n\006VE"
+ "RIFY\020\002\022\010\n\004NONE\020\003\"S\n\017MessageEncoding\022\034\n\030M"
+ "ESSAGE_ENCODING_UNKNOWN\020\000\022\023\n\017LENGTH_PREF"
+ "IXED\020\001\022\r\n\tDELIMITED\020\002\"H\n\nJsonFormat\022\027\n\023J"
+ "SON_FORMAT_UNKNOWN\020\000\022\t\n\005ALLOW\020\001\022\026\n\022LEGAC"
+ "Y_BEST_EFFORT\020\002*\006\010\350\007\020\351\007*\006\010\351\007\020\352\007*\006\010\213N\020\220NJ"
+ "\006\010\347\007\020\350\007\"\300\002\n\022FeatureSetDefaults\022N\n\010defaul"
+ "ts\030\001 \003(\0132<.google.protobuf.FeatureSetDef"
+ "aults.FeatureSetEditionDefault\0221\n\017minimu"
+ "m_edition\030\004 \001(\0162\030.google.protobuf.Editio"
+ "n\0221\n\017maximum_edition\030\005 \001(\0162\030.google.prot"
+ "obuf.Edition\032t\n\030FeatureSetEditionDefault"
+ "\022)\n\007edition\030\003 \001(\0162\030.google.protobuf.Edit"
+ "ion\022-\n\010features\030\002 \001(\0132\033.google.protobuf."
+ "FeatureSet\"\325\001\n\016SourceCodeInfo\022:\n\010locatio"
+ "n\030\001 \003(\0132(.google.protobuf.SourceCodeInfo"
+ ".Location\032\206\001\n\010Location\022\020\n\004path\030\001 \003(\005B\002\020\001"
+ "\022\020\n\004span\030\002 \003(\005B\002\020\001\022\030\n\020leading_comments\030\003"
+ " \001(\t\022\031\n\021trailing_comments\030\004 \001(\t\022!\n\031leadi"
+ "ng_detached_comments\030\006 \003(\t\"\234\002\n\021Generated"
+ "CodeInfo\022A\n\nannotation\030\001 \003(\0132-.google.pr"
+ "otobuf.GeneratedCodeInfo.Annotation\032\303\001\n\n"
+ "Annotation\022\020\n\004path\030\001 \003(\005B\002\020\001\022\023\n\013source_f"
+ "ile\030\002 \001(\t\022\r\n\005begin\030\003 \001(\005\022\013\n\003end\030\004 \001(\005\022H\n"
+ "\010semantic\030\005 \001(\01626.google.protobuf.Genera"
+ "tedCodeInfo.Annotation.Semantic\"(\n\010Seman"
+ "tic\022\010\n\004NONE\020\000\022\007\n\003SET\020\001\022\t\n\005ALIAS\020\002*\377\001\n\007Ed"
+ "ition\022\023\n\017EDITION_UNKNOWN\020\000\022\023\n\016EDITION_PR"
+ "OTO2\020\346\007\022\023\n\016EDITION_PROTO3\020\347\007\022\021\n\014EDITION_"
+ "2023\020\350\007\022\027\n\023EDITION_1_TEST_ONLY\020\001\022\027\n\023EDIT"
+ "ION_2_TEST_ONLY\020\002\022\035\n\027EDITION_99997_TEST_"
+ "ONLY\020\235\215\006\022\035\n\027EDITION_99998_TEST_ONLY\020\236\215\006\022"
+ "\035\n\027EDITION_99999_TEST_ONLY\020\237\215\006\022\023\n\013EDITIO"
+ "N_MAX\020\377\377\377\377\007B~\n\023com.google.protobufB\020Desc"
+ "riptorProtosH\001Z-google.golang.org/protob"
+ "uf/types/descriptorpb\370\001\001\242\002\003GPB\252\002\032Google."
+ "Protobuf.Reflection"
};
static ::absl::once_flag descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once;
const ::_pbi::DescriptorTable descriptor_table_google_2fprotobuf_2fdescriptor_2eproto = {
false,
false,
- 9544,
+ 9539,
descriptor_table_protodef_google_2fprotobuf_2fdescriptor_2eproto,
"google/protobuf/descriptor.proto",
&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
@@ -2261,16 +2258,16 @@
return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[12];
}
PROTOBUF_CONSTINIT const uint32_t FeatureSet_Utf8Validation_internal_data_[] = {
- 196608u, 0u, };
+ 65536u, 32u, 6u, };
bool FeatureSet_Utf8Validation_IsValid(int value) {
- return 0 <= value && value <= 2;
+ return 0 <= value && value <= 3 && ((13u >> value) & 1) != 0;
}
#if (__cplusplus < 201703) && \
(!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
constexpr FeatureSet_Utf8Validation FeatureSet::UTF8_VALIDATION_UNKNOWN;
-constexpr FeatureSet_Utf8Validation FeatureSet::NONE;
constexpr FeatureSet_Utf8Validation FeatureSet::VERIFY;
+constexpr FeatureSet_Utf8Validation FeatureSet::NONE;
constexpr FeatureSet_Utf8Validation FeatureSet::Utf8Validation_MIN;
constexpr FeatureSet_Utf8Validation FeatureSet::Utf8Validation_MAX;
constexpr int FeatureSet::Utf8Validation_ARRAYSIZE;
@@ -2345,7 +2342,7 @@
return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[16];
}
PROTOBUF_CONSTINIT const uint32_t Edition_internal_data_[] = {
- 196608u, 393216u, 99997u, 999u, 99999u, 998u, 1000u, 99998u, };
+ 196608u, 458752u, 99997u, 999u, 99999u, 998u, 1000u, 99998u, 2147483647u, };
bool Edition_IsValid(int value) {
return ::_pbi::ValidateEnum(value, Edition_internal_data_);
}
@@ -2399,12 +2396,15 @@
const ::google::protobuf::MessageLite::ClassData*
FileDescriptorSet::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FileDescriptorSet::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FileDescriptorSet, _impl_._cached_size_),
+ false,
+ },
+ &FileDescriptorSet::MergeImpl,
+ &FileDescriptorSet::kDescriptorMethods,
};
return &_data_;
}
@@ -2500,7 +2500,7 @@
}
-void FileDescriptorSet::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FileDescriptorSet::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FileDescriptorSet*>(&to_msg);
auto& from = static_cast<const FileDescriptorSet&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FileDescriptorSet)
@@ -2533,9 +2533,9 @@
}
::google::protobuf::Metadata FileDescriptorSet::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[0]);
}
// ===================================================================
@@ -2544,34 +2544,8 @@
using HasBits = decltype(std::declval<FileDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FileDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_package(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static const ::google::protobuf::FileOptions& options(const FileDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static const ::google::protobuf::SourceCodeInfo& source_code_info(const FileDescriptorProto* msg);
- static void set_has_source_code_info(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_syntax(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_edition(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
};
-const ::google::protobuf::FileOptions& FileDescriptorProto::_Internal::options(const FileDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
-const ::google::protobuf::SourceCodeInfo& FileDescriptorProto::_Internal::source_code_info(const FileDescriptorProto* msg) {
- return *msg->_impl_.source_code_info_;
-}
FileDescriptorProto::FileDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -2654,12 +2628,15 @@
const ::google::protobuf::MessageLite::ClassData*
FileDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FileDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FileDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &FileDescriptorProto::MergeImpl,
+ &FileDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -2895,15 +2872,13 @@
// optional .google.protobuf.FileOptions options = 8;
if (cached_has_bits & 0x00000008u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 8, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 8, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
// optional .google.protobuf.SourceCodeInfo source_code_info = 9;
if (cached_has_bits & 0x00000010u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 9, _Internal::source_code_info(this),
- _Internal::source_code_info(this).GetCachedSize(), target, stream);
+ 9, *_impl_.source_code_info_, _impl_.source_code_info_->GetCachedSize(), target, stream);
}
// repeated int32 public_dependency = 10;
@@ -3045,7 +3020,7 @@
}
-void FileDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FileDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FileDescriptorProto*>(&to_msg);
auto& from = static_cast<const FileDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -3084,7 +3059,6 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000008u;
}
if (cached_has_bits & 0x00000010u) {
ABSL_DCHECK(from._impl_.source_code_info_ != nullptr);
@@ -3094,13 +3068,12 @@
} else {
_this->_impl_.source_code_info_->MergeFrom(*from._impl_.source_code_info_);
}
- _this->_impl_._has_bits_[0] |= 0x00000010u;
}
if (cached_has_bits & 0x00000020u) {
_this->_impl_.edition_ = from._impl_.edition_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -3151,9 +3124,9 @@
}
::google::protobuf::Metadata FileDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[1]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[1]);
}
// ===================================================================
@@ -3162,21 +3135,8 @@
using HasBits = decltype(std::declval<DescriptorProto_ExtensionRange>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(DescriptorProto_ExtensionRange, _impl_._has_bits_);
- static void set_has_start(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_end(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static const ::google::protobuf::ExtensionRangeOptions& options(const DescriptorProto_ExtensionRange* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::ExtensionRangeOptions& DescriptorProto_ExtensionRange::_Internal::options(const DescriptorProto_ExtensionRange* msg) {
- return *msg->_impl_.options_;
-}
DescriptorProto_ExtensionRange::DescriptorProto_ExtensionRange(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -3238,12 +3198,15 @@
const ::google::protobuf::MessageLite::ClassData*
DescriptorProto_ExtensionRange::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- DescriptorProto_ExtensionRange::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(DescriptorProto_ExtensionRange, _impl_._cached_size_),
+ false,
+ },
+ &DescriptorProto_ExtensionRange::MergeImpl,
+ &DescriptorProto_ExtensionRange::kDescriptorMethods,
};
return &_data_;
}
@@ -3345,8 +3308,7 @@
// optional .google.protobuf.ExtensionRangeOptions options = 3;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 3, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 3, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -3391,7 +3353,7 @@
}
-void DescriptorProto_ExtensionRange::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void DescriptorProto_ExtensionRange::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<DescriptorProto_ExtensionRange*>(&to_msg);
auto& from = static_cast<const DescriptorProto_ExtensionRange&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -3410,7 +3372,6 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.start_ = from._impl_.start_;
@@ -3418,8 +3379,8 @@
if (cached_has_bits & 0x00000004u) {
_this->_impl_.end_ = from._impl_.end_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -3450,9 +3411,9 @@
}
::google::protobuf::Metadata DescriptorProto_ExtensionRange::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[2]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[2]);
}
// ===================================================================
@@ -3461,12 +3422,6 @@
using HasBits = decltype(std::declval<DescriptorProto_ReservedRange>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(DescriptorProto_ReservedRange, _impl_._has_bits_);
- static void set_has_start(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_end(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
DescriptorProto_ReservedRange::DescriptorProto_ReservedRange(::google::protobuf::Arena* arena)
@@ -3505,12 +3460,15 @@
const ::google::protobuf::MessageLite::ClassData*
DescriptorProto_ReservedRange::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- DescriptorProto_ReservedRange::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(DescriptorProto_ReservedRange, _impl_._cached_size_),
+ false,
+ },
+ &DescriptorProto_ReservedRange::MergeImpl,
+ &DescriptorProto_ReservedRange::kDescriptorMethods,
};
return &_data_;
}
@@ -3634,7 +3592,7 @@
}
-void DescriptorProto_ReservedRange::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void DescriptorProto_ReservedRange::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<DescriptorProto_ReservedRange*>(&to_msg);
auto& from = static_cast<const DescriptorProto_ReservedRange&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.DescriptorProto.ReservedRange)
@@ -3650,8 +3608,8 @@
if (cached_has_bits & 0x00000002u) {
_this->_impl_.end_ = from._impl_.end_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -3679,9 +3637,9 @@
}
::google::protobuf::Metadata DescriptorProto_ReservedRange::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[3]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[3]);
}
// ===================================================================
@@ -3690,18 +3648,8 @@
using HasBits = decltype(std::declval<DescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(DescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static const ::google::protobuf::MessageOptions& options(const DescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::MessageOptions& DescriptorProto::_Internal::options(const DescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
DescriptorProto::DescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -3770,12 +3718,15 @@
const ::google::protobuf::MessageLite::ClassData*
DescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- DescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(DescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &DescriptorProto::MergeImpl,
+ &DescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -3977,8 +3928,7 @@
// optional .google.protobuf.MessageOptions options = 7;
if (cached_has_bits & 0x00000002u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 7, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 7, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;
@@ -4089,7 +4039,7 @@
}
-void DescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void DescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<DescriptorProto*>(&to_msg);
auto& from = static_cast<const DescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -4126,9 +4076,9 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000002u;
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -4177,9 +4127,9 @@
}
::google::protobuf::Metadata DescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[4]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[4]);
}
// ===================================================================
@@ -4188,21 +4138,6 @@
using HasBits = decltype(std::declval<ExtensionRangeOptions_Declaration>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions_Declaration, _impl_._has_bits_);
- static void set_has_number(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_full_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_type(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_reserved(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_repeated(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
};
ExtensionRangeOptions_Declaration::ExtensionRangeOptions_Declaration(::google::protobuf::Arena* arena)
@@ -4267,12 +4202,15 @@
const ::google::protobuf::MessageLite::ClassData*
ExtensionRangeOptions_Declaration::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- ExtensionRangeOptions_Declaration::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions_Declaration, _impl_._cached_size_),
+ false,
+ },
+ &ExtensionRangeOptions_Declaration::MergeImpl,
+ &ExtensionRangeOptions_Declaration::kDescriptorMethods,
};
return &_data_;
}
@@ -4468,7 +4406,7 @@
}
-void ExtensionRangeOptions_Declaration::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void ExtensionRangeOptions_Declaration::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<ExtensionRangeOptions_Declaration*>(&to_msg);
auto& from = static_cast<const ExtensionRangeOptions_Declaration&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.ExtensionRangeOptions.Declaration)
@@ -4493,8 +4431,8 @@
if (cached_has_bits & 0x00000010u) {
_this->_impl_.repeated_ = from._impl_.repeated_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -4526,9 +4464,9 @@
}
::google::protobuf::Metadata ExtensionRangeOptions_Declaration::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[5]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[5]);
}
// ===================================================================
@@ -4537,18 +4475,8 @@
using HasBits = decltype(std::declval<ExtensionRangeOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions, _impl_._has_bits_);
- static const ::google::protobuf::FeatureSet& features(const ExtensionRangeOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_verification(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::FeatureSet& ExtensionRangeOptions::_Internal::features(const ExtensionRangeOptions* msg) {
- return *msg->_impl_.features_;
-}
ExtensionRangeOptions::ExtensionRangeOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -4607,12 +4535,15 @@
const ::google::protobuf::MessageLite::ClassData*
ExtensionRangeOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- ExtensionRangeOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions, _impl_._cached_size_),
+ false,
+ },
+ &ExtensionRangeOptions::MergeImpl,
+ &ExtensionRangeOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -4667,7 +4598,7 @@
// repeated .google.protobuf.ExtensionRangeOptions.Declaration declaration = 2 [retention = RETENTION_SOURCE];
{::_pbi::TcParser::FastMtR1,
{18, 63, 0, PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions, _impl_.declaration_)}},
- // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED];
+ // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];
{::_pbi::TcParser::FastEr0S1,
{24, 1, 1, PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions, _impl_.verification_)}},
{::_pbi::TcParser::MiniParse, {}},
@@ -4685,7 +4616,7 @@
// repeated .google.protobuf.ExtensionRangeOptions.Declaration declaration = 2 [retention = RETENTION_SOURCE];
{PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions, _impl_.declaration_), -1, 0,
(0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
- // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED];
+ // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];
{PROTOBUF_FIELD_OFFSET(ExtensionRangeOptions, _impl_.verification_), _Internal::kHasBitsOffset + 1, 1,
(0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
// optional .google.protobuf.FeatureSet features = 50;
@@ -4719,7 +4650,7 @@
}
cached_has_bits = _impl_._has_bits_[0];
- // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED];
+ // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];
if (cached_has_bits & 0x00000002u) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteEnumToArray(
@@ -4729,8 +4660,7 @@
// optional .google.protobuf.FeatureSet features = 50;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 50, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 50, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -4783,7 +4713,7 @@
2 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.features_);
}
- // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED];
+ // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];
if (cached_has_bits & 0x00000002u) {
total_size += 1 +
::_pbi::WireFormatLite::EnumSize(this->_internal_verification());
@@ -4794,7 +4724,7 @@
}
-void ExtensionRangeOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void ExtensionRangeOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<ExtensionRangeOptions*>(&to_msg);
auto& from = static_cast<const ExtensionRangeOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -4817,13 +4747,12 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.verification_ = from._impl_.verification_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -4863,9 +4792,9 @@
}
::google::protobuf::Metadata ExtensionRangeOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[6]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[6]);
}
// ===================================================================
@@ -4874,45 +4803,8 @@
using HasBits = decltype(std::declval<FieldDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FieldDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_number(HasBits* has_bits) {
- (*has_bits)[0] |= 64u;
- }
- static void set_has_label(HasBits* has_bits) {
- (*has_bits)[0] |= 512u;
- }
- static void set_has_type(HasBits* has_bits) {
- (*has_bits)[0] |= 1024u;
- }
- static void set_has_type_name(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_extendee(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_default_value(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_oneof_index(HasBits* has_bits) {
- (*has_bits)[0] |= 128u;
- }
- static void set_has_json_name(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static const ::google::protobuf::FieldOptions& options(const FieldDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
- static void set_has_proto3_optional(HasBits* has_bits) {
- (*has_bits)[0] |= 256u;
- }
};
-const ::google::protobuf::FieldOptions& FieldDescriptorProto::_Internal::options(const FieldDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
FieldDescriptorProto::FieldDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -4991,12 +4883,15 @@
const ::google::protobuf::MessageLite::ClassData*
FieldDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FieldDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FieldDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &FieldDescriptorProto::MergeImpl,
+ &FieldDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -5218,8 +5113,7 @@
// optional .google.protobuf.FieldOptions options = 8;
if (cached_has_bits & 0x00000020u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 8, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 8, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
// optional int32 oneof_index = 9;
@@ -5335,7 +5229,7 @@
}
-void FieldDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FieldDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FieldDescriptorProto*>(&to_msg);
auto& from = static_cast<const FieldDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -5369,7 +5263,6 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000020u;
}
if (cached_has_bits & 0x00000040u) {
_this->_impl_.number_ = from._impl_.number_;
@@ -5377,7 +5270,6 @@
if (cached_has_bits & 0x00000080u) {
_this->_impl_.oneof_index_ = from._impl_.oneof_index_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
if (cached_has_bits & 0x00000700u) {
if (cached_has_bits & 0x00000100u) {
@@ -5389,8 +5281,8 @@
if (cached_has_bits & 0x00000400u) {
_this->_impl_.type_ = from._impl_.type_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -5428,9 +5320,9 @@
}
::google::protobuf::Metadata FieldDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[7]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[7]);
}
// ===================================================================
@@ -5439,18 +5331,8 @@
using HasBits = decltype(std::declval<OneofDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(OneofDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static const ::google::protobuf::OneofOptions& options(const OneofDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::OneofOptions& OneofDescriptorProto::_Internal::options(const OneofDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
OneofDescriptorProto::OneofDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -5503,12 +5385,15 @@
const ::google::protobuf::MessageLite::ClassData*
OneofDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- OneofDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(OneofDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &OneofDescriptorProto::MergeImpl,
+ &OneofDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -5600,8 +5485,7 @@
// optional .google.protobuf.OneofOptions options = 2;
if (cached_has_bits & 0x00000002u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 2, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 2, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -5640,7 +5524,7 @@
}
-void OneofDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void OneofDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<OneofDescriptorProto*>(&to_msg);
auto& from = static_cast<const OneofDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -5662,9 +5546,9 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000002u;
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -5693,9 +5577,9 @@
}
::google::protobuf::Metadata OneofDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[8]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[8]);
}
// ===================================================================
@@ -5704,12 +5588,6 @@
using HasBits = decltype(std::declval<EnumDescriptorProto_EnumReservedRange>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(EnumDescriptorProto_EnumReservedRange, _impl_._has_bits_);
- static void set_has_start(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_end(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
EnumDescriptorProto_EnumReservedRange::EnumDescriptorProto_EnumReservedRange(::google::protobuf::Arena* arena)
@@ -5748,12 +5626,15 @@
const ::google::protobuf::MessageLite::ClassData*
EnumDescriptorProto_EnumReservedRange::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- EnumDescriptorProto_EnumReservedRange::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(EnumDescriptorProto_EnumReservedRange, _impl_._cached_size_),
+ false,
+ },
+ &EnumDescriptorProto_EnumReservedRange::MergeImpl,
+ &EnumDescriptorProto_EnumReservedRange::kDescriptorMethods,
};
return &_data_;
}
@@ -5877,7 +5758,7 @@
}
-void EnumDescriptorProto_EnumReservedRange::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void EnumDescriptorProto_EnumReservedRange::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<EnumDescriptorProto_EnumReservedRange*>(&to_msg);
auto& from = static_cast<const EnumDescriptorProto_EnumReservedRange&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.EnumDescriptorProto.EnumReservedRange)
@@ -5893,8 +5774,8 @@
if (cached_has_bits & 0x00000002u) {
_this->_impl_.end_ = from._impl_.end_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -5922,9 +5803,9 @@
}
::google::protobuf::Metadata EnumDescriptorProto_EnumReservedRange::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[9]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[9]);
}
// ===================================================================
@@ -5933,18 +5814,8 @@
using HasBits = decltype(std::declval<EnumDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(EnumDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static const ::google::protobuf::EnumOptions& options(const EnumDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::EnumOptions& EnumDescriptorProto::_Internal::options(const EnumDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
EnumDescriptorProto::EnumDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -6003,12 +5874,15 @@
const ::google::protobuf::MessageLite::ClassData*
EnumDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- EnumDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(EnumDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &EnumDescriptorProto::MergeImpl,
+ &EnumDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -6135,8 +6009,7 @@
// optional .google.protobuf.EnumOptions options = 3;
if (cached_has_bits & 0x00000002u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 3, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 3, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4;
@@ -6209,7 +6082,7 @@
}
-void EnumDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void EnumDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<EnumDescriptorProto*>(&to_msg);
auto& from = static_cast<const EnumDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -6236,9 +6109,9 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000002u;
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -6272,9 +6145,9 @@
}
::google::protobuf::Metadata EnumDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[10]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[10]);
}
// ===================================================================
@@ -6283,21 +6156,8 @@
using HasBits = decltype(std::declval<EnumValueDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(EnumValueDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_number(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static const ::google::protobuf::EnumValueOptions& options(const EnumValueDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::EnumValueOptions& EnumValueDescriptorProto::_Internal::options(const EnumValueDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
EnumValueDescriptorProto::EnumValueDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -6356,12 +6216,15 @@
const ::google::protobuf::MessageLite::ClassData*
EnumValueDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- EnumValueDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(EnumValueDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &EnumValueDescriptorProto::MergeImpl,
+ &EnumValueDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -6468,8 +6331,7 @@
// optional .google.protobuf.EnumValueOptions options = 3;
if (cached_has_bits & 0x00000002u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 3, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 3, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -6514,7 +6376,7 @@
}
-void EnumValueDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void EnumValueDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<EnumValueDescriptorProto*>(&to_msg);
auto& from = static_cast<const EnumValueDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -6536,13 +6398,12 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000002u;
}
if (cached_has_bits & 0x00000004u) {
_this->_impl_.number_ = from._impl_.number_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -6576,9 +6437,9 @@
}
::google::protobuf::Metadata EnumValueDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[11]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[11]);
}
// ===================================================================
@@ -6587,18 +6448,8 @@
using HasBits = decltype(std::declval<ServiceDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(ServiceDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static const ::google::protobuf::ServiceOptions& options(const ServiceDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::ServiceOptions& ServiceDescriptorProto::_Internal::options(const ServiceDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
ServiceDescriptorProto::ServiceDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -6653,12 +6504,15 @@
const ::google::protobuf::MessageLite::ClassData*
ServiceDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- ServiceDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(ServiceDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &ServiceDescriptorProto::MergeImpl,
+ &ServiceDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -6767,8 +6621,7 @@
// optional .google.protobuf.ServiceOptions options = 3;
if (cached_has_bits & 0x00000002u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 3, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 3, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -6813,7 +6666,7 @@
}
-void ServiceDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void ServiceDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<ServiceDescriptorProto*>(&to_msg);
auto& from = static_cast<const ServiceDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -6837,9 +6690,9 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000002u;
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -6871,9 +6724,9 @@
}
::google::protobuf::Metadata ServiceDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[12]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[12]);
}
// ===================================================================
@@ -6882,30 +6735,8 @@
using HasBits = decltype(std::declval<MethodDescriptorProto>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(MethodDescriptorProto, _impl_._has_bits_);
- static void set_has_name(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_input_type(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_output_type(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static const ::google::protobuf::MethodOptions& options(const MethodDescriptorProto* msg);
- static void set_has_options(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_client_streaming(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_server_streaming(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
};
-const ::google::protobuf::MethodOptions& MethodDescriptorProto::_Internal::options(const MethodDescriptorProto* msg) {
- return *msg->_impl_.options_;
-}
MethodDescriptorProto::MethodDescriptorProto(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -6976,12 +6807,15 @@
const ::google::protobuf::MessageLite::ClassData*
MethodDescriptorProto::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- MethodDescriptorProto::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(MethodDescriptorProto, _impl_._cached_size_),
+ false,
+ },
+ &MethodDescriptorProto::MergeImpl,
+ &MethodDescriptorProto::kDescriptorMethods,
};
return &_data_;
}
@@ -7126,8 +6960,7 @@
// optional .google.protobuf.MethodOptions options = 4;
if (cached_has_bits & 0x00000008u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 4, _Internal::options(this),
- _Internal::options(this).GetCachedSize(), target, stream);
+ 4, *_impl_.options_, _impl_.options_->GetCachedSize(), target, stream);
}
// optional bool client_streaming = 5 [default = false];
@@ -7202,7 +7035,7 @@
}
-void MethodDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void MethodDescriptorProto::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<MethodDescriptorProto*>(&to_msg);
auto& from = static_cast<const MethodDescriptorProto&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -7230,7 +7063,6 @@
} else {
_this->_impl_.options_->MergeFrom(*from._impl_.options_);
}
- _this->_impl_._has_bits_[0] |= 0x00000008u;
}
if (cached_has_bits & 0x00000010u) {
_this->_impl_.client_streaming_ = from._impl_.client_streaming_;
@@ -7238,8 +7070,8 @@
if (cached_has_bits & 0x00000020u) {
_this->_impl_.server_streaming_ = from._impl_.server_streaming_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -7275,9 +7107,9 @@
}
::google::protobuf::Metadata MethodDescriptorProto::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[13]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[13]);
}
// ===================================================================
@@ -7286,75 +7118,8 @@
using HasBits = decltype(std::declval<FileOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FileOptions, _impl_._has_bits_);
- static void set_has_java_package(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_java_outer_classname(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_java_multiple_files(HasBits* has_bits) {
- (*has_bits)[0] |= 2048u;
- }
- static void set_has_java_generate_equals_and_hash(HasBits* has_bits) {
- (*has_bits)[0] |= 4096u;
- }
- static void set_has_java_string_check_utf8(HasBits* has_bits) {
- (*has_bits)[0] |= 8192u;
- }
- static void set_has_optimize_for(HasBits* has_bits) {
- (*has_bits)[0] |= 524288u;
- }
- static void set_has_go_package(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_cc_generic_services(HasBits* has_bits) {
- (*has_bits)[0] |= 16384u;
- }
- static void set_has_java_generic_services(HasBits* has_bits) {
- (*has_bits)[0] |= 32768u;
- }
- static void set_has_py_generic_services(HasBits* has_bits) {
- (*has_bits)[0] |= 65536u;
- }
- static void set_has_php_generic_services(HasBits* has_bits) {
- (*has_bits)[0] |= 131072u;
- }
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 262144u;
- }
- static void set_has_cc_enable_arenas(HasBits* has_bits) {
- (*has_bits)[0] |= 1048576u;
- }
- static void set_has_objc_class_prefix(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_csharp_namespace(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_swift_prefix(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
- static void set_has_php_class_prefix(HasBits* has_bits) {
- (*has_bits)[0] |= 64u;
- }
- static void set_has_php_namespace(HasBits* has_bits) {
- (*has_bits)[0] |= 128u;
- }
- static void set_has_php_metadata_namespace(HasBits* has_bits) {
- (*has_bits)[0] |= 256u;
- }
- static void set_has_ruby_package(HasBits* has_bits) {
- (*has_bits)[0] |= 512u;
- }
- static const ::google::protobuf::FeatureSet& features(const FileOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1024u;
- }
};
-const ::google::protobuf::FeatureSet& FileOptions::_Internal::features(const FileOptions* msg) {
- return *msg->_impl_.features_;
-}
FileOptions::FileOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -7453,12 +7218,15 @@
const ::google::protobuf::MessageLite::ClassData*
FileOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FileOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FileOptions, _impl_._cached_size_),
+ false,
+ },
+ &FileOptions::MergeImpl,
+ &FileOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -7515,7 +7283,7 @@
reinterpret_cast<char*>(&_impl_.java_generic_services_) -
reinterpret_cast<char*>(&_impl_.java_multiple_files_)) + sizeof(_impl_.java_generic_services_));
}
- if (cached_has_bits & 0x001f0000u) {
+ if (cached_has_bits & 0x000f0000u) {
::memset(&_impl_.py_generic_services_, 0, static_cast<::size_t>(
reinterpret_cast<char*>(&_impl_.deprecated_) -
reinterpret_cast<char*>(&_impl_.py_generic_services_)) + sizeof(_impl_.deprecated_));
@@ -7533,7 +7301,7 @@
}
-constexpr ::_pbi::TcParseTable<5, 22, 3, 202, 12> FileOptions::_table_ = {
+constexpr ::_pbi::TcParseTable<5, 21, 3, 202, 12> FileOptions::_table_ = {
{
PROTOBUF_FIELD_OFFSET(FileOptions, _impl_._has_bits_),
PROTOBUF_FIELD_OFFSET(FileOptions, _impl_._extensions_),
@@ -7541,7 +7309,7 @@
offsetof(decltype(_table_), field_lookup_table),
3149166718, // skipmap
offsetof(decltype(_table_), field_entries),
- 22, // num_field_entries
+ 21, // num_field_entries
3, // num_aux_entries
offsetof(decltype(_table_), aux_entries),
&_FileOptions_default_instance_._instance,
@@ -7565,7 +7333,7 @@
{66, 1, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_outer_classname_)}},
// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
{::_pbi::TcParser::FastEr1S1,
- {72, 19, 3, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.optimize_for_)}},
+ {72, 18, 3, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.optimize_for_)}},
// optional bool java_multiple_files = 10 [default = false];
{::_pbi::TcParser::SingularVarintNoZag1<bool, offsetof(FileOptions, _impl_.java_multiple_files_), 11>(),
{80, 11, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_multiple_files_)}},
@@ -7595,16 +7363,14 @@
{::_pbi::TcParser::MiniParse, {}},
// optional bool deprecated = 23 [default = false];
{::_pbi::TcParser::FastV8S2,
- {440, 18, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.deprecated_)}},
+ {440, 17, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.deprecated_)}},
// optional string php_class_prefix = 40;
{::_pbi::TcParser::FastSS2,
{706, 6, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.php_class_prefix_)}},
// optional string php_namespace = 41;
{::_pbi::TcParser::FastSS2,
{714, 7, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.php_namespace_)}},
- // optional bool php_generic_services = 42 [default = false];
- {::_pbi::TcParser::FastV8S2,
- {720, 17, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.php_generic_services_)}},
+ {::_pbi::TcParser::MiniParse, {}},
// optional bool java_string_check_utf8 = 27 [default = false];
{::_pbi::TcParser::FastV8S2,
{472, 13, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_string_check_utf8_)}},
@@ -7617,11 +7383,11 @@
{::_pbi::TcParser::MiniParse, {}},
// optional bool cc_enable_arenas = 31 [default = true];
{::_pbi::TcParser::FastV8S2,
- {504, 20, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.cc_enable_arenas_)}},
+ {504, 19, 0, PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.cc_enable_arenas_)}},
}}, {{
36, 0, 1,
- 48260, 12,999, 0, 1,
- 65534, 21,
+ 48324, 12,999, 0, 1,
+ 65534, 20,
65535, 65535
}}, {{
// optional string java_package = 1;
@@ -7631,7 +7397,7 @@
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_outer_classname_), _Internal::kHasBitsOffset + 1, 0,
(0 | ::_fl::kFcOptional | ::_fl::kRawString | ::_fl::kRepAString)},
// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
- {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.optimize_for_), _Internal::kHasBitsOffset + 19, 0,
+ {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.optimize_for_), _Internal::kHasBitsOffset + 18, 0,
(0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
// optional bool java_multiple_files = 10 [default = false];
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_multiple_files_), _Internal::kHasBitsOffset + 11, 0,
@@ -7652,13 +7418,13 @@
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_generate_equals_and_hash_), _Internal::kHasBitsOffset + 12, 0,
(0 | ::_fl::kFcOptional | ::_fl::kBool)},
// optional bool deprecated = 23 [default = false];
- {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.deprecated_), _Internal::kHasBitsOffset + 18, 0,
+ {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.deprecated_), _Internal::kHasBitsOffset + 17, 0,
(0 | ::_fl::kFcOptional | ::_fl::kBool)},
// optional bool java_string_check_utf8 = 27 [default = false];
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.java_string_check_utf8_), _Internal::kHasBitsOffset + 13, 0,
(0 | ::_fl::kFcOptional | ::_fl::kBool)},
// optional bool cc_enable_arenas = 31 [default = true];
- {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.cc_enable_arenas_), _Internal::kHasBitsOffset + 20, 0,
+ {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.cc_enable_arenas_), _Internal::kHasBitsOffset + 19, 0,
(0 | ::_fl::kFcOptional | ::_fl::kBool)},
// optional string objc_class_prefix = 36;
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.objc_class_prefix_), _Internal::kHasBitsOffset + 3, 0,
@@ -7675,9 +7441,6 @@
// optional string php_namespace = 41;
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.php_namespace_), _Internal::kHasBitsOffset + 7, 0,
(0 | ::_fl::kFcOptional | ::_fl::kRawString | ::_fl::kRepAString)},
- // optional bool php_generic_services = 42 [default = false];
- {PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.php_generic_services_), _Internal::kHasBitsOffset + 17, 0,
- (0 | ::_fl::kFcOptional | ::_fl::kBool)},
// optional string php_metadata_namespace = 44;
{PROTOBUF_FIELD_OFFSET(FileOptions, _impl_.php_metadata_namespace_), _Internal::kHasBitsOffset + 8, 0,
(0 | ::_fl::kFcOptional | ::_fl::kRawString | ::_fl::kRepAString)},
@@ -7695,7 +7458,7 @@
{::_pbi::TcParser::GetTable<::google::protobuf::FeatureSet>()},
{::_pbi::TcParser::GetTable<::google::protobuf::UninterpretedOption>()},
}}, {{
- "\33\14\24\0\0\12\0\0\0\0\0\0\0\21\20\14\20\15\0\26\14\0\0\0"
+ "\33\14\24\0\0\12\0\0\0\0\0\0\0\21\20\14\20\15\26\14\0\0\0\0"
"google.protobuf.FileOptions"
"java_package"
"java_outer_classname"
@@ -7735,7 +7498,7 @@
}
// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
- if (cached_has_bits & 0x00080000u) {
+ if (cached_has_bits & 0x00040000u) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteEnumToArray(
9, this->_internal_optimize_for(), target);
@@ -7785,7 +7548,7 @@
}
// optional bool deprecated = 23 [default = false];
- if (cached_has_bits & 0x00040000u) {
+ if (cached_has_bits & 0x00020000u) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteBoolToArray(
23, this->_internal_deprecated(), target);
@@ -7799,7 +7562,7 @@
}
// optional bool cc_enable_arenas = 31 [default = true];
- if (cached_has_bits & 0x00100000u) {
+ if (cached_has_bits & 0x00080000u) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteBoolToArray(
31, this->_internal_cc_enable_arenas(), target);
@@ -7845,13 +7608,6 @@
target = stream->WriteStringMaybeAliased(41, _s, target);
}
- // optional bool php_generic_services = 42 [default = false];
- if (cached_has_bits & 0x00020000u) {
- target = stream->EnsureSpace(target);
- target = ::_pbi::WireFormatLite::WriteBoolToArray(
- 42, this->_internal_php_generic_services(), target);
- }
-
// optional string php_metadata_namespace = 44;
if (cached_has_bits & 0x00000100u) {
const std::string& _s = this->_internal_php_metadata_namespace();
@@ -7871,8 +7627,7 @@
// optional .google.protobuf.FeatureSet features = 50;
if (cached_has_bits & 0x00000400u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 50, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 50, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -8007,30 +7762,25 @@
}
}
- if (cached_has_bits & 0x001f0000u) {
+ if (cached_has_bits & 0x000f0000u) {
// optional bool py_generic_services = 18 [default = false];
if (cached_has_bits & 0x00010000u) {
total_size += 3;
}
- // optional bool php_generic_services = 42 [default = false];
+ // optional bool deprecated = 23 [default = false];
if (cached_has_bits & 0x00020000u) {
total_size += 3;
}
- // optional bool deprecated = 23 [default = false];
- if (cached_has_bits & 0x00040000u) {
- total_size += 3;
- }
-
// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
- if (cached_has_bits & 0x00080000u) {
+ if (cached_has_bits & 0x00040000u) {
total_size += 1 +
::_pbi::WireFormatLite::EnumSize(this->_internal_optimize_for());
}
// optional bool cc_enable_arenas = 31 [default = true];
- if (cached_has_bits & 0x00100000u) {
+ if (cached_has_bits & 0x00080000u) {
total_size += 3;
}
@@ -8039,7 +7789,7 @@
}
-void FileOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FileOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FileOptions*>(&to_msg);
auto& from = static_cast<const FileOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -8092,7 +7842,6 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000400u;
}
if (cached_has_bits & 0x00000800u) {
_this->_impl_.java_multiple_files_ = from._impl_.java_multiple_files_;
@@ -8109,26 +7858,22 @@
if (cached_has_bits & 0x00008000u) {
_this->_impl_.java_generic_services_ = from._impl_.java_generic_services_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
- if (cached_has_bits & 0x001f0000u) {
+ if (cached_has_bits & 0x000f0000u) {
if (cached_has_bits & 0x00010000u) {
_this->_impl_.py_generic_services_ = from._impl_.py_generic_services_;
}
if (cached_has_bits & 0x00020000u) {
- _this->_impl_.php_generic_services_ = from._impl_.php_generic_services_;
- }
- if (cached_has_bits & 0x00040000u) {
_this->_impl_.deprecated_ = from._impl_.deprecated_;
}
- if (cached_has_bits & 0x00080000u) {
+ if (cached_has_bits & 0x00040000u) {
_this->_impl_.optimize_for_ = from._impl_.optimize_for_;
}
- if (cached_has_bits & 0x00100000u) {
+ if (cached_has_bits & 0x00080000u) {
_this->_impl_.cc_enable_arenas_ = from._impl_.cc_enable_arenas_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -8179,9 +7924,9 @@
}
::google::protobuf::Metadata FileOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[14]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[14]);
}
// ===================================================================
@@ -8190,30 +7935,8 @@
using HasBits = decltype(std::declval<MessageOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(MessageOptions, _impl_._has_bits_);
- static void set_has_message_set_wire_format(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_no_standard_descriptor_accessor(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_map_entry(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_deprecated_legacy_json_field_conflicts(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
- static const ::google::protobuf::FeatureSet& features(const MessageOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::FeatureSet& MessageOptions::_Internal::features(const MessageOptions* msg) {
- return *msg->_impl_.features_;
-}
MessageOptions::MessageOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -8280,12 +8003,15 @@
const ::google::protobuf::MessageLite::ClassData*
MessageOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- MessageOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(MessageOptions, _impl_._cached_size_),
+ false,
+ },
+ &MessageOptions::MergeImpl,
+ &MessageOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -8433,8 +8159,7 @@
// optional .google.protobuf.FeatureSet features = 12;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 12, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 12, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -8511,7 +8236,7 @@
}
-void MessageOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void MessageOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<MessageOptions*>(&to_msg);
auto& from = static_cast<const MessageOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -8532,7 +8257,6 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.message_set_wire_format_ = from._impl_.message_set_wire_format_;
@@ -8549,8 +8273,8 @@
if (cached_has_bits & 0x00000020u) {
_this->_impl_.deprecated_legacy_json_field_conflicts_ = from._impl_.deprecated_legacy_json_field_conflicts_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -8589,9 +8313,9 @@
}
::google::protobuf::Metadata MessageOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[15]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[15]);
}
// ===================================================================
@@ -8600,12 +8324,6 @@
using HasBits = decltype(std::declval<FieldOptions_EditionDefault>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FieldOptions_EditionDefault, _impl_._has_bits_);
- static void set_has_edition(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_value(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
FieldOptions_EditionDefault::FieldOptions_EditionDefault(::google::protobuf::Arena* arena)
@@ -8656,12 +8374,15 @@
const ::google::protobuf::MessageLite::ClassData*
FieldOptions_EditionDefault::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FieldOptions_EditionDefault::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FieldOptions_EditionDefault, _impl_._cached_size_),
+ false,
+ },
+ &FieldOptions_EditionDefault::MergeImpl,
+ &FieldOptions_EditionDefault::kDescriptorMethods,
};
return &_data_;
}
@@ -8788,7 +8509,7 @@
}
-void FieldOptions_EditionDefault::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FieldOptions_EditionDefault::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FieldOptions_EditionDefault*>(&to_msg);
auto& from = static_cast<const FieldOptions_EditionDefault&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FieldOptions.EditionDefault)
@@ -8804,8 +8525,8 @@
if (cached_has_bits & 0x00000002u) {
_this->_impl_.edition_ = from._impl_.edition_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -8831,9 +8552,9 @@
}
::google::protobuf::Metadata FieldOptions_EditionDefault::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[16]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[16]);
}
// ===================================================================
@@ -8842,42 +8563,8 @@
using HasBits = decltype(std::declval<FieldOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FieldOptions, _impl_._has_bits_);
- static void set_has_ctype(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_packed(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_jstype(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_lazy(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_unverified_lazy(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 64u;
- }
- static void set_has_weak(HasBits* has_bits) {
- (*has_bits)[0] |= 128u;
- }
- static void set_has_debug_redact(HasBits* has_bits) {
- (*has_bits)[0] |= 256u;
- }
- static void set_has_retention(HasBits* has_bits) {
- (*has_bits)[0] |= 512u;
- }
- static const ::google::protobuf::FeatureSet& features(const FieldOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::FeatureSet& FieldOptions::_Internal::features(const FieldOptions* msg) {
- return *msg->_impl_.features_;
-}
FieldOptions::FieldOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -8948,12 +8635,15 @@
const ::google::protobuf::MessageLite::ClassData*
FieldOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FieldOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FieldOptions, _impl_._cached_size_),
+ false,
+ },
+ &FieldOptions::MergeImpl,
+ &FieldOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -9193,8 +8883,7 @@
// optional .google.protobuf.FeatureSet features = 21;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 21, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 21, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -9314,7 +9003,7 @@
}
-void FieldOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FieldOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FieldOptions*>(&to_msg);
auto& from = static_cast<const FieldOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -9338,7 +9027,6 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.ctype_ = from._impl_.ctype_;
@@ -9361,7 +9049,6 @@
if (cached_has_bits & 0x00000080u) {
_this->_impl_.weak_ = from._impl_.weak_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
if (cached_has_bits & 0x00000300u) {
if (cached_has_bits & 0x00000100u) {
@@ -9370,8 +9057,8 @@
if (cached_has_bits & 0x00000200u) {
_this->_impl_.retention_ = from._impl_.retention_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -9412,9 +9099,9 @@
}
::google::protobuf::Metadata FieldOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[17]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[17]);
}
// ===================================================================
@@ -9423,15 +9110,8 @@
using HasBits = decltype(std::declval<OneofOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(OneofOptions, _impl_._has_bits_);
- static const ::google::protobuf::FeatureSet& features(const OneofOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::FeatureSet& OneofOptions::_Internal::features(const OneofOptions* msg) {
- return *msg->_impl_.features_;
-}
OneofOptions::OneofOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -9486,12 +9166,15 @@
const ::google::protobuf::MessageLite::ClassData*
OneofOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- OneofOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(OneofOptions, _impl_._cached_size_),
+ false,
+ },
+ &OneofOptions::MergeImpl,
+ &OneofOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -9574,8 +9257,7 @@
// optional .google.protobuf.FeatureSet features = 1;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 1, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 1, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -9625,7 +9307,7 @@
}
-void OneofOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void OneofOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<OneofOptions*>(&to_msg);
auto& from = static_cast<const OneofOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -9636,7 +9318,8 @@
_this->_internal_mutable_uninterpreted_option()->MergeFrom(
from._internal_uninterpreted_option());
- if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) {
+ cached_has_bits = from._impl_._has_bits_[0];
+ if (cached_has_bits & 0x00000001u) {
ABSL_DCHECK(from._impl_.features_ != nullptr);
if (_this->_impl_.features_ == nullptr) {
_this->_impl_.features_ =
@@ -9644,8 +9327,8 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -9679,9 +9362,9 @@
}
::google::protobuf::Metadata OneofOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[18]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[18]);
}
// ===================================================================
@@ -9690,24 +9373,8 @@
using HasBits = decltype(std::declval<EnumOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(EnumOptions, _impl_._has_bits_);
- static void set_has_allow_alias(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_deprecated_legacy_json_field_conflicts(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static const ::google::protobuf::FeatureSet& features(const EnumOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::FeatureSet& EnumOptions::_Internal::features(const EnumOptions* msg) {
- return *msg->_impl_.features_;
-}
EnumOptions::EnumOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -9774,12 +9441,15 @@
const ::google::protobuf::MessageLite::ClassData*
EnumOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- EnumOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(EnumOptions, _impl_._cached_size_),
+ false,
+ },
+ &EnumOptions::MergeImpl,
+ &EnumOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -9903,8 +9573,7 @@
// optional .google.protobuf.FeatureSet features = 7;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 7, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 7, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -9971,7 +9640,7 @@
}
-void EnumOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void EnumOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<EnumOptions*>(&to_msg);
auto& from = static_cast<const EnumOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -9992,7 +9661,6 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.allow_alias_ = from._impl_.allow_alias_;
@@ -10003,8 +9671,8 @@
if (cached_has_bits & 0x00000008u) {
_this->_impl_.deprecated_legacy_json_field_conflicts_ = from._impl_.deprecated_legacy_json_field_conflicts_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -10043,9 +9711,9 @@
}
::google::protobuf::Metadata EnumOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[19]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[19]);
}
// ===================================================================
@@ -10054,21 +9722,8 @@
using HasBits = decltype(std::declval<EnumValueOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(EnumValueOptions, _impl_._has_bits_);
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static const ::google::protobuf::FeatureSet& features(const EnumValueOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_debug_redact(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
};
-const ::google::protobuf::FeatureSet& EnumValueOptions::_Internal::features(const EnumValueOptions* msg) {
- return *msg->_impl_.features_;
-}
EnumValueOptions::EnumValueOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -10135,12 +9790,15 @@
const ::google::protobuf::MessageLite::ClassData*
EnumValueOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- EnumValueOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(EnumValueOptions, _impl_._cached_size_),
+ false,
+ },
+ &EnumValueOptions::MergeImpl,
+ &EnumValueOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -10247,8 +9905,7 @@
// optional .google.protobuf.FeatureSet features = 2;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 2, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 2, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// optional bool debug_redact = 3 [default = false];
@@ -10317,7 +9974,7 @@
}
-void EnumValueOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void EnumValueOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<EnumValueOptions*>(&to_msg);
auto& from = static_cast<const EnumValueOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -10338,7 +9995,6 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.deprecated_ = from._impl_.deprecated_;
@@ -10346,8 +10002,8 @@
if (cached_has_bits & 0x00000004u) {
_this->_impl_.debug_redact_ = from._impl_.debug_redact_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -10386,9 +10042,9 @@
}
::google::protobuf::Metadata EnumValueOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[20]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[20]);
}
// ===================================================================
@@ -10397,18 +10053,8 @@
using HasBits = decltype(std::declval<ServiceOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(ServiceOptions, _impl_._has_bits_);
- static const ::google::protobuf::FeatureSet& features(const ServiceOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
-const ::google::protobuf::FeatureSet& ServiceOptions::_Internal::features(const ServiceOptions* msg) {
- return *msg->_impl_.features_;
-}
ServiceOptions::ServiceOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -10469,12 +10115,15 @@
const ::google::protobuf::MessageLite::ClassData*
ServiceOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- ServiceOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(ServiceOptions, _impl_._cached_size_),
+ false,
+ },
+ &ServiceOptions::MergeImpl,
+ &ServiceOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -10571,8 +10220,7 @@
// optional .google.protobuf.FeatureSet features = 34;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 34, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 34, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -10629,7 +10277,7 @@
}
-void ServiceOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void ServiceOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<ServiceOptions*>(&to_msg);
auto& from = static_cast<const ServiceOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -10650,13 +10298,12 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.deprecated_ = from._impl_.deprecated_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -10695,9 +10342,9 @@
}
::google::protobuf::Metadata ServiceOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[21]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[21]);
}
// ===================================================================
@@ -10706,21 +10353,8 @@
using HasBits = decltype(std::declval<MethodOptions>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(MethodOptions, _impl_._has_bits_);
- static void set_has_deprecated(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_idempotency_level(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static const ::google::protobuf::FeatureSet& features(const MethodOptions* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::FeatureSet& MethodOptions::_Internal::features(const MethodOptions* msg) {
- return *msg->_impl_.features_;
-}
MethodOptions::MethodOptions(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -10787,12 +10421,15 @@
const ::google::protobuf::MessageLite::ClassData*
MethodOptions::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- MethodOptions::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(MethodOptions, _impl_._cached_size_),
+ false,
+ },
+ &MethodOptions::MergeImpl,
+ &MethodOptions::kDescriptorMethods,
};
return &_data_;
}
@@ -10910,8 +10547,7 @@
// optional .google.protobuf.FeatureSet features = 35;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 35, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 35, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
@@ -10974,7 +10610,7 @@
}
-void MethodOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void MethodOptions::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<MethodOptions*>(&to_msg);
auto& from = static_cast<const MethodOptions&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -10995,7 +10631,6 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.deprecated_ = from._impl_.deprecated_;
@@ -11003,8 +10638,8 @@
if (cached_has_bits & 0x00000004u) {
_this->_impl_.idempotency_level_ = from._impl_.idempotency_level_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -11043,9 +10678,9 @@
}
::google::protobuf::Metadata MethodOptions::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[22]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[22]);
}
// ===================================================================
@@ -11054,12 +10689,6 @@
using HasBits = decltype(std::declval<UninterpretedOption_NamePart>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(UninterpretedOption_NamePart, _impl_._has_bits_);
- static void set_has_name_part(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_is_extension(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
static bool MissingRequiredFields(const HasBits& has_bits) {
return ((has_bits[0] & 0x00000003) ^ 0x00000003) != 0;
}
@@ -11113,12 +10742,15 @@
const ::google::protobuf::MessageLite::ClassData*
UninterpretedOption_NamePart::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- UninterpretedOption_NamePart::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(UninterpretedOption_NamePart, _impl_._cached_size_),
+ false,
+ },
+ &UninterpretedOption_NamePart::MergeImpl,
+ &UninterpretedOption_NamePart::kDescriptorMethods,
};
return &_data_;
}
@@ -11244,7 +10876,7 @@
}
-void UninterpretedOption_NamePart::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void UninterpretedOption_NamePart::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<UninterpretedOption_NamePart*>(&to_msg);
auto& from = static_cast<const UninterpretedOption_NamePart&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UninterpretedOption.NamePart)
@@ -11260,8 +10892,8 @@
if (cached_has_bits & 0x00000002u) {
_this->_impl_.is_extension_ = from._impl_.is_extension_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -11290,9 +10922,9 @@
}
::google::protobuf::Metadata UninterpretedOption_NamePart::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[23]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[23]);
}
// ===================================================================
@@ -11301,24 +10933,6 @@
using HasBits = decltype(std::declval<UninterpretedOption>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(UninterpretedOption, _impl_._has_bits_);
- static void set_has_identifier_value(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_positive_int_value(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_negative_int_value(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_double_value(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
- static void set_has_string_value(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_aggregate_value(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
};
UninterpretedOption::UninterpretedOption(::google::protobuf::Arena* arena)
@@ -11388,12 +11002,15 @@
const ::google::protobuf::MessageLite::ClassData*
UninterpretedOption::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- UninterpretedOption::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(UninterpretedOption, _impl_._cached_size_),
+ false,
+ },
+ &UninterpretedOption::MergeImpl,
+ &UninterpretedOption::kDescriptorMethods,
};
return &_data_;
}
@@ -11630,7 +11247,7 @@
}
-void UninterpretedOption::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void UninterpretedOption::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<UninterpretedOption*>(&to_msg);
auto& from = static_cast<const UninterpretedOption&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UninterpretedOption)
@@ -11660,8 +11277,8 @@
if (cached_has_bits & 0x00000020u) {
_this->_impl_.double_value_ = from._impl_.double_value_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -11697,9 +11314,9 @@
}
::google::protobuf::Metadata UninterpretedOption::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[24]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[24]);
}
// ===================================================================
@@ -11708,24 +11325,6 @@
using HasBits = decltype(std::declval<FeatureSet>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_._has_bits_);
- static void set_has_field_presence(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_enum_type(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_repeated_field_encoding(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_utf8_validation(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
- static void set_has_message_encoding(HasBits* has_bits) {
- (*has_bits)[0] |= 16u;
- }
- static void set_has_json_format(HasBits* has_bits) {
- (*has_bits)[0] |= 32u;
- }
};
FeatureSet::FeatureSet(::google::protobuf::Arena* arena)
@@ -11787,12 +11386,15 @@
const ::google::protobuf::MessageLite::ClassData*
FeatureSet::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FeatureSet::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_._cached_size_),
+ false,
+ },
+ &FeatureSet::MergeImpl,
+ &FeatureSet::kDescriptorMethods,
};
return &_data_;
}
@@ -11849,8 +11451,8 @@
{::_pbi::TcParser::FastEr0S1,
{24, 2, 2, PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.repeated_field_encoding_)}},
// optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
- {::_pbi::TcParser::FastEr0S1,
- {32, 3, 2, PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.utf8_validation_)}},
+ {::_pbi::TcParser::FastEvS1,
+ {32, 3, 3, PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.utf8_validation_)}},
// optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
{::_pbi::TcParser::FastEr0S1,
{40, 4, 2, PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.message_encoding_)}},
@@ -11872,7 +11474,7 @@
(0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
// optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
{PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.utf8_validation_), _Internal::kHasBitsOffset + 3, 3,
- (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
+ (0 | ::_fl::kFcOptional | ::_fl::kEnum)},
// optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
{PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.message_encoding_), _Internal::kHasBitsOffset + 4, 4,
(0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
@@ -11883,7 +11485,7 @@
{0, 4},
{0, 3},
{0, 3},
- {0, 3},
+ {::_pbi::FieldAuxEnumData{}, ::google::protobuf::FeatureSet_Utf8Validation_internal_data_},
{0, 3},
{0, 3},
}}, {{
@@ -12005,7 +11607,7 @@
}
-void FeatureSet::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FeatureSet::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FeatureSet*>(&to_msg);
auto& from = static_cast<const FeatureSet&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FeatureSet)
@@ -12033,8 +11635,8 @@
if (cached_has_bits & 0x00000020u) {
_this->_impl_.json_format_ = from._impl_.json_format_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -12067,9 +11669,9 @@
}
::google::protobuf::Metadata FeatureSet::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[25]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[25]);
}
// ===================================================================
@@ -12078,18 +11680,8 @@
using HasBits = decltype(std::declval<FeatureSetDefaults_FeatureSetEditionDefault>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FeatureSetDefaults_FeatureSetEditionDefault, _impl_._has_bits_);
- static void set_has_edition(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static const ::google::protobuf::FeatureSet& features(const FeatureSetDefaults_FeatureSetEditionDefault* msg);
- static void set_has_features(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::_Internal::features(const FeatureSetDefaults_FeatureSetEditionDefault* msg) {
- return *msg->_impl_.features_;
-}
FeatureSetDefaults_FeatureSetEditionDefault::FeatureSetDefaults_FeatureSetEditionDefault(::google::protobuf::Arena* arena)
: ::google::protobuf::Message(arena) {
SharedCtor(arena);
@@ -12145,12 +11737,15 @@
const ::google::protobuf::MessageLite::ClassData*
FeatureSetDefaults_FeatureSetEditionDefault::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FeatureSetDefaults_FeatureSetEditionDefault, _impl_._cached_size_),
+ false,
+ },
+ &FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl,
+ &FeatureSetDefaults_FeatureSetEditionDefault::kDescriptorMethods,
};
return &_data_;
}
@@ -12228,8 +11823,7 @@
// optional .google.protobuf.FeatureSet features = 2;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 2, _Internal::features(this),
- _Internal::features(this).GetCachedSize(), target, stream);
+ 2, *_impl_.features_, _impl_.features_->GetCachedSize(), target, stream);
}
// optional .google.protobuf.Edition edition = 3;
@@ -12275,7 +11869,7 @@
}
-void FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FeatureSetDefaults_FeatureSetEditionDefault*>(&to_msg);
auto& from = static_cast<const FeatureSetDefaults_FeatureSetEditionDefault&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -12294,13 +11888,12 @@
} else {
_this->_impl_.features_->MergeFrom(*from._impl_.features_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (cached_has_bits & 0x00000002u) {
_this->_impl_.edition_ = from._impl_.edition_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -12331,9 +11924,9 @@
}
::google::protobuf::Metadata FeatureSetDefaults_FeatureSetEditionDefault::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[26]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[26]);
}
// ===================================================================
@@ -12342,12 +11935,6 @@
using HasBits = decltype(std::declval<FeatureSetDefaults>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(FeatureSetDefaults, _impl_._has_bits_);
- static void set_has_minimum_edition(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_maximum_edition(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
FeatureSetDefaults::FeatureSetDefaults(::google::protobuf::Arena* arena)
@@ -12408,12 +11995,15 @@
const ::google::protobuf::MessageLite::ClassData*
FeatureSetDefaults::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FeatureSetDefaults::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FeatureSetDefaults, _impl_._cached_size_),
+ false,
+ },
+ &FeatureSetDefaults::MergeImpl,
+ &FeatureSetDefaults::kDescriptorMethods,
};
return &_data_;
}
@@ -12557,7 +12147,7 @@
}
-void FeatureSetDefaults::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FeatureSetDefaults::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FeatureSetDefaults*>(&to_msg);
auto& from = static_cast<const FeatureSetDefaults&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FeatureSetDefaults)
@@ -12575,8 +12165,8 @@
if (cached_has_bits & 0x00000002u) {
_this->_impl_.maximum_edition_ = from._impl_.maximum_edition_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -12607,9 +12197,9 @@
}
::google::protobuf::Metadata FeatureSetDefaults::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[27]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[27]);
}
// ===================================================================
@@ -12618,12 +12208,6 @@
using HasBits = decltype(std::declval<SourceCodeInfo_Location>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(SourceCodeInfo_Location, _impl_._has_bits_);
- static void set_has_leading_comments(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_trailing_comments(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
};
SourceCodeInfo_Location::SourceCodeInfo_Location(::google::protobuf::Arena* arena)
@@ -12685,12 +12269,15 @@
const ::google::protobuf::MessageLite::ClassData*
SourceCodeInfo_Location::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- SourceCodeInfo_Location::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(SourceCodeInfo_Location, _impl_._cached_size_),
+ false,
+ },
+ &SourceCodeInfo_Location::MergeImpl,
+ &SourceCodeInfo_Location::kDescriptorMethods,
};
return &_data_;
}
@@ -12906,7 +12493,7 @@
}
-void SourceCodeInfo_Location::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void SourceCodeInfo_Location::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<SourceCodeInfo_Location*>(&to_msg);
auto& from = static_cast<const SourceCodeInfo_Location&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.SourceCodeInfo.Location)
@@ -12926,6 +12513,7 @@
_this->_internal_set_trailing_comments(from._internal_trailing_comments());
}
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -12954,9 +12542,9 @@
}
::google::protobuf::Metadata SourceCodeInfo_Location::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[28]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[28]);
}
// ===================================================================
@@ -13008,12 +12596,15 @@
const ::google::protobuf::MessageLite::ClassData*
SourceCodeInfo::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- SourceCodeInfo::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(SourceCodeInfo, _impl_._cached_size_),
+ false,
+ },
+ &SourceCodeInfo::MergeImpl,
+ &SourceCodeInfo::kDescriptorMethods,
};
return &_data_;
}
@@ -13109,7 +12700,7 @@
}
-void SourceCodeInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void SourceCodeInfo::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<SourceCodeInfo*>(&to_msg);
auto& from = static_cast<const SourceCodeInfo&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.SourceCodeInfo)
@@ -13140,9 +12731,9 @@
}
::google::protobuf::Metadata SourceCodeInfo::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[29]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[29]);
}
// ===================================================================
@@ -13151,18 +12742,6 @@
using HasBits = decltype(std::declval<GeneratedCodeInfo_Annotation>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(GeneratedCodeInfo_Annotation, _impl_._has_bits_);
- static void set_has_source_file(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
- static void set_has_begin(HasBits* has_bits) {
- (*has_bits)[0] |= 2u;
- }
- static void set_has_end(HasBits* has_bits) {
- (*has_bits)[0] |= 4u;
- }
- static void set_has_semantic(HasBits* has_bits) {
- (*has_bits)[0] |= 8u;
- }
};
GeneratedCodeInfo_Annotation::GeneratedCodeInfo_Annotation(::google::protobuf::Arena* arena)
@@ -13228,12 +12807,15 @@
const ::google::protobuf::MessageLite::ClassData*
GeneratedCodeInfo_Annotation::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- GeneratedCodeInfo_Annotation::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(GeneratedCodeInfo_Annotation, _impl_._cached_size_),
+ false,
+ },
+ &GeneratedCodeInfo_Annotation::MergeImpl,
+ &GeneratedCodeInfo_Annotation::kDescriptorMethods,
};
return &_data_;
}
@@ -13434,7 +13016,7 @@
}
-void GeneratedCodeInfo_Annotation::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void GeneratedCodeInfo_Annotation::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<GeneratedCodeInfo_Annotation*>(&to_msg);
auto& from = static_cast<const GeneratedCodeInfo_Annotation&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.GeneratedCodeInfo.Annotation)
@@ -13457,8 +13039,8 @@
if (cached_has_bits & 0x00000008u) {
_this->_impl_.semantic_ = from._impl_.semantic_;
}
- _this->_impl_._has_bits_[0] |= cached_has_bits;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -13490,9 +13072,9 @@
}
::google::protobuf::Metadata GeneratedCodeInfo_Annotation::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[30]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[30]);
}
// ===================================================================
@@ -13544,12 +13126,15 @@
const ::google::protobuf::MessageLite::ClassData*
GeneratedCodeInfo::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- GeneratedCodeInfo::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(GeneratedCodeInfo, _impl_._cached_size_),
+ false,
+ },
+ &GeneratedCodeInfo::MergeImpl,
+ &GeneratedCodeInfo::kDescriptorMethods,
};
return &_data_;
}
@@ -13645,7 +13230,7 @@
}
-void GeneratedCodeInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void GeneratedCodeInfo::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<GeneratedCodeInfo*>(&to_msg);
auto& from = static_cast<const GeneratedCodeInfo&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.GeneratedCodeInfo)
@@ -13676,9 +13261,9 @@
}
::google::protobuf::Metadata GeneratedCodeInfo::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter, &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[31]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fdescriptor_2eproto[31]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
diff --git a/src/google/protobuf/descriptor.pb.h b/src/google/protobuf/descriptor.pb.h
index 433f705..9409875 100644
--- a/src/google/protobuf/descriptor.pb.h
+++ b/src/google/protobuf/descriptor.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -548,15 +542,15 @@
}
enum FeatureSet_Utf8Validation : int {
FeatureSet_Utf8Validation_UTF8_VALIDATION_UNKNOWN = 0,
- FeatureSet_Utf8Validation_NONE = 1,
FeatureSet_Utf8Validation_VERIFY = 2,
+ FeatureSet_Utf8Validation_NONE = 3,
};
PROTOBUF_EXPORT bool FeatureSet_Utf8Validation_IsValid(int value);
PROTOBUF_EXPORT extern const uint32_t FeatureSet_Utf8Validation_internal_data_[];
constexpr FeatureSet_Utf8Validation FeatureSet_Utf8Validation_Utf8Validation_MIN = static_cast<FeatureSet_Utf8Validation>(0);
-constexpr FeatureSet_Utf8Validation FeatureSet_Utf8Validation_Utf8Validation_MAX = static_cast<FeatureSet_Utf8Validation>(2);
-constexpr int FeatureSet_Utf8Validation_Utf8Validation_ARRAYSIZE = 2 + 1;
+constexpr FeatureSet_Utf8Validation FeatureSet_Utf8Validation_Utf8Validation_MAX = static_cast<FeatureSet_Utf8Validation>(3);
+constexpr int FeatureSet_Utf8Validation_Utf8Validation_ARRAYSIZE = 3 + 1;
PROTOBUF_EXPORT const ::google::protobuf::EnumDescriptor*
FeatureSet_Utf8Validation_descriptor();
template <typename T>
@@ -569,7 +563,7 @@
template <>
inline const std::string& FeatureSet_Utf8Validation_Name(FeatureSet_Utf8Validation value) {
return ::google::protobuf::internal::NameOfDenseEnum<FeatureSet_Utf8Validation_descriptor,
- 0, 2>(
+ 0, 3>(
static_cast<int>(value));
}
inline bool FeatureSet_Utf8Validation_Parse(absl::string_view name, FeatureSet_Utf8Validation* value) {
@@ -676,13 +670,13 @@
EDITION_99997_TEST_ONLY = 99997,
EDITION_99998_TEST_ONLY = 99998,
EDITION_99999_TEST_ONLY = 99999,
+ EDITION_MAX = 2147483647,
};
PROTOBUF_EXPORT bool Edition_IsValid(int value);
PROTOBUF_EXPORT extern const uint32_t Edition_internal_data_[];
constexpr Edition Edition_MIN = static_cast<Edition>(0);
-constexpr Edition Edition_MAX = static_cast<Edition>(99999);
-constexpr int Edition_ARRAYSIZE = 99999 + 1;
+constexpr Edition Edition_MAX = static_cast<Edition>(2147483647);
PROTOBUF_EXPORT const ::google::protobuf::EnumDescriptor*
Edition_descriptor();
template <typename T>
@@ -702,21 +696,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT UninterpretedOption_NamePart final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UninterpretedOption.NamePart) */ {
+class PROTOBUF_EXPORT UninterpretedOption_NamePart final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.UninterpretedOption.NamePart) */ {
public:
inline UninterpretedOption_NamePart() : UninterpretedOption_NamePart(nullptr) {}
~UninterpretedOption_NamePart() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR UninterpretedOption_NamePart(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR UninterpretedOption_NamePart(
+ ::google::protobuf::internal::ConstantInitialized);
- inline UninterpretedOption_NamePart(const UninterpretedOption_NamePart& from)
- : UninterpretedOption_NamePart(nullptr, from) {}
- UninterpretedOption_NamePart(UninterpretedOption_NamePart&& from) noexcept
- : UninterpretedOption_NamePart() {
- *this = ::std::move(from);
- }
-
+ inline UninterpretedOption_NamePart(const UninterpretedOption_NamePart& from) : UninterpretedOption_NamePart(nullptr, from) {}
+ inline UninterpretedOption_NamePart(UninterpretedOption_NamePart&& from) noexcept
+ : UninterpretedOption_NamePart(nullptr, std::move(from)) {}
inline UninterpretedOption_NamePart& operator=(const UninterpretedOption_NamePart& from) {
CopyFrom(from);
return *this;
@@ -724,9 +715,9 @@
inline UninterpretedOption_NamePart& operator=(UninterpretedOption_NamePart&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -758,22 +749,17 @@
}
static inline const UninterpretedOption_NamePart* internal_default_instance() {
return reinterpret_cast<const UninterpretedOption_NamePart*>(
- &_UninterpretedOption_NamePart_default_instance_);
+ &_UninterpretedOption_NamePart_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 23;
-
- friend void swap(UninterpretedOption_NamePart& a, UninterpretedOption_NamePart& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 23;
+ friend void swap(UninterpretedOption_NamePart& a, UninterpretedOption_NamePart& b) { a.Swap(&b); }
inline void Swap(UninterpretedOption_NamePart* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -793,11 +779,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const UninterpretedOption_NamePart& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const UninterpretedOption_NamePart& from) {
- UninterpretedOption_NamePart::MergeImpl(*this, from);
- }
+ void MergeFrom(const UninterpretedOption_NamePart& from) { UninterpretedOption_NamePart::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -805,31 +793,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(UninterpretedOption_NamePart* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.UninterpretedOption.NamePart";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.UninterpretedOption.NamePart"; }
+
+ protected:
explicit UninterpretedOption_NamePart(::google::protobuf::Arena* arena);
UninterpretedOption_NamePart(::google::protobuf::Arena* arena, const UninterpretedOption_NamePart& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ UninterpretedOption_NamePart(::google::protobuf::Arena* arena, UninterpretedOption_NamePart&& from) noexcept
+ : UninterpretedOption_NamePart(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNamePartFieldNumber = 1,
kIsExtensionFieldNumber = 2,
@@ -865,7 +855,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -877,14 +866,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_part_;
@@ -893,23 +881,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT SourceCodeInfo_Location final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.SourceCodeInfo.Location) */ {
+class PROTOBUF_EXPORT SourceCodeInfo_Location final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.SourceCodeInfo.Location) */ {
public:
inline SourceCodeInfo_Location() : SourceCodeInfo_Location(nullptr) {}
~SourceCodeInfo_Location() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR SourceCodeInfo_Location(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR SourceCodeInfo_Location(
+ ::google::protobuf::internal::ConstantInitialized);
- inline SourceCodeInfo_Location(const SourceCodeInfo_Location& from)
- : SourceCodeInfo_Location(nullptr, from) {}
- SourceCodeInfo_Location(SourceCodeInfo_Location&& from) noexcept
- : SourceCodeInfo_Location() {
- *this = ::std::move(from);
- }
-
+ inline SourceCodeInfo_Location(const SourceCodeInfo_Location& from) : SourceCodeInfo_Location(nullptr, from) {}
+ inline SourceCodeInfo_Location(SourceCodeInfo_Location&& from) noexcept
+ : SourceCodeInfo_Location(nullptr, std::move(from)) {}
inline SourceCodeInfo_Location& operator=(const SourceCodeInfo_Location& from) {
CopyFrom(from);
return *this;
@@ -917,9 +903,9 @@
inline SourceCodeInfo_Location& operator=(SourceCodeInfo_Location&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -951,22 +937,17 @@
}
static inline const SourceCodeInfo_Location* internal_default_instance() {
return reinterpret_cast<const SourceCodeInfo_Location*>(
- &_SourceCodeInfo_Location_default_instance_);
+ &_SourceCodeInfo_Location_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 28;
-
- friend void swap(SourceCodeInfo_Location& a, SourceCodeInfo_Location& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 28;
+ friend void swap(SourceCodeInfo_Location& a, SourceCodeInfo_Location& b) { a.Swap(&b); }
inline void Swap(SourceCodeInfo_Location* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -986,11 +967,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const SourceCodeInfo_Location& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const SourceCodeInfo_Location& from) {
- SourceCodeInfo_Location::MergeImpl(*this, from);
- }
+ void MergeFrom(const SourceCodeInfo_Location& from) { SourceCodeInfo_Location::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -998,31 +981,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(SourceCodeInfo_Location* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.SourceCodeInfo.Location";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.SourceCodeInfo.Location"; }
+
+ protected:
explicit SourceCodeInfo_Location(::google::protobuf::Arena* arena);
SourceCodeInfo_Location(::google::protobuf::Arena* arena, const SourceCodeInfo_Location& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ SourceCodeInfo_Location(::google::protobuf::Arena* arena, SourceCodeInfo_Location&& from) noexcept
+ : SourceCodeInfo_Location(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kPathFieldNumber = 1,
kSpanFieldNumber = 2,
@@ -1131,7 +1116,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 5, 0,
@@ -1143,14 +1127,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedField<::int32_t> path_;
@@ -1164,23 +1147,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT GeneratedCodeInfo_Annotation final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.GeneratedCodeInfo.Annotation) */ {
+class PROTOBUF_EXPORT GeneratedCodeInfo_Annotation final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.GeneratedCodeInfo.Annotation) */ {
public:
inline GeneratedCodeInfo_Annotation() : GeneratedCodeInfo_Annotation(nullptr) {}
~GeneratedCodeInfo_Annotation() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR GeneratedCodeInfo_Annotation(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR GeneratedCodeInfo_Annotation(
+ ::google::protobuf::internal::ConstantInitialized);
- inline GeneratedCodeInfo_Annotation(const GeneratedCodeInfo_Annotation& from)
- : GeneratedCodeInfo_Annotation(nullptr, from) {}
- GeneratedCodeInfo_Annotation(GeneratedCodeInfo_Annotation&& from) noexcept
- : GeneratedCodeInfo_Annotation() {
- *this = ::std::move(from);
- }
-
+ inline GeneratedCodeInfo_Annotation(const GeneratedCodeInfo_Annotation& from) : GeneratedCodeInfo_Annotation(nullptr, from) {}
+ inline GeneratedCodeInfo_Annotation(GeneratedCodeInfo_Annotation&& from) noexcept
+ : GeneratedCodeInfo_Annotation(nullptr, std::move(from)) {}
inline GeneratedCodeInfo_Annotation& operator=(const GeneratedCodeInfo_Annotation& from) {
CopyFrom(from);
return *this;
@@ -1188,9 +1169,9 @@
inline GeneratedCodeInfo_Annotation& operator=(GeneratedCodeInfo_Annotation&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1222,22 +1203,17 @@
}
static inline const GeneratedCodeInfo_Annotation* internal_default_instance() {
return reinterpret_cast<const GeneratedCodeInfo_Annotation*>(
- &_GeneratedCodeInfo_Annotation_default_instance_);
+ &_GeneratedCodeInfo_Annotation_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 30;
-
- friend void swap(GeneratedCodeInfo_Annotation& a, GeneratedCodeInfo_Annotation& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 30;
+ friend void swap(GeneratedCodeInfo_Annotation& a, GeneratedCodeInfo_Annotation& b) { a.Swap(&b); }
inline void Swap(GeneratedCodeInfo_Annotation* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1257,11 +1233,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const GeneratedCodeInfo_Annotation& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const GeneratedCodeInfo_Annotation& from) {
- GeneratedCodeInfo_Annotation::MergeImpl(*this, from);
- }
+ void MergeFrom(const GeneratedCodeInfo_Annotation& from) { GeneratedCodeInfo_Annotation::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1269,29 +1247,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(GeneratedCodeInfo_Annotation* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.GeneratedCodeInfo.Annotation";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.GeneratedCodeInfo.Annotation"; }
+
+ protected:
explicit GeneratedCodeInfo_Annotation(::google::protobuf::Arena* arena);
GeneratedCodeInfo_Annotation(::google::protobuf::Arena* arena, const GeneratedCodeInfo_Annotation& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ GeneratedCodeInfo_Annotation(::google::protobuf::Arena* arena, GeneratedCodeInfo_Annotation&& from) noexcept
+ : GeneratedCodeInfo_Annotation(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Semantic = GeneratedCodeInfo_Annotation_Semantic;
static constexpr Semantic NONE = GeneratedCodeInfo_Annotation_Semantic_NONE;
static constexpr Semantic SET = GeneratedCodeInfo_Annotation_Semantic_SET;
@@ -1314,7 +1294,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kPathFieldNumber = 1,
kSourceFileFieldNumber = 2,
@@ -1393,7 +1372,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.GeneratedCodeInfo.Annotation)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 5, 1,
@@ -1405,14 +1383,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedField<::int32_t> path_;
@@ -1425,23 +1402,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FieldOptions_EditionDefault final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldOptions.EditionDefault) */ {
+class PROTOBUF_EXPORT FieldOptions_EditionDefault final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FieldOptions.EditionDefault) */ {
public:
inline FieldOptions_EditionDefault() : FieldOptions_EditionDefault(nullptr) {}
~FieldOptions_EditionDefault() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FieldOptions_EditionDefault(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FieldOptions_EditionDefault(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FieldOptions_EditionDefault(const FieldOptions_EditionDefault& from)
- : FieldOptions_EditionDefault(nullptr, from) {}
- FieldOptions_EditionDefault(FieldOptions_EditionDefault&& from) noexcept
- : FieldOptions_EditionDefault() {
- *this = ::std::move(from);
- }
-
+ inline FieldOptions_EditionDefault(const FieldOptions_EditionDefault& from) : FieldOptions_EditionDefault(nullptr, from) {}
+ inline FieldOptions_EditionDefault(FieldOptions_EditionDefault&& from) noexcept
+ : FieldOptions_EditionDefault(nullptr, std::move(from)) {}
inline FieldOptions_EditionDefault& operator=(const FieldOptions_EditionDefault& from) {
CopyFrom(from);
return *this;
@@ -1449,9 +1424,9 @@
inline FieldOptions_EditionDefault& operator=(FieldOptions_EditionDefault&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1483,22 +1458,17 @@
}
static inline const FieldOptions_EditionDefault* internal_default_instance() {
return reinterpret_cast<const FieldOptions_EditionDefault*>(
- &_FieldOptions_EditionDefault_default_instance_);
+ &_FieldOptions_EditionDefault_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 16;
-
- friend void swap(FieldOptions_EditionDefault& a, FieldOptions_EditionDefault& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 16;
+ friend void swap(FieldOptions_EditionDefault& a, FieldOptions_EditionDefault& b) { a.Swap(&b); }
inline void Swap(FieldOptions_EditionDefault* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1518,11 +1488,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FieldOptions_EditionDefault& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FieldOptions_EditionDefault& from) {
- FieldOptions_EditionDefault::MergeImpl(*this, from);
- }
+ void MergeFrom(const FieldOptions_EditionDefault& from) { FieldOptions_EditionDefault::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1530,31 +1502,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FieldOptions_EditionDefault* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FieldOptions.EditionDefault";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FieldOptions.EditionDefault"; }
+
+ protected:
explicit FieldOptions_EditionDefault(::google::protobuf::Arena* arena);
FieldOptions_EditionDefault(::google::protobuf::Arena* arena, const FieldOptions_EditionDefault& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FieldOptions_EditionDefault(::google::protobuf::Arena* arena, FieldOptions_EditionDefault&& from) noexcept
+ : FieldOptions_EditionDefault(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 2,
kEditionFieldNumber = 3,
@@ -1590,7 +1564,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions.EditionDefault)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 1,
@@ -1602,14 +1575,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr value_;
@@ -1618,23 +1590,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FeatureSet final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FeatureSet) */ {
+class PROTOBUF_EXPORT FeatureSet final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FeatureSet) */ {
public:
inline FeatureSet() : FeatureSet(nullptr) {}
~FeatureSet() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FeatureSet(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FeatureSet(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FeatureSet(const FeatureSet& from)
- : FeatureSet(nullptr, from) {}
- FeatureSet(FeatureSet&& from) noexcept
- : FeatureSet() {
- *this = ::std::move(from);
- }
-
+ inline FeatureSet(const FeatureSet& from) : FeatureSet(nullptr, from) {}
+ inline FeatureSet(FeatureSet&& from) noexcept
+ : FeatureSet(nullptr, std::move(from)) {}
inline FeatureSet& operator=(const FeatureSet& from) {
CopyFrom(from);
return *this;
@@ -1642,9 +1612,9 @@
inline FeatureSet& operator=(FeatureSet&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1676,22 +1646,17 @@
}
static inline const FeatureSet* internal_default_instance() {
return reinterpret_cast<const FeatureSet*>(
- &_FeatureSet_default_instance_);
+ &_FeatureSet_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 25;
-
- friend void swap(FeatureSet& a, FeatureSet& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 25;
+ friend void swap(FeatureSet& a, FeatureSet& b) { a.Swap(&b); }
inline void Swap(FeatureSet* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1711,11 +1676,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FeatureSet& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FeatureSet& from) {
- FeatureSet::MergeImpl(*this, from);
- }
+ void MergeFrom(const FeatureSet& from) { FeatureSet::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1723,29 +1690,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FeatureSet* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FeatureSet";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FeatureSet"; }
+
+ protected:
explicit FeatureSet(::google::protobuf::Arena* arena);
FeatureSet(::google::protobuf::Arena* arena, const FeatureSet& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FeatureSet(::google::protobuf::Arena* arena, FeatureSet&& from) noexcept
+ : FeatureSet(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using FieldPresence = FeatureSet_FieldPresence;
static constexpr FieldPresence FIELD_PRESENCE_UNKNOWN = FeatureSet_FieldPresence_FIELD_PRESENCE_UNKNOWN;
static constexpr FieldPresence EXPLICIT = FeatureSet_FieldPresence_EXPLICIT;
@@ -1767,7 +1736,6 @@
static inline bool FieldPresence_Parse(absl::string_view name, FieldPresence* value) {
return FeatureSet_FieldPresence_Parse(name, value);
}
-
using EnumType = FeatureSet_EnumType;
static constexpr EnumType ENUM_TYPE_UNKNOWN = FeatureSet_EnumType_ENUM_TYPE_UNKNOWN;
static constexpr EnumType OPEN = FeatureSet_EnumType_OPEN;
@@ -1788,7 +1756,6 @@
static inline bool EnumType_Parse(absl::string_view name, EnumType* value) {
return FeatureSet_EnumType_Parse(name, value);
}
-
using RepeatedFieldEncoding = FeatureSet_RepeatedFieldEncoding;
static constexpr RepeatedFieldEncoding REPEATED_FIELD_ENCODING_UNKNOWN = FeatureSet_RepeatedFieldEncoding_REPEATED_FIELD_ENCODING_UNKNOWN;
static constexpr RepeatedFieldEncoding PACKED = FeatureSet_RepeatedFieldEncoding_PACKED;
@@ -1809,11 +1776,10 @@
static inline bool RepeatedFieldEncoding_Parse(absl::string_view name, RepeatedFieldEncoding* value) {
return FeatureSet_RepeatedFieldEncoding_Parse(name, value);
}
-
using Utf8Validation = FeatureSet_Utf8Validation;
static constexpr Utf8Validation UTF8_VALIDATION_UNKNOWN = FeatureSet_Utf8Validation_UTF8_VALIDATION_UNKNOWN;
- static constexpr Utf8Validation NONE = FeatureSet_Utf8Validation_NONE;
static constexpr Utf8Validation VERIFY = FeatureSet_Utf8Validation_VERIFY;
+ static constexpr Utf8Validation NONE = FeatureSet_Utf8Validation_NONE;
static inline bool Utf8Validation_IsValid(int value) {
return FeatureSet_Utf8Validation_IsValid(value);
}
@@ -1830,7 +1796,6 @@
static inline bool Utf8Validation_Parse(absl::string_view name, Utf8Validation* value) {
return FeatureSet_Utf8Validation_Parse(name, value);
}
-
using MessageEncoding = FeatureSet_MessageEncoding;
static constexpr MessageEncoding MESSAGE_ENCODING_UNKNOWN = FeatureSet_MessageEncoding_MESSAGE_ENCODING_UNKNOWN;
static constexpr MessageEncoding LENGTH_PREFIXED = FeatureSet_MessageEncoding_LENGTH_PREFIXED;
@@ -1851,7 +1816,6 @@
static inline bool MessageEncoding_Parse(absl::string_view name, MessageEncoding* value) {
return FeatureSet_MessageEncoding_Parse(name, value);
}
-
using JsonFormat = FeatureSet_JsonFormat;
static constexpr JsonFormat JSON_FORMAT_UNKNOWN = FeatureSet_JsonFormat_JSON_FORMAT_UNKNOWN;
static constexpr JsonFormat ALLOW = FeatureSet_JsonFormat_ALLOW;
@@ -1874,7 +1838,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kFieldPresenceFieldNumber = 1,
kEnumTypeFieldNumber = 2,
@@ -2129,7 +2092,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FeatureSet)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 6, 6,
@@ -2141,16 +2103,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
int field_presence_;
@@ -2163,23 +2123,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT ExtensionRangeOptions_Declaration final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ExtensionRangeOptions.Declaration) */ {
+class PROTOBUF_EXPORT ExtensionRangeOptions_Declaration final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.ExtensionRangeOptions.Declaration) */ {
public:
inline ExtensionRangeOptions_Declaration() : ExtensionRangeOptions_Declaration(nullptr) {}
~ExtensionRangeOptions_Declaration() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR ExtensionRangeOptions_Declaration(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR ExtensionRangeOptions_Declaration(
+ ::google::protobuf::internal::ConstantInitialized);
- inline ExtensionRangeOptions_Declaration(const ExtensionRangeOptions_Declaration& from)
- : ExtensionRangeOptions_Declaration(nullptr, from) {}
- ExtensionRangeOptions_Declaration(ExtensionRangeOptions_Declaration&& from) noexcept
- : ExtensionRangeOptions_Declaration() {
- *this = ::std::move(from);
- }
-
+ inline ExtensionRangeOptions_Declaration(const ExtensionRangeOptions_Declaration& from) : ExtensionRangeOptions_Declaration(nullptr, from) {}
+ inline ExtensionRangeOptions_Declaration(ExtensionRangeOptions_Declaration&& from) noexcept
+ : ExtensionRangeOptions_Declaration(nullptr, std::move(from)) {}
inline ExtensionRangeOptions_Declaration& operator=(const ExtensionRangeOptions_Declaration& from) {
CopyFrom(from);
return *this;
@@ -2187,9 +2145,9 @@
inline ExtensionRangeOptions_Declaration& operator=(ExtensionRangeOptions_Declaration&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -2221,22 +2179,17 @@
}
static inline const ExtensionRangeOptions_Declaration* internal_default_instance() {
return reinterpret_cast<const ExtensionRangeOptions_Declaration*>(
- &_ExtensionRangeOptions_Declaration_default_instance_);
+ &_ExtensionRangeOptions_Declaration_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 5;
-
- friend void swap(ExtensionRangeOptions_Declaration& a, ExtensionRangeOptions_Declaration& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 5;
+ friend void swap(ExtensionRangeOptions_Declaration& a, ExtensionRangeOptions_Declaration& b) { a.Swap(&b); }
inline void Swap(ExtensionRangeOptions_Declaration* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -2256,11 +2209,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const ExtensionRangeOptions_Declaration& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const ExtensionRangeOptions_Declaration& from) {
- ExtensionRangeOptions_Declaration::MergeImpl(*this, from);
- }
+ void MergeFrom(const ExtensionRangeOptions_Declaration& from) { ExtensionRangeOptions_Declaration::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -2268,31 +2223,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(ExtensionRangeOptions_Declaration* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.ExtensionRangeOptions.Declaration";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.ExtensionRangeOptions.Declaration"; }
+
+ protected:
explicit ExtensionRangeOptions_Declaration(::google::protobuf::Arena* arena);
ExtensionRangeOptions_Declaration(::google::protobuf::Arena* arena, const ExtensionRangeOptions_Declaration& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ ExtensionRangeOptions_Declaration(::google::protobuf::Arena* arena, ExtensionRangeOptions_Declaration&& from) noexcept
+ : ExtensionRangeOptions_Declaration(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kFullNameFieldNumber = 2,
kTypeFieldNumber = 3,
@@ -2370,7 +2327,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.ExtensionRangeOptions.Declaration)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 5, 0,
@@ -2382,14 +2338,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr full_name_;
@@ -2401,23 +2356,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT EnumDescriptorProto_EnumReservedRange final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumDescriptorProto.EnumReservedRange) */ {
+class PROTOBUF_EXPORT EnumDescriptorProto_EnumReservedRange final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.EnumDescriptorProto.EnumReservedRange) */ {
public:
inline EnumDescriptorProto_EnumReservedRange() : EnumDescriptorProto_EnumReservedRange(nullptr) {}
~EnumDescriptorProto_EnumReservedRange() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR EnumDescriptorProto_EnumReservedRange(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR EnumDescriptorProto_EnumReservedRange(
+ ::google::protobuf::internal::ConstantInitialized);
- inline EnumDescriptorProto_EnumReservedRange(const EnumDescriptorProto_EnumReservedRange& from)
- : EnumDescriptorProto_EnumReservedRange(nullptr, from) {}
- EnumDescriptorProto_EnumReservedRange(EnumDescriptorProto_EnumReservedRange&& from) noexcept
- : EnumDescriptorProto_EnumReservedRange() {
- *this = ::std::move(from);
- }
-
+ inline EnumDescriptorProto_EnumReservedRange(const EnumDescriptorProto_EnumReservedRange& from) : EnumDescriptorProto_EnumReservedRange(nullptr, from) {}
+ inline EnumDescriptorProto_EnumReservedRange(EnumDescriptorProto_EnumReservedRange&& from) noexcept
+ : EnumDescriptorProto_EnumReservedRange(nullptr, std::move(from)) {}
inline EnumDescriptorProto_EnumReservedRange& operator=(const EnumDescriptorProto_EnumReservedRange& from) {
CopyFrom(from);
return *this;
@@ -2425,9 +2378,9 @@
inline EnumDescriptorProto_EnumReservedRange& operator=(EnumDescriptorProto_EnumReservedRange&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -2459,22 +2412,17 @@
}
static inline const EnumDescriptorProto_EnumReservedRange* internal_default_instance() {
return reinterpret_cast<const EnumDescriptorProto_EnumReservedRange*>(
- &_EnumDescriptorProto_EnumReservedRange_default_instance_);
+ &_EnumDescriptorProto_EnumReservedRange_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 9;
-
- friend void swap(EnumDescriptorProto_EnumReservedRange& a, EnumDescriptorProto_EnumReservedRange& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 9;
+ friend void swap(EnumDescriptorProto_EnumReservedRange& a, EnumDescriptorProto_EnumReservedRange& b) { a.Swap(&b); }
inline void Swap(EnumDescriptorProto_EnumReservedRange* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -2494,11 +2442,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const EnumDescriptorProto_EnumReservedRange& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const EnumDescriptorProto_EnumReservedRange& from) {
- EnumDescriptorProto_EnumReservedRange::MergeImpl(*this, from);
- }
+ void MergeFrom(const EnumDescriptorProto_EnumReservedRange& from) { EnumDescriptorProto_EnumReservedRange::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -2506,31 +2456,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(EnumDescriptorProto_EnumReservedRange* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.EnumDescriptorProto.EnumReservedRange";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.EnumDescriptorProto.EnumReservedRange"; }
+
+ protected:
explicit EnumDescriptorProto_EnumReservedRange(::google::protobuf::Arena* arena);
EnumDescriptorProto_EnumReservedRange(::google::protobuf::Arena* arena, const EnumDescriptorProto_EnumReservedRange& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ EnumDescriptorProto_EnumReservedRange(::google::protobuf::Arena* arena, EnumDescriptorProto_EnumReservedRange&& from) noexcept
+ : EnumDescriptorProto_EnumReservedRange(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kStartFieldNumber = 1,
kEndFieldNumber = 2,
@@ -2560,7 +2512,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto.EnumReservedRange)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -2572,14 +2523,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::int32_t start_;
@@ -2588,23 +2538,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT DescriptorProto_ReservedRange final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto.ReservedRange) */ {
+class PROTOBUF_EXPORT DescriptorProto_ReservedRange final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto.ReservedRange) */ {
public:
inline DescriptorProto_ReservedRange() : DescriptorProto_ReservedRange(nullptr) {}
~DescriptorProto_ReservedRange() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR DescriptorProto_ReservedRange(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR DescriptorProto_ReservedRange(
+ ::google::protobuf::internal::ConstantInitialized);
- inline DescriptorProto_ReservedRange(const DescriptorProto_ReservedRange& from)
- : DescriptorProto_ReservedRange(nullptr, from) {}
- DescriptorProto_ReservedRange(DescriptorProto_ReservedRange&& from) noexcept
- : DescriptorProto_ReservedRange() {
- *this = ::std::move(from);
- }
-
+ inline DescriptorProto_ReservedRange(const DescriptorProto_ReservedRange& from) : DescriptorProto_ReservedRange(nullptr, from) {}
+ inline DescriptorProto_ReservedRange(DescriptorProto_ReservedRange&& from) noexcept
+ : DescriptorProto_ReservedRange(nullptr, std::move(from)) {}
inline DescriptorProto_ReservedRange& operator=(const DescriptorProto_ReservedRange& from) {
CopyFrom(from);
return *this;
@@ -2612,9 +2560,9 @@
inline DescriptorProto_ReservedRange& operator=(DescriptorProto_ReservedRange&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -2646,22 +2594,17 @@
}
static inline const DescriptorProto_ReservedRange* internal_default_instance() {
return reinterpret_cast<const DescriptorProto_ReservedRange*>(
- &_DescriptorProto_ReservedRange_default_instance_);
+ &_DescriptorProto_ReservedRange_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 3;
-
- friend void swap(DescriptorProto_ReservedRange& a, DescriptorProto_ReservedRange& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 3;
+ friend void swap(DescriptorProto_ReservedRange& a, DescriptorProto_ReservedRange& b) { a.Swap(&b); }
inline void Swap(DescriptorProto_ReservedRange* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -2681,11 +2624,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const DescriptorProto_ReservedRange& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const DescriptorProto_ReservedRange& from) {
- DescriptorProto_ReservedRange::MergeImpl(*this, from);
- }
+ void MergeFrom(const DescriptorProto_ReservedRange& from) { DescriptorProto_ReservedRange::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -2693,31 +2638,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(DescriptorProto_ReservedRange* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.DescriptorProto.ReservedRange";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.DescriptorProto.ReservedRange"; }
+
+ protected:
explicit DescriptorProto_ReservedRange(::google::protobuf::Arena* arena);
DescriptorProto_ReservedRange(::google::protobuf::Arena* arena, const DescriptorProto_ReservedRange& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ DescriptorProto_ReservedRange(::google::protobuf::Arena* arena, DescriptorProto_ReservedRange&& from) noexcept
+ : DescriptorProto_ReservedRange(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kStartFieldNumber = 1,
kEndFieldNumber = 2,
@@ -2747,7 +2694,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ReservedRange)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -2759,14 +2705,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::int32_t start_;
@@ -2775,23 +2720,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT UninterpretedOption final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UninterpretedOption) */ {
+class PROTOBUF_EXPORT UninterpretedOption final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.UninterpretedOption) */ {
public:
inline UninterpretedOption() : UninterpretedOption(nullptr) {}
~UninterpretedOption() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR UninterpretedOption(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR UninterpretedOption(
+ ::google::protobuf::internal::ConstantInitialized);
- inline UninterpretedOption(const UninterpretedOption& from)
- : UninterpretedOption(nullptr, from) {}
- UninterpretedOption(UninterpretedOption&& from) noexcept
- : UninterpretedOption() {
- *this = ::std::move(from);
- }
-
+ inline UninterpretedOption(const UninterpretedOption& from) : UninterpretedOption(nullptr, from) {}
+ inline UninterpretedOption(UninterpretedOption&& from) noexcept
+ : UninterpretedOption(nullptr, std::move(from)) {}
inline UninterpretedOption& operator=(const UninterpretedOption& from) {
CopyFrom(from);
return *this;
@@ -2799,9 +2742,9 @@
inline UninterpretedOption& operator=(UninterpretedOption&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -2833,22 +2776,17 @@
}
static inline const UninterpretedOption* internal_default_instance() {
return reinterpret_cast<const UninterpretedOption*>(
- &_UninterpretedOption_default_instance_);
+ &_UninterpretedOption_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 24;
-
- friend void swap(UninterpretedOption& a, UninterpretedOption& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 24;
+ friend void swap(UninterpretedOption& a, UninterpretedOption& b) { a.Swap(&b); }
inline void Swap(UninterpretedOption* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -2868,11 +2806,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const UninterpretedOption& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const UninterpretedOption& from) {
- UninterpretedOption::MergeImpl(*this, from);
- }
+ void MergeFrom(const UninterpretedOption& from) { UninterpretedOption::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -2880,33 +2820,34 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(UninterpretedOption* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.UninterpretedOption";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.UninterpretedOption"; }
+
+ protected:
explicit UninterpretedOption(::google::protobuf::Arena* arena);
UninterpretedOption(::google::protobuf::Arena* arena, const UninterpretedOption& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ UninterpretedOption(::google::protobuf::Arena* arena, UninterpretedOption&& from) noexcept
+ : UninterpretedOption(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using NamePart = UninterpretedOption_NamePart;
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 2,
kIdentifierValueFieldNumber = 3,
@@ -2924,16 +2865,15 @@
public:
void clear_name() ;
::google::protobuf::UninterpretedOption_NamePart* mutable_name(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart >*
- mutable_name();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption_NamePart>* mutable_name();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption_NamePart>& _internal_name() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption_NamePart>* _internal_mutable_name();
public:
const ::google::protobuf::UninterpretedOption_NamePart& name(int index) const;
::google::protobuf::UninterpretedOption_NamePart* add_name();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart >&
- name() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption_NamePart>& name() const;
// optional string identifier_value = 3;
bool has_identifier_value() const;
void clear_identifier_value() ;
@@ -3021,7 +2961,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 7, 1,
@@ -3033,14 +2972,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart > name_;
@@ -3054,23 +2992,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT SourceCodeInfo final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.SourceCodeInfo) */ {
+class PROTOBUF_EXPORT SourceCodeInfo final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.SourceCodeInfo) */ {
public:
inline SourceCodeInfo() : SourceCodeInfo(nullptr) {}
~SourceCodeInfo() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR SourceCodeInfo(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR SourceCodeInfo(
+ ::google::protobuf::internal::ConstantInitialized);
- inline SourceCodeInfo(const SourceCodeInfo& from)
- : SourceCodeInfo(nullptr, from) {}
- SourceCodeInfo(SourceCodeInfo&& from) noexcept
- : SourceCodeInfo() {
- *this = ::std::move(from);
- }
-
+ inline SourceCodeInfo(const SourceCodeInfo& from) : SourceCodeInfo(nullptr, from) {}
+ inline SourceCodeInfo(SourceCodeInfo&& from) noexcept
+ : SourceCodeInfo(nullptr, std::move(from)) {}
inline SourceCodeInfo& operator=(const SourceCodeInfo& from) {
CopyFrom(from);
return *this;
@@ -3078,9 +3014,9 @@
inline SourceCodeInfo& operator=(SourceCodeInfo&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -3112,22 +3048,17 @@
}
static inline const SourceCodeInfo* internal_default_instance() {
return reinterpret_cast<const SourceCodeInfo*>(
- &_SourceCodeInfo_default_instance_);
+ &_SourceCodeInfo_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 29;
-
- friend void swap(SourceCodeInfo& a, SourceCodeInfo& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 29;
+ friend void swap(SourceCodeInfo& a, SourceCodeInfo& b) { a.Swap(&b); }
inline void Swap(SourceCodeInfo* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -3147,11 +3078,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const SourceCodeInfo& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const SourceCodeInfo& from) {
- SourceCodeInfo::MergeImpl(*this, from);
- }
+ void MergeFrom(const SourceCodeInfo& from) { SourceCodeInfo::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -3159,33 +3092,34 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(SourceCodeInfo* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.SourceCodeInfo";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.SourceCodeInfo"; }
+
+ protected:
explicit SourceCodeInfo(::google::protobuf::Arena* arena);
SourceCodeInfo(::google::protobuf::Arena* arena, const SourceCodeInfo& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ SourceCodeInfo(::google::protobuf::Arena* arena, SourceCodeInfo&& from) noexcept
+ : SourceCodeInfo(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Location = SourceCodeInfo_Location;
// accessors -------------------------------------------------------
-
enum : int {
kLocationFieldNumber = 1,
};
@@ -3197,20 +3131,18 @@
public:
void clear_location() ;
::google::protobuf::SourceCodeInfo_Location* mutable_location(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location >*
- mutable_location();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::SourceCodeInfo_Location>* mutable_location();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::SourceCodeInfo_Location>& _internal_location() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::SourceCodeInfo_Location>* _internal_mutable_location();
public:
const ::google::protobuf::SourceCodeInfo_Location& location(int index) const;
::google::protobuf::SourceCodeInfo_Location* add_location();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location >&
- location() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::SourceCodeInfo_Location>& location() const;
// @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 1,
@@ -3222,37 +3154,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location > location_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT GeneratedCodeInfo final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.GeneratedCodeInfo) */ {
+class PROTOBUF_EXPORT GeneratedCodeInfo final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.GeneratedCodeInfo) */ {
public:
inline GeneratedCodeInfo() : GeneratedCodeInfo(nullptr) {}
~GeneratedCodeInfo() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR GeneratedCodeInfo(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR GeneratedCodeInfo(
+ ::google::protobuf::internal::ConstantInitialized);
- inline GeneratedCodeInfo(const GeneratedCodeInfo& from)
- : GeneratedCodeInfo(nullptr, from) {}
- GeneratedCodeInfo(GeneratedCodeInfo&& from) noexcept
- : GeneratedCodeInfo() {
- *this = ::std::move(from);
- }
-
+ inline GeneratedCodeInfo(const GeneratedCodeInfo& from) : GeneratedCodeInfo(nullptr, from) {}
+ inline GeneratedCodeInfo(GeneratedCodeInfo&& from) noexcept
+ : GeneratedCodeInfo(nullptr, std::move(from)) {}
inline GeneratedCodeInfo& operator=(const GeneratedCodeInfo& from) {
CopyFrom(from);
return *this;
@@ -3260,9 +3189,9 @@
inline GeneratedCodeInfo& operator=(GeneratedCodeInfo&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -3294,22 +3223,17 @@
}
static inline const GeneratedCodeInfo* internal_default_instance() {
return reinterpret_cast<const GeneratedCodeInfo*>(
- &_GeneratedCodeInfo_default_instance_);
+ &_GeneratedCodeInfo_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 31;
-
- friend void swap(GeneratedCodeInfo& a, GeneratedCodeInfo& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 31;
+ friend void swap(GeneratedCodeInfo& a, GeneratedCodeInfo& b) { a.Swap(&b); }
inline void Swap(GeneratedCodeInfo* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -3329,11 +3253,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const GeneratedCodeInfo& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const GeneratedCodeInfo& from) {
- GeneratedCodeInfo::MergeImpl(*this, from);
- }
+ void MergeFrom(const GeneratedCodeInfo& from) { GeneratedCodeInfo::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -3341,33 +3267,34 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(GeneratedCodeInfo* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.GeneratedCodeInfo";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.GeneratedCodeInfo"; }
+
+ protected:
explicit GeneratedCodeInfo(::google::protobuf::Arena* arena);
GeneratedCodeInfo(::google::protobuf::Arena* arena, const GeneratedCodeInfo& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ GeneratedCodeInfo(::google::protobuf::Arena* arena, GeneratedCodeInfo&& from) noexcept
+ : GeneratedCodeInfo(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Annotation = GeneratedCodeInfo_Annotation;
// accessors -------------------------------------------------------
-
enum : int {
kAnnotationFieldNumber = 1,
};
@@ -3379,20 +3306,18 @@
public:
void clear_annotation() ;
::google::protobuf::GeneratedCodeInfo_Annotation* mutable_annotation(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::GeneratedCodeInfo_Annotation >*
- mutable_annotation();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::GeneratedCodeInfo_Annotation>* mutable_annotation();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::GeneratedCodeInfo_Annotation>& _internal_annotation() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::GeneratedCodeInfo_Annotation>* _internal_mutable_annotation();
public:
const ::google::protobuf::GeneratedCodeInfo_Annotation& annotation(int index) const;
::google::protobuf::GeneratedCodeInfo_Annotation* add_annotation();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::GeneratedCodeInfo_Annotation >&
- annotation() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::GeneratedCodeInfo_Annotation>& annotation() const;
// @@protoc_insertion_point(class_scope:google.protobuf.GeneratedCodeInfo)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 1,
@@ -3404,37 +3329,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::GeneratedCodeInfo_Annotation > annotation_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FeatureSetDefaults_FeatureSetEditionDefault final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault) */ {
+class PROTOBUF_EXPORT FeatureSetDefaults_FeatureSetEditionDefault final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault) */ {
public:
inline FeatureSetDefaults_FeatureSetEditionDefault() : FeatureSetDefaults_FeatureSetEditionDefault(nullptr) {}
~FeatureSetDefaults_FeatureSetEditionDefault() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FeatureSetDefaults_FeatureSetEditionDefault(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FeatureSetDefaults_FeatureSetEditionDefault(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FeatureSetDefaults_FeatureSetEditionDefault(const FeatureSetDefaults_FeatureSetEditionDefault& from)
- : FeatureSetDefaults_FeatureSetEditionDefault(nullptr, from) {}
- FeatureSetDefaults_FeatureSetEditionDefault(FeatureSetDefaults_FeatureSetEditionDefault&& from) noexcept
- : FeatureSetDefaults_FeatureSetEditionDefault() {
- *this = ::std::move(from);
- }
-
+ inline FeatureSetDefaults_FeatureSetEditionDefault(const FeatureSetDefaults_FeatureSetEditionDefault& from) : FeatureSetDefaults_FeatureSetEditionDefault(nullptr, from) {}
+ inline FeatureSetDefaults_FeatureSetEditionDefault(FeatureSetDefaults_FeatureSetEditionDefault&& from) noexcept
+ : FeatureSetDefaults_FeatureSetEditionDefault(nullptr, std::move(from)) {}
inline FeatureSetDefaults_FeatureSetEditionDefault& operator=(const FeatureSetDefaults_FeatureSetEditionDefault& from) {
CopyFrom(from);
return *this;
@@ -3442,9 +3364,9 @@
inline FeatureSetDefaults_FeatureSetEditionDefault& operator=(FeatureSetDefaults_FeatureSetEditionDefault&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -3476,22 +3398,17 @@
}
static inline const FeatureSetDefaults_FeatureSetEditionDefault* internal_default_instance() {
return reinterpret_cast<const FeatureSetDefaults_FeatureSetEditionDefault*>(
- &_FeatureSetDefaults_FeatureSetEditionDefault_default_instance_);
+ &_FeatureSetDefaults_FeatureSetEditionDefault_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 26;
-
- friend void swap(FeatureSetDefaults_FeatureSetEditionDefault& a, FeatureSetDefaults_FeatureSetEditionDefault& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 26;
+ friend void swap(FeatureSetDefaults_FeatureSetEditionDefault& a, FeatureSetDefaults_FeatureSetEditionDefault& b) { a.Swap(&b); }
inline void Swap(FeatureSetDefaults_FeatureSetEditionDefault* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -3511,11 +3428,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FeatureSetDefaults_FeatureSetEditionDefault& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FeatureSetDefaults_FeatureSetEditionDefault& from) {
- FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl(*this, from);
- }
+ void MergeFrom(const FeatureSetDefaults_FeatureSetEditionDefault& from) { FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -3523,31 +3442,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FeatureSetDefaults_FeatureSetEditionDefault* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault"; }
+
+ protected:
explicit FeatureSetDefaults_FeatureSetEditionDefault(::google::protobuf::Arena* arena);
FeatureSetDefaults_FeatureSetEditionDefault(::google::protobuf::Arena* arena, const FeatureSetDefaults_FeatureSetEditionDefault& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FeatureSetDefaults_FeatureSetEditionDefault(::google::protobuf::Arena* arena, FeatureSetDefaults_FeatureSetEditionDefault&& from) noexcept
+ : FeatureSetDefaults_FeatureSetEditionDefault(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kFeaturesFieldNumber = 2,
kEditionFieldNumber = 3,
@@ -3581,7 +3502,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 2,
@@ -3593,14 +3513,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::FeatureSet* features_;
@@ -3609,23 +3528,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT ServiceOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ServiceOptions) */ {
+class PROTOBUF_EXPORT ServiceOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.ServiceOptions) */ {
public:
inline ServiceOptions() : ServiceOptions(nullptr) {}
~ServiceOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR ServiceOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR ServiceOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline ServiceOptions(const ServiceOptions& from)
- : ServiceOptions(nullptr, from) {}
- ServiceOptions(ServiceOptions&& from) noexcept
- : ServiceOptions() {
- *this = ::std::move(from);
- }
-
+ inline ServiceOptions(const ServiceOptions& from) : ServiceOptions(nullptr, from) {}
+ inline ServiceOptions(ServiceOptions&& from) noexcept
+ : ServiceOptions(nullptr, std::move(from)) {}
inline ServiceOptions& operator=(const ServiceOptions& from) {
CopyFrom(from);
return *this;
@@ -3633,9 +3550,9 @@
inline ServiceOptions& operator=(ServiceOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -3667,22 +3584,17 @@
}
static inline const ServiceOptions* internal_default_instance() {
return reinterpret_cast<const ServiceOptions*>(
- &_ServiceOptions_default_instance_);
+ &_ServiceOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 21;
-
- friend void swap(ServiceOptions& a, ServiceOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 21;
+ friend void swap(ServiceOptions& a, ServiceOptions& b) { a.Swap(&b); }
inline void Swap(ServiceOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -3702,11 +3614,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const ServiceOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const ServiceOptions& from) {
- ServiceOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const ServiceOptions& from) { ServiceOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -3714,31 +3628,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(ServiceOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.ServiceOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.ServiceOptions"; }
+
+ protected:
explicit ServiceOptions(::google::protobuf::Arena* arena);
ServiceOptions(::google::protobuf::Arena* arena, const ServiceOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ ServiceOptions(::google::protobuf::Arena* arena, ServiceOptions&& from) noexcept
+ : ServiceOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kFeaturesFieldNumber = 34,
@@ -3752,16 +3668,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 34;
bool has_features() const;
void clear_features() ;
@@ -3968,7 +3883,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 3, 2,
@@ -3980,16 +3894,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -3999,23 +3911,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT OneofOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.OneofOptions) */ {
+class PROTOBUF_EXPORT OneofOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.OneofOptions) */ {
public:
inline OneofOptions() : OneofOptions(nullptr) {}
~OneofOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR OneofOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR OneofOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline OneofOptions(const OneofOptions& from)
- : OneofOptions(nullptr, from) {}
- OneofOptions(OneofOptions&& from) noexcept
- : OneofOptions() {
- *this = ::std::move(from);
- }
-
+ inline OneofOptions(const OneofOptions& from) : OneofOptions(nullptr, from) {}
+ inline OneofOptions(OneofOptions&& from) noexcept
+ : OneofOptions(nullptr, std::move(from)) {}
inline OneofOptions& operator=(const OneofOptions& from) {
CopyFrom(from);
return *this;
@@ -4023,9 +3933,9 @@
inline OneofOptions& operator=(OneofOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -4057,22 +3967,17 @@
}
static inline const OneofOptions* internal_default_instance() {
return reinterpret_cast<const OneofOptions*>(
- &_OneofOptions_default_instance_);
+ &_OneofOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 18;
-
- friend void swap(OneofOptions& a, OneofOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 18;
+ friend void swap(OneofOptions& a, OneofOptions& b) { a.Swap(&b); }
inline void Swap(OneofOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -4092,11 +3997,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const OneofOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const OneofOptions& from) {
- OneofOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const OneofOptions& from) { OneofOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -4104,31 +4011,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(OneofOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.OneofOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.OneofOptions"; }
+
+ protected:
explicit OneofOptions(::google::protobuf::Arena* arena);
OneofOptions(::google::protobuf::Arena* arena, const OneofOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ OneofOptions(::google::protobuf::Arena* arena, OneofOptions&& from) noexcept
+ : OneofOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kFeaturesFieldNumber = 1,
@@ -4141,16 +4050,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 1;
bool has_features() const;
void clear_features() ;
@@ -4346,7 +4254,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.OneofOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 2, 2,
@@ -4358,16 +4265,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -4376,23 +4281,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT MethodOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.MethodOptions) */ {
+class PROTOBUF_EXPORT MethodOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.MethodOptions) */ {
public:
inline MethodOptions() : MethodOptions(nullptr) {}
~MethodOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR MethodOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR MethodOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline MethodOptions(const MethodOptions& from)
- : MethodOptions(nullptr, from) {}
- MethodOptions(MethodOptions&& from) noexcept
- : MethodOptions() {
- *this = ::std::move(from);
- }
-
+ inline MethodOptions(const MethodOptions& from) : MethodOptions(nullptr, from) {}
+ inline MethodOptions(MethodOptions&& from) noexcept
+ : MethodOptions(nullptr, std::move(from)) {}
inline MethodOptions& operator=(const MethodOptions& from) {
CopyFrom(from);
return *this;
@@ -4400,9 +4303,9 @@
inline MethodOptions& operator=(MethodOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -4434,22 +4337,17 @@
}
static inline const MethodOptions* internal_default_instance() {
return reinterpret_cast<const MethodOptions*>(
- &_MethodOptions_default_instance_);
+ &_MethodOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 22;
-
- friend void swap(MethodOptions& a, MethodOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 22;
+ friend void swap(MethodOptions& a, MethodOptions& b) { a.Swap(&b); }
inline void Swap(MethodOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -4469,11 +4367,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const MethodOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const MethodOptions& from) {
- MethodOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const MethodOptions& from) { MethodOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -4481,29 +4381,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(MethodOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.MethodOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.MethodOptions"; }
+
+ protected:
explicit MethodOptions(::google::protobuf::Arena* arena);
MethodOptions(::google::protobuf::Arena* arena, const MethodOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ MethodOptions(::google::protobuf::Arena* arena, MethodOptions&& from) noexcept
+ : MethodOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using IdempotencyLevel = MethodOptions_IdempotencyLevel;
static constexpr IdempotencyLevel IDEMPOTENCY_UNKNOWN = MethodOptions_IdempotencyLevel_IDEMPOTENCY_UNKNOWN;
static constexpr IdempotencyLevel NO_SIDE_EFFECTS = MethodOptions_IdempotencyLevel_NO_SIDE_EFFECTS;
@@ -4526,7 +4428,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kFeaturesFieldNumber = 35,
@@ -4541,16 +4442,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 35;
bool has_features() const;
void clear_features() ;
@@ -4768,7 +4668,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 4, 3,
@@ -4780,16 +4679,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -4800,23 +4697,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT MessageOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.MessageOptions) */ {
+class PROTOBUF_EXPORT MessageOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.MessageOptions) */ {
public:
inline MessageOptions() : MessageOptions(nullptr) {}
~MessageOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR MessageOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR MessageOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline MessageOptions(const MessageOptions& from)
- : MessageOptions(nullptr, from) {}
- MessageOptions(MessageOptions&& from) noexcept
- : MessageOptions() {
- *this = ::std::move(from);
- }
-
+ inline MessageOptions(const MessageOptions& from) : MessageOptions(nullptr, from) {}
+ inline MessageOptions(MessageOptions&& from) noexcept
+ : MessageOptions(nullptr, std::move(from)) {}
inline MessageOptions& operator=(const MessageOptions& from) {
CopyFrom(from);
return *this;
@@ -4824,9 +4719,9 @@
inline MessageOptions& operator=(MessageOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -4858,22 +4753,17 @@
}
static inline const MessageOptions* internal_default_instance() {
return reinterpret_cast<const MessageOptions*>(
- &_MessageOptions_default_instance_);
+ &_MessageOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 15;
-
- friend void swap(MessageOptions& a, MessageOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 15;
+ friend void swap(MessageOptions& a, MessageOptions& b) { a.Swap(&b); }
inline void Swap(MessageOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -4893,11 +4783,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const MessageOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const MessageOptions& from) {
- MessageOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const MessageOptions& from) { MessageOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -4905,31 +4797,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(MessageOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.MessageOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.MessageOptions"; }
+
+ protected:
explicit MessageOptions(::google::protobuf::Arena* arena);
MessageOptions(::google::protobuf::Arena* arena, const MessageOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ MessageOptions(::google::protobuf::Arena* arena, MessageOptions&& from) noexcept
+ : MessageOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kFeaturesFieldNumber = 12,
@@ -4947,16 +4841,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 12;
bool has_features() const;
void clear_features() ;
@@ -5207,7 +5100,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 7, 2,
@@ -5219,16 +5111,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -5242,23 +5132,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FileOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FileOptions) */ {
+class PROTOBUF_EXPORT FileOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FileOptions) */ {
public:
inline FileOptions() : FileOptions(nullptr) {}
~FileOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FileOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FileOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FileOptions(const FileOptions& from)
- : FileOptions(nullptr, from) {}
- FileOptions(FileOptions&& from) noexcept
- : FileOptions() {
- *this = ::std::move(from);
- }
-
+ inline FileOptions(const FileOptions& from) : FileOptions(nullptr, from) {}
+ inline FileOptions(FileOptions&& from) noexcept
+ : FileOptions(nullptr, std::move(from)) {}
inline FileOptions& operator=(const FileOptions& from) {
CopyFrom(from);
return *this;
@@ -5266,9 +5154,9 @@
inline FileOptions& operator=(FileOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -5300,22 +5188,17 @@
}
static inline const FileOptions* internal_default_instance() {
return reinterpret_cast<const FileOptions*>(
- &_FileOptions_default_instance_);
+ &_FileOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 14;
-
- friend void swap(FileOptions& a, FileOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 14;
+ friend void swap(FileOptions& a, FileOptions& b) { a.Swap(&b); }
inline void Swap(FileOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -5335,11 +5218,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FileOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FileOptions& from) {
- FileOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const FileOptions& from) { FileOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -5347,29 +5232,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FileOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FileOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FileOptions"; }
+
+ protected:
explicit FileOptions(::google::protobuf::Arena* arena);
FileOptions(::google::protobuf::Arena* arena, const FileOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FileOptions(::google::protobuf::Arena* arena, FileOptions&& from) noexcept
+ : FileOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using OptimizeMode = FileOptions_OptimizeMode;
static constexpr OptimizeMode SPEED = FileOptions_OptimizeMode_SPEED;
static constexpr OptimizeMode CODE_SIZE = FileOptions_OptimizeMode_CODE_SIZE;
@@ -5392,7 +5279,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kJavaPackageFieldNumber = 1,
@@ -5412,7 +5298,6 @@
kCcGenericServicesFieldNumber = 16,
kJavaGenericServicesFieldNumber = 17,
kPyGenericServicesFieldNumber = 18,
- kPhpGenericServicesFieldNumber = 42,
kDeprecatedFieldNumber = 23,
kOptimizeForFieldNumber = 9,
kCcEnableArenasFieldNumber = 31,
@@ -5425,16 +5310,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional string java_package = 1;
bool has_java_package() const;
void clear_java_package() ;
@@ -5686,17 +5570,6 @@
void _internal_set_py_generic_services(bool value);
public:
- // optional bool php_generic_services = 42 [default = false];
- bool has_php_generic_services() const;
- void clear_php_generic_services() ;
- bool php_generic_services() const;
- void set_php_generic_services(bool value);
-
- private:
- bool _internal_php_generic_services() const;
- void _internal_set_php_generic_services(bool value);
-
- public:
// optional bool deprecated = 23 [default = false];
bool has_deprecated() const;
void clear_deprecated() ;
@@ -5910,10 +5783,9 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FileOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
- 5, 22, 3,
+ 5, 21, 3,
202, 12>
_table_;
friend class ::google::protobuf::MessageLite;
@@ -5922,16 +5794,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -5952,7 +5822,6 @@
bool cc_generic_services_;
bool java_generic_services_;
bool py_generic_services_;
- bool php_generic_services_;
bool deprecated_;
int optimize_for_;
bool cc_enable_arenas_;
@@ -5960,23 +5829,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FieldOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldOptions) */ {
+class PROTOBUF_EXPORT FieldOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FieldOptions) */ {
public:
inline FieldOptions() : FieldOptions(nullptr) {}
~FieldOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FieldOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FieldOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FieldOptions(const FieldOptions& from)
- : FieldOptions(nullptr, from) {}
- FieldOptions(FieldOptions&& from) noexcept
- : FieldOptions() {
- *this = ::std::move(from);
- }
-
+ inline FieldOptions(const FieldOptions& from) : FieldOptions(nullptr, from) {}
+ inline FieldOptions(FieldOptions&& from) noexcept
+ : FieldOptions(nullptr, std::move(from)) {}
inline FieldOptions& operator=(const FieldOptions& from) {
CopyFrom(from);
return *this;
@@ -5984,9 +5851,9 @@
inline FieldOptions& operator=(FieldOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -6018,22 +5885,17 @@
}
static inline const FieldOptions* internal_default_instance() {
return reinterpret_cast<const FieldOptions*>(
- &_FieldOptions_default_instance_);
+ &_FieldOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 17;
-
- friend void swap(FieldOptions& a, FieldOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 17;
+ friend void swap(FieldOptions& a, FieldOptions& b) { a.Swap(&b); }
inline void Swap(FieldOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -6053,11 +5915,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FieldOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FieldOptions& from) {
- FieldOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const FieldOptions& from) { FieldOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -6065,31 +5929,32 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FieldOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FieldOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FieldOptions"; }
+
+ protected:
explicit FieldOptions(::google::protobuf::Arena* arena);
FieldOptions(::google::protobuf::Arena* arena, const FieldOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FieldOptions(::google::protobuf::Arena* arena, FieldOptions&& from) noexcept
+ : FieldOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using EditionDefault = FieldOptions_EditionDefault;
-
using CType = FieldOptions_CType;
static constexpr CType STRING = FieldOptions_CType_STRING;
static constexpr CType CORD = FieldOptions_CType_CORD;
@@ -6110,7 +5975,6 @@
static inline bool CType_Parse(absl::string_view name, CType* value) {
return FieldOptions_CType_Parse(name, value);
}
-
using JSType = FieldOptions_JSType;
static constexpr JSType JS_NORMAL = FieldOptions_JSType_JS_NORMAL;
static constexpr JSType JS_STRING = FieldOptions_JSType_JS_STRING;
@@ -6131,7 +5995,6 @@
static inline bool JSType_Parse(absl::string_view name, JSType* value) {
return FieldOptions_JSType_Parse(name, value);
}
-
using OptionRetention = FieldOptions_OptionRetention;
static constexpr OptionRetention RETENTION_UNKNOWN = FieldOptions_OptionRetention_RETENTION_UNKNOWN;
static constexpr OptionRetention RETENTION_RUNTIME = FieldOptions_OptionRetention_RETENTION_RUNTIME;
@@ -6152,7 +6015,6 @@
static inline bool OptionRetention_Parse(absl::string_view name, OptionRetention* value) {
return FieldOptions_OptionRetention_Parse(name, value);
}
-
using OptionTargetType = FieldOptions_OptionTargetType;
static constexpr OptionTargetType TARGET_TYPE_UNKNOWN = FieldOptions_OptionTargetType_TARGET_TYPE_UNKNOWN;
static constexpr OptionTargetType TARGET_TYPE_FILE = FieldOptions_OptionTargetType_TARGET_TYPE_FILE;
@@ -6182,7 +6044,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kTargetsFieldNumber = 19,
kEditionDefaultsFieldNumber = 20,
@@ -6225,16 +6086,15 @@
public:
void clear_edition_defaults() ;
::google::protobuf::FieldOptions_EditionDefault* mutable_edition_defaults(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldOptions_EditionDefault >*
- mutable_edition_defaults();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldOptions_EditionDefault>* mutable_edition_defaults();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldOptions_EditionDefault>& _internal_edition_defaults() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FieldOptions_EditionDefault>* _internal_mutable_edition_defaults();
public:
const ::google::protobuf::FieldOptions_EditionDefault& edition_defaults(int index) const;
::google::protobuf::FieldOptions_EditionDefault* add_edition_defaults();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldOptions_EditionDefault >&
- edition_defaults() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldOptions_EditionDefault>& edition_defaults() const;
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
int uninterpreted_option_size() const;
private:
@@ -6243,16 +6103,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 21;
bool has_features() const;
void clear_features() ;
@@ -6547,7 +6406,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
4, 13, 7,
@@ -6559,16 +6417,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedField<int> targets_;
@@ -6588,23 +6444,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FeatureSetDefaults final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FeatureSetDefaults) */ {
+class PROTOBUF_EXPORT FeatureSetDefaults final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FeatureSetDefaults) */ {
public:
inline FeatureSetDefaults() : FeatureSetDefaults(nullptr) {}
~FeatureSetDefaults() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FeatureSetDefaults(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FeatureSetDefaults(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FeatureSetDefaults(const FeatureSetDefaults& from)
- : FeatureSetDefaults(nullptr, from) {}
- FeatureSetDefaults(FeatureSetDefaults&& from) noexcept
- : FeatureSetDefaults() {
- *this = ::std::move(from);
- }
-
+ inline FeatureSetDefaults(const FeatureSetDefaults& from) : FeatureSetDefaults(nullptr, from) {}
+ inline FeatureSetDefaults(FeatureSetDefaults&& from) noexcept
+ : FeatureSetDefaults(nullptr, std::move(from)) {}
inline FeatureSetDefaults& operator=(const FeatureSetDefaults& from) {
CopyFrom(from);
return *this;
@@ -6612,9 +6466,9 @@
inline FeatureSetDefaults& operator=(FeatureSetDefaults&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -6646,22 +6500,17 @@
}
static inline const FeatureSetDefaults* internal_default_instance() {
return reinterpret_cast<const FeatureSetDefaults*>(
- &_FeatureSetDefaults_default_instance_);
+ &_FeatureSetDefaults_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 27;
-
- friend void swap(FeatureSetDefaults& a, FeatureSetDefaults& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 27;
+ friend void swap(FeatureSetDefaults& a, FeatureSetDefaults& b) { a.Swap(&b); }
inline void Swap(FeatureSetDefaults* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -6681,11 +6530,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FeatureSetDefaults& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FeatureSetDefaults& from) {
- FeatureSetDefaults::MergeImpl(*this, from);
- }
+ void MergeFrom(const FeatureSetDefaults& from) { FeatureSetDefaults::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -6693,33 +6544,34 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FeatureSetDefaults* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FeatureSetDefaults";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FeatureSetDefaults"; }
+
+ protected:
explicit FeatureSetDefaults(::google::protobuf::Arena* arena);
FeatureSetDefaults(::google::protobuf::Arena* arena, const FeatureSetDefaults& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FeatureSetDefaults(::google::protobuf::Arena* arena, FeatureSetDefaults&& from) noexcept
+ : FeatureSetDefaults(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using FeatureSetEditionDefault = FeatureSetDefaults_FeatureSetEditionDefault;
// accessors -------------------------------------------------------
-
enum : int {
kDefaultsFieldNumber = 1,
kMinimumEditionFieldNumber = 4,
@@ -6733,16 +6585,15 @@
public:
void clear_defaults() ;
::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault* mutable_defaults(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault >*
- mutable_defaults();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault>* mutable_defaults();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault>& _internal_defaults() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault>* _internal_mutable_defaults();
public:
const ::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault& defaults(int index) const;
::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault* add_defaults();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault >&
- defaults() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault>& defaults() const;
// optional .google.protobuf.Edition minimum_edition = 4;
bool has_minimum_edition() const;
void clear_minimum_edition() ;
@@ -6768,7 +6619,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FeatureSetDefaults)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 3, 3,
@@ -6780,14 +6630,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::FeatureSetDefaults_FeatureSetEditionDefault > defaults_;
@@ -6797,23 +6646,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT ExtensionRangeOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ExtensionRangeOptions) */ {
+class PROTOBUF_EXPORT ExtensionRangeOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.ExtensionRangeOptions) */ {
public:
inline ExtensionRangeOptions() : ExtensionRangeOptions(nullptr) {}
~ExtensionRangeOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR ExtensionRangeOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR ExtensionRangeOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline ExtensionRangeOptions(const ExtensionRangeOptions& from)
- : ExtensionRangeOptions(nullptr, from) {}
- ExtensionRangeOptions(ExtensionRangeOptions&& from) noexcept
- : ExtensionRangeOptions() {
- *this = ::std::move(from);
- }
-
+ inline ExtensionRangeOptions(const ExtensionRangeOptions& from) : ExtensionRangeOptions(nullptr, from) {}
+ inline ExtensionRangeOptions(ExtensionRangeOptions&& from) noexcept
+ : ExtensionRangeOptions(nullptr, std::move(from)) {}
inline ExtensionRangeOptions& operator=(const ExtensionRangeOptions& from) {
CopyFrom(from);
return *this;
@@ -6821,9 +6668,9 @@
inline ExtensionRangeOptions& operator=(ExtensionRangeOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -6855,22 +6702,17 @@
}
static inline const ExtensionRangeOptions* internal_default_instance() {
return reinterpret_cast<const ExtensionRangeOptions*>(
- &_ExtensionRangeOptions_default_instance_);
+ &_ExtensionRangeOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 6;
-
- friend void swap(ExtensionRangeOptions& a, ExtensionRangeOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 6;
+ friend void swap(ExtensionRangeOptions& a, ExtensionRangeOptions& b) { a.Swap(&b); }
inline void Swap(ExtensionRangeOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -6890,11 +6732,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const ExtensionRangeOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const ExtensionRangeOptions& from) {
- ExtensionRangeOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const ExtensionRangeOptions& from) { ExtensionRangeOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -6902,31 +6746,32 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(ExtensionRangeOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.ExtensionRangeOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.ExtensionRangeOptions"; }
+
+ protected:
explicit ExtensionRangeOptions(::google::protobuf::Arena* arena);
ExtensionRangeOptions(::google::protobuf::Arena* arena, const ExtensionRangeOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ ExtensionRangeOptions(::google::protobuf::Arena* arena, ExtensionRangeOptions&& from) noexcept
+ : ExtensionRangeOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Declaration = ExtensionRangeOptions_Declaration;
-
using VerificationState = ExtensionRangeOptions_VerificationState;
static constexpr VerificationState DECLARATION = ExtensionRangeOptions_VerificationState_DECLARATION;
static constexpr VerificationState UNVERIFIED = ExtensionRangeOptions_VerificationState_UNVERIFIED;
@@ -6948,7 +6793,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kDeclarationFieldNumber = 2,
kUninterpretedOptionFieldNumber = 999,
@@ -6963,16 +6807,15 @@
public:
void clear_declaration() ;
::google::protobuf::ExtensionRangeOptions_Declaration* mutable_declaration(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::ExtensionRangeOptions_Declaration >*
- mutable_declaration();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::ExtensionRangeOptions_Declaration>* mutable_declaration();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::ExtensionRangeOptions_Declaration>& _internal_declaration() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::ExtensionRangeOptions_Declaration>* _internal_mutable_declaration();
public:
const ::google::protobuf::ExtensionRangeOptions_Declaration& declaration(int index) const;
::google::protobuf::ExtensionRangeOptions_Declaration* add_declaration();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::ExtensionRangeOptions_Declaration >&
- declaration() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::ExtensionRangeOptions_Declaration>& declaration() const;
// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
int uninterpreted_option_size() const;
private:
@@ -6981,16 +6824,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 50;
bool has_features() const;
void clear_features() ;
@@ -7006,7 +6848,7 @@
::google::protobuf::FeatureSet* _internal_mutable_features();
public:
- // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED];
+ // optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];
bool has_verification() const;
void clear_verification() ;
::google::protobuf::ExtensionRangeOptions_VerificationState verification() const;
@@ -7197,7 +7039,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.ExtensionRangeOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 4, 4,
@@ -7209,16 +7050,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::ExtensionRangeOptions_Declaration > declaration_;
@@ -7229,23 +7068,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT EnumValueOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumValueOptions) */ {
+class PROTOBUF_EXPORT EnumValueOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.EnumValueOptions) */ {
public:
inline EnumValueOptions() : EnumValueOptions(nullptr) {}
~EnumValueOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR EnumValueOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR EnumValueOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline EnumValueOptions(const EnumValueOptions& from)
- : EnumValueOptions(nullptr, from) {}
- EnumValueOptions(EnumValueOptions&& from) noexcept
- : EnumValueOptions() {
- *this = ::std::move(from);
- }
-
+ inline EnumValueOptions(const EnumValueOptions& from) : EnumValueOptions(nullptr, from) {}
+ inline EnumValueOptions(EnumValueOptions&& from) noexcept
+ : EnumValueOptions(nullptr, std::move(from)) {}
inline EnumValueOptions& operator=(const EnumValueOptions& from) {
CopyFrom(from);
return *this;
@@ -7253,9 +7090,9 @@
inline EnumValueOptions& operator=(EnumValueOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -7287,22 +7124,17 @@
}
static inline const EnumValueOptions* internal_default_instance() {
return reinterpret_cast<const EnumValueOptions*>(
- &_EnumValueOptions_default_instance_);
+ &_EnumValueOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 20;
-
- friend void swap(EnumValueOptions& a, EnumValueOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 20;
+ friend void swap(EnumValueOptions& a, EnumValueOptions& b) { a.Swap(&b); }
inline void Swap(EnumValueOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -7322,11 +7154,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const EnumValueOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const EnumValueOptions& from) {
- EnumValueOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const EnumValueOptions& from) { EnumValueOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -7334,31 +7168,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(EnumValueOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.EnumValueOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.EnumValueOptions"; }
+
+ protected:
explicit EnumValueOptions(::google::protobuf::Arena* arena);
EnumValueOptions(::google::protobuf::Arena* arena, const EnumValueOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ EnumValueOptions(::google::protobuf::Arena* arena, EnumValueOptions&& from) noexcept
+ : EnumValueOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kFeaturesFieldNumber = 2,
@@ -7373,16 +7209,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 2;
bool has_features() const;
void clear_features() ;
@@ -7600,7 +7435,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 4, 2,
@@ -7612,16 +7446,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -7632,23 +7464,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT EnumOptions final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumOptions) */ {
+class PROTOBUF_EXPORT EnumOptions final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.EnumOptions) */ {
public:
inline EnumOptions() : EnumOptions(nullptr) {}
~EnumOptions() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR EnumOptions(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR EnumOptions(
+ ::google::protobuf::internal::ConstantInitialized);
- inline EnumOptions(const EnumOptions& from)
- : EnumOptions(nullptr, from) {}
- EnumOptions(EnumOptions&& from) noexcept
- : EnumOptions() {
- *this = ::std::move(from);
- }
-
+ inline EnumOptions(const EnumOptions& from) : EnumOptions(nullptr, from) {}
+ inline EnumOptions(EnumOptions&& from) noexcept
+ : EnumOptions(nullptr, std::move(from)) {}
inline EnumOptions& operator=(const EnumOptions& from) {
CopyFrom(from);
return *this;
@@ -7656,9 +7486,9 @@
inline EnumOptions& operator=(EnumOptions&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -7690,22 +7520,17 @@
}
static inline const EnumOptions* internal_default_instance() {
return reinterpret_cast<const EnumOptions*>(
- &_EnumOptions_default_instance_);
+ &_EnumOptions_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 19;
-
- friend void swap(EnumOptions& a, EnumOptions& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 19;
+ friend void swap(EnumOptions& a, EnumOptions& b) { a.Swap(&b); }
inline void Swap(EnumOptions* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -7725,11 +7550,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const EnumOptions& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const EnumOptions& from) {
- EnumOptions::MergeImpl(*this, from);
- }
+ void MergeFrom(const EnumOptions& from) { EnumOptions::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -7737,31 +7564,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(EnumOptions* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.EnumOptions";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.EnumOptions"; }
+
+ protected:
explicit EnumOptions(::google::protobuf::Arena* arena);
EnumOptions(::google::protobuf::Arena* arena, const EnumOptions& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ EnumOptions(::google::protobuf::Arena* arena, EnumOptions&& from) noexcept
+ : EnumOptions(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kUninterpretedOptionFieldNumber = 999,
kFeaturesFieldNumber = 7,
@@ -7777,16 +7606,15 @@
public:
void clear_uninterpreted_option() ;
::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >*
- mutable_uninterpreted_option();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* mutable_uninterpreted_option();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& _internal_uninterpreted_option() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>* _internal_mutable_uninterpreted_option();
public:
const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const;
::google::protobuf::UninterpretedOption* add_uninterpreted_option();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >&
- uninterpreted_option() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::UninterpretedOption>& uninterpreted_option() const;
// optional .google.protobuf.FeatureSet features = 7;
bool has_features() const;
void clear_features() ;
@@ -8015,7 +7843,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 5, 2,
@@ -8027,16 +7854,14 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ExtensionSet _extensions_;
-
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_;
@@ -8048,23 +7873,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT OneofDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.OneofDescriptorProto) */ {
+class PROTOBUF_EXPORT OneofDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.OneofDescriptorProto) */ {
public:
inline OneofDescriptorProto() : OneofDescriptorProto(nullptr) {}
~OneofDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR OneofDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR OneofDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline OneofDescriptorProto(const OneofDescriptorProto& from)
- : OneofDescriptorProto(nullptr, from) {}
- OneofDescriptorProto(OneofDescriptorProto&& from) noexcept
- : OneofDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline OneofDescriptorProto(const OneofDescriptorProto& from) : OneofDescriptorProto(nullptr, from) {}
+ inline OneofDescriptorProto(OneofDescriptorProto&& from) noexcept
+ : OneofDescriptorProto(nullptr, std::move(from)) {}
inline OneofDescriptorProto& operator=(const OneofDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -8072,9 +7895,9 @@
inline OneofDescriptorProto& operator=(OneofDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -8106,22 +7929,17 @@
}
static inline const OneofDescriptorProto* internal_default_instance() {
return reinterpret_cast<const OneofDescriptorProto*>(
- &_OneofDescriptorProto_default_instance_);
+ &_OneofDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 8;
-
- friend void swap(OneofDescriptorProto& a, OneofDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 8;
+ friend void swap(OneofDescriptorProto& a, OneofDescriptorProto& b) { a.Swap(&b); }
inline void Swap(OneofDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -8141,11 +7959,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const OneofDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const OneofDescriptorProto& from) {
- OneofDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const OneofDescriptorProto& from) { OneofDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -8153,31 +7973,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(OneofDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.OneofDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.OneofDescriptorProto"; }
+
+ protected:
explicit OneofDescriptorProto(::google::protobuf::Arena* arena);
OneofDescriptorProto(::google::protobuf::Arena* arena, const OneofDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ OneofDescriptorProto(::google::protobuf::Arena* arena, OneofDescriptorProto&& from) noexcept
+ : OneofDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kOptionsFieldNumber = 2,
@@ -8217,7 +8039,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.OneofDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 1,
@@ -8229,14 +8050,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_;
@@ -8245,23 +8065,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT MethodDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.MethodDescriptorProto) */ {
+class PROTOBUF_EXPORT MethodDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.MethodDescriptorProto) */ {
public:
inline MethodDescriptorProto() : MethodDescriptorProto(nullptr) {}
~MethodDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR MethodDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR MethodDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline MethodDescriptorProto(const MethodDescriptorProto& from)
- : MethodDescriptorProto(nullptr, from) {}
- MethodDescriptorProto(MethodDescriptorProto&& from) noexcept
- : MethodDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline MethodDescriptorProto(const MethodDescriptorProto& from) : MethodDescriptorProto(nullptr, from) {}
+ inline MethodDescriptorProto(MethodDescriptorProto&& from) noexcept
+ : MethodDescriptorProto(nullptr, std::move(from)) {}
inline MethodDescriptorProto& operator=(const MethodDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -8269,9 +8087,9 @@
inline MethodDescriptorProto& operator=(MethodDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -8303,22 +8121,17 @@
}
static inline const MethodDescriptorProto* internal_default_instance() {
return reinterpret_cast<const MethodDescriptorProto*>(
- &_MethodDescriptorProto_default_instance_);
+ &_MethodDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 13;
-
- friend void swap(MethodDescriptorProto& a, MethodDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 13;
+ friend void swap(MethodDescriptorProto& a, MethodDescriptorProto& b) { a.Swap(&b); }
inline void Swap(MethodDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -8338,11 +8151,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const MethodDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const MethodDescriptorProto& from) {
- MethodDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const MethodDescriptorProto& from) { MethodDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -8350,31 +8165,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(MethodDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.MethodDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.MethodDescriptorProto"; }
+
+ protected:
explicit MethodDescriptorProto(::google::protobuf::Arena* arena);
MethodDescriptorProto(::google::protobuf::Arena* arena, const MethodDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ MethodDescriptorProto(::google::protobuf::Arena* arena, MethodDescriptorProto&& from) noexcept
+ : MethodDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kInputTypeFieldNumber = 2,
@@ -8474,7 +8291,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 6, 1,
@@ -8486,14 +8302,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_;
@@ -8506,23 +8321,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FieldDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldDescriptorProto) */ {
+class PROTOBUF_EXPORT FieldDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FieldDescriptorProto) */ {
public:
inline FieldDescriptorProto() : FieldDescriptorProto(nullptr) {}
~FieldDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FieldDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FieldDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FieldDescriptorProto(const FieldDescriptorProto& from)
- : FieldDescriptorProto(nullptr, from) {}
- FieldDescriptorProto(FieldDescriptorProto&& from) noexcept
- : FieldDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline FieldDescriptorProto(const FieldDescriptorProto& from) : FieldDescriptorProto(nullptr, from) {}
+ inline FieldDescriptorProto(FieldDescriptorProto&& from) noexcept
+ : FieldDescriptorProto(nullptr, std::move(from)) {}
inline FieldDescriptorProto& operator=(const FieldDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -8530,9 +8343,9 @@
inline FieldDescriptorProto& operator=(FieldDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -8564,22 +8377,17 @@
}
static inline const FieldDescriptorProto* internal_default_instance() {
return reinterpret_cast<const FieldDescriptorProto*>(
- &_FieldDescriptorProto_default_instance_);
+ &_FieldDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 7;
-
- friend void swap(FieldDescriptorProto& a, FieldDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 7;
+ friend void swap(FieldDescriptorProto& a, FieldDescriptorProto& b) { a.Swap(&b); }
inline void Swap(FieldDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -8599,11 +8407,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FieldDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FieldDescriptorProto& from) {
- FieldDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const FieldDescriptorProto& from) { FieldDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -8611,29 +8421,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FieldDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FieldDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FieldDescriptorProto"; }
+
+ protected:
explicit FieldDescriptorProto(::google::protobuf::Arena* arena);
FieldDescriptorProto(::google::protobuf::Arena* arena, const FieldDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FieldDescriptorProto(::google::protobuf::Arena* arena, FieldDescriptorProto&& from) noexcept
+ : FieldDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Type = FieldDescriptorProto_Type;
static constexpr Type TYPE_DOUBLE = FieldDescriptorProto_Type_TYPE_DOUBLE;
static constexpr Type TYPE_FLOAT = FieldDescriptorProto_Type_TYPE_FLOAT;
@@ -8669,7 +8481,6 @@
static inline bool Type_Parse(absl::string_view name, Type* value) {
return FieldDescriptorProto_Type_Parse(name, value);
}
-
using Label = FieldDescriptorProto_Label;
static constexpr Label LABEL_OPTIONAL = FieldDescriptorProto_Label_LABEL_OPTIONAL;
static constexpr Label LABEL_REPEATED = FieldDescriptorProto_Label_LABEL_REPEATED;
@@ -8692,7 +8503,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kExtendeeFieldNumber = 2,
@@ -8864,7 +8674,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
4, 11, 3,
@@ -8876,14 +8685,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_;
@@ -8901,23 +8709,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT EnumValueDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumValueDescriptorProto) */ {
+class PROTOBUF_EXPORT EnumValueDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.EnumValueDescriptorProto) */ {
public:
inline EnumValueDescriptorProto() : EnumValueDescriptorProto(nullptr) {}
~EnumValueDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR EnumValueDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR EnumValueDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline EnumValueDescriptorProto(const EnumValueDescriptorProto& from)
- : EnumValueDescriptorProto(nullptr, from) {}
- EnumValueDescriptorProto(EnumValueDescriptorProto&& from) noexcept
- : EnumValueDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline EnumValueDescriptorProto(const EnumValueDescriptorProto& from) : EnumValueDescriptorProto(nullptr, from) {}
+ inline EnumValueDescriptorProto(EnumValueDescriptorProto&& from) noexcept
+ : EnumValueDescriptorProto(nullptr, std::move(from)) {}
inline EnumValueDescriptorProto& operator=(const EnumValueDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -8925,9 +8731,9 @@
inline EnumValueDescriptorProto& operator=(EnumValueDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -8959,22 +8765,17 @@
}
static inline const EnumValueDescriptorProto* internal_default_instance() {
return reinterpret_cast<const EnumValueDescriptorProto*>(
- &_EnumValueDescriptorProto_default_instance_);
+ &_EnumValueDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 11;
-
- friend void swap(EnumValueDescriptorProto& a, EnumValueDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 11;
+ friend void swap(EnumValueDescriptorProto& a, EnumValueDescriptorProto& b) { a.Swap(&b); }
inline void Swap(EnumValueDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -8994,11 +8795,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const EnumValueDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const EnumValueDescriptorProto& from) {
- EnumValueDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const EnumValueDescriptorProto& from) { EnumValueDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -9006,31 +8809,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(EnumValueDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.EnumValueDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.EnumValueDescriptorProto"; }
+
+ protected:
explicit EnumValueDescriptorProto(::google::protobuf::Arena* arena);
EnumValueDescriptorProto(::google::protobuf::Arena* arena, const EnumValueDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ EnumValueDescriptorProto(::google::protobuf::Arena* arena, EnumValueDescriptorProto&& from) noexcept
+ : EnumValueDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kOptionsFieldNumber = 3,
@@ -9082,7 +8887,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 3, 1,
@@ -9094,14 +8898,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_;
@@ -9111,23 +8914,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT DescriptorProto_ExtensionRange final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto.ExtensionRange) */ {
+class PROTOBUF_EXPORT DescriptorProto_ExtensionRange final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto.ExtensionRange) */ {
public:
inline DescriptorProto_ExtensionRange() : DescriptorProto_ExtensionRange(nullptr) {}
~DescriptorProto_ExtensionRange() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR DescriptorProto_ExtensionRange(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR DescriptorProto_ExtensionRange(
+ ::google::protobuf::internal::ConstantInitialized);
- inline DescriptorProto_ExtensionRange(const DescriptorProto_ExtensionRange& from)
- : DescriptorProto_ExtensionRange(nullptr, from) {}
- DescriptorProto_ExtensionRange(DescriptorProto_ExtensionRange&& from) noexcept
- : DescriptorProto_ExtensionRange() {
- *this = ::std::move(from);
- }
-
+ inline DescriptorProto_ExtensionRange(const DescriptorProto_ExtensionRange& from) : DescriptorProto_ExtensionRange(nullptr, from) {}
+ inline DescriptorProto_ExtensionRange(DescriptorProto_ExtensionRange&& from) noexcept
+ : DescriptorProto_ExtensionRange(nullptr, std::move(from)) {}
inline DescriptorProto_ExtensionRange& operator=(const DescriptorProto_ExtensionRange& from) {
CopyFrom(from);
return *this;
@@ -9135,9 +8936,9 @@
inline DescriptorProto_ExtensionRange& operator=(DescriptorProto_ExtensionRange&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -9169,22 +8970,17 @@
}
static inline const DescriptorProto_ExtensionRange* internal_default_instance() {
return reinterpret_cast<const DescriptorProto_ExtensionRange*>(
- &_DescriptorProto_ExtensionRange_default_instance_);
+ &_DescriptorProto_ExtensionRange_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 2;
-
- friend void swap(DescriptorProto_ExtensionRange& a, DescriptorProto_ExtensionRange& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 2;
+ friend void swap(DescriptorProto_ExtensionRange& a, DescriptorProto_ExtensionRange& b) { a.Swap(&b); }
inline void Swap(DescriptorProto_ExtensionRange* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -9204,11 +9000,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const DescriptorProto_ExtensionRange& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const DescriptorProto_ExtensionRange& from) {
- DescriptorProto_ExtensionRange::MergeImpl(*this, from);
- }
+ void MergeFrom(const DescriptorProto_ExtensionRange& from) { DescriptorProto_ExtensionRange::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -9216,31 +9014,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(DescriptorProto_ExtensionRange* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.DescriptorProto.ExtensionRange";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.DescriptorProto.ExtensionRange"; }
+
+ protected:
explicit DescriptorProto_ExtensionRange(::google::protobuf::Arena* arena);
DescriptorProto_ExtensionRange(::google::protobuf::Arena* arena, const DescriptorProto_ExtensionRange& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ DescriptorProto_ExtensionRange(::google::protobuf::Arena* arena, DescriptorProto_ExtensionRange&& from) noexcept
+ : DescriptorProto_ExtensionRange(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kOptionsFieldNumber = 3,
kStartFieldNumber = 1,
@@ -9286,7 +9086,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 3, 1,
@@ -9298,14 +9097,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::ExtensionRangeOptions* options_;
@@ -9315,23 +9113,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT ServiceDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ServiceDescriptorProto) */ {
+class PROTOBUF_EXPORT ServiceDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.ServiceDescriptorProto) */ {
public:
inline ServiceDescriptorProto() : ServiceDescriptorProto(nullptr) {}
~ServiceDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR ServiceDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR ServiceDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline ServiceDescriptorProto(const ServiceDescriptorProto& from)
- : ServiceDescriptorProto(nullptr, from) {}
- ServiceDescriptorProto(ServiceDescriptorProto&& from) noexcept
- : ServiceDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline ServiceDescriptorProto(const ServiceDescriptorProto& from) : ServiceDescriptorProto(nullptr, from) {}
+ inline ServiceDescriptorProto(ServiceDescriptorProto&& from) noexcept
+ : ServiceDescriptorProto(nullptr, std::move(from)) {}
inline ServiceDescriptorProto& operator=(const ServiceDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -9339,9 +9135,9 @@
inline ServiceDescriptorProto& operator=(ServiceDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -9373,22 +9169,17 @@
}
static inline const ServiceDescriptorProto* internal_default_instance() {
return reinterpret_cast<const ServiceDescriptorProto*>(
- &_ServiceDescriptorProto_default_instance_);
+ &_ServiceDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 12;
-
- friend void swap(ServiceDescriptorProto& a, ServiceDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 12;
+ friend void swap(ServiceDescriptorProto& a, ServiceDescriptorProto& b) { a.Swap(&b); }
inline void Swap(ServiceDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -9408,11 +9199,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const ServiceDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const ServiceDescriptorProto& from) {
- ServiceDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const ServiceDescriptorProto& from) { ServiceDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -9420,31 +9213,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(ServiceDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.ServiceDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.ServiceDescriptorProto"; }
+
+ protected:
explicit ServiceDescriptorProto(::google::protobuf::Arena* arena);
ServiceDescriptorProto(::google::protobuf::Arena* arena, const ServiceDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ ServiceDescriptorProto(::google::protobuf::Arena* arena, ServiceDescriptorProto&& from) noexcept
+ : ServiceDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kMethodFieldNumber = 2,
kNameFieldNumber = 1,
@@ -9458,16 +9253,15 @@
public:
void clear_method() ;
::google::protobuf::MethodDescriptorProto* mutable_method(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto >*
- mutable_method();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::MethodDescriptorProto>* mutable_method();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::MethodDescriptorProto>& _internal_method() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::MethodDescriptorProto>* _internal_mutable_method();
public:
const ::google::protobuf::MethodDescriptorProto& method(int index) const;
::google::protobuf::MethodDescriptorProto* add_method();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto >&
- method() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::MethodDescriptorProto>& method() const;
// optional string name = 1;
bool has_name() const;
void clear_name() ;
@@ -9503,7 +9297,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 3, 2,
@@ -9515,14 +9308,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto > method_;
@@ -9532,23 +9324,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT EnumDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumDescriptorProto) */ {
+class PROTOBUF_EXPORT EnumDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.EnumDescriptorProto) */ {
public:
inline EnumDescriptorProto() : EnumDescriptorProto(nullptr) {}
~EnumDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR EnumDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR EnumDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline EnumDescriptorProto(const EnumDescriptorProto& from)
- : EnumDescriptorProto(nullptr, from) {}
- EnumDescriptorProto(EnumDescriptorProto&& from) noexcept
- : EnumDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline EnumDescriptorProto(const EnumDescriptorProto& from) : EnumDescriptorProto(nullptr, from) {}
+ inline EnumDescriptorProto(EnumDescriptorProto&& from) noexcept
+ : EnumDescriptorProto(nullptr, std::move(from)) {}
inline EnumDescriptorProto& operator=(const EnumDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -9556,9 +9346,9 @@
inline EnumDescriptorProto& operator=(EnumDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -9590,22 +9380,17 @@
}
static inline const EnumDescriptorProto* internal_default_instance() {
return reinterpret_cast<const EnumDescriptorProto*>(
- &_EnumDescriptorProto_default_instance_);
+ &_EnumDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 10;
-
- friend void swap(EnumDescriptorProto& a, EnumDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 10;
+ friend void swap(EnumDescriptorProto& a, EnumDescriptorProto& b) { a.Swap(&b); }
inline void Swap(EnumDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -9625,11 +9410,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const EnumDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const EnumDescriptorProto& from) {
- EnumDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const EnumDescriptorProto& from) { EnumDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -9637,33 +9424,34 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(EnumDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.EnumDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.EnumDescriptorProto"; }
+
+ protected:
explicit EnumDescriptorProto(::google::protobuf::Arena* arena);
EnumDescriptorProto(::google::protobuf::Arena* arena, const EnumDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ EnumDescriptorProto(::google::protobuf::Arena* arena, EnumDescriptorProto&& from) noexcept
+ : EnumDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using EnumReservedRange = EnumDescriptorProto_EnumReservedRange;
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 2,
kReservedRangeFieldNumber = 4,
@@ -9679,16 +9467,15 @@
public:
void clear_value() ;
::google::protobuf::EnumValueDescriptorProto* mutable_value(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto >*
- mutable_value();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValueDescriptorProto>* mutable_value();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValueDescriptorProto>& _internal_value() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValueDescriptorProto>* _internal_mutable_value();
public:
const ::google::protobuf::EnumValueDescriptorProto& value(int index) const;
::google::protobuf::EnumValueDescriptorProto* add_value();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto >&
- value() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValueDescriptorProto>& value() const;
// repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4;
int reserved_range_size() const;
private:
@@ -9697,16 +9484,15 @@
public:
void clear_reserved_range() ;
::google::protobuf::EnumDescriptorProto_EnumReservedRange* mutable_reserved_range(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto_EnumReservedRange >*
- mutable_reserved_range();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto_EnumReservedRange>* mutable_reserved_range();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto_EnumReservedRange>& _internal_reserved_range() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto_EnumReservedRange>* _internal_mutable_reserved_range();
public:
const ::google::protobuf::EnumDescriptorProto_EnumReservedRange& reserved_range(int index) const;
::google::protobuf::EnumDescriptorProto_EnumReservedRange* add_reserved_range();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto_EnumReservedRange >&
- reserved_range() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto_EnumReservedRange>& reserved_range() const;
// repeated string reserved_name = 5;
int reserved_name_size() const;
private:
@@ -9770,7 +9556,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 5, 3,
@@ -9782,14 +9567,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto > value_;
@@ -9801,23 +9585,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT DescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto) */ {
+class PROTOBUF_EXPORT DescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto) */ {
public:
inline DescriptorProto() : DescriptorProto(nullptr) {}
~DescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR DescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR DescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline DescriptorProto(const DescriptorProto& from)
- : DescriptorProto(nullptr, from) {}
- DescriptorProto(DescriptorProto&& from) noexcept
- : DescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline DescriptorProto(const DescriptorProto& from) : DescriptorProto(nullptr, from) {}
+ inline DescriptorProto(DescriptorProto&& from) noexcept
+ : DescriptorProto(nullptr, std::move(from)) {}
inline DescriptorProto& operator=(const DescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -9825,9 +9607,9 @@
inline DescriptorProto& operator=(DescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -9859,22 +9641,17 @@
}
static inline const DescriptorProto* internal_default_instance() {
return reinterpret_cast<const DescriptorProto*>(
- &_DescriptorProto_default_instance_);
+ &_DescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 4;
-
- friend void swap(DescriptorProto& a, DescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 4;
+ friend void swap(DescriptorProto& a, DescriptorProto& b) { a.Swap(&b); }
inline void Swap(DescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -9894,11 +9671,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const DescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const DescriptorProto& from) {
- DescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const DescriptorProto& from) { DescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -9906,34 +9685,35 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(DescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.DescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.DescriptorProto"; }
+
+ protected:
explicit DescriptorProto(::google::protobuf::Arena* arena);
DescriptorProto(::google::protobuf::Arena* arena, const DescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ DescriptorProto(::google::protobuf::Arena* arena, DescriptorProto&& from) noexcept
+ : DescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using ExtensionRange = DescriptorProto_ExtensionRange;
using ReservedRange = DescriptorProto_ReservedRange;
// accessors -------------------------------------------------------
-
enum : int {
kFieldFieldNumber = 2,
kNestedTypeFieldNumber = 3,
@@ -9954,16 +9734,15 @@
public:
void clear_field() ;
::google::protobuf::FieldDescriptorProto* mutable_field(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >*
- mutable_field();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>* mutable_field();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>& _internal_field() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>* _internal_mutable_field();
public:
const ::google::protobuf::FieldDescriptorProto& field(int index) const;
::google::protobuf::FieldDescriptorProto* add_field();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >&
- field() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>& field() const;
// repeated .google.protobuf.DescriptorProto nested_type = 3;
int nested_type_size() const;
private:
@@ -9972,16 +9751,15 @@
public:
void clear_nested_type() ;
::google::protobuf::DescriptorProto* mutable_nested_type(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >*
- mutable_nested_type();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>* mutable_nested_type();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>& _internal_nested_type() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>* _internal_mutable_nested_type();
public:
const ::google::protobuf::DescriptorProto& nested_type(int index) const;
::google::protobuf::DescriptorProto* add_nested_type();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >&
- nested_type() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>& nested_type() const;
// repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
int enum_type_size() const;
private:
@@ -9990,16 +9768,15 @@
public:
void clear_enum_type() ;
::google::protobuf::EnumDescriptorProto* mutable_enum_type(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >*
- mutable_enum_type();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>* mutable_enum_type();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>& _internal_enum_type() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>* _internal_mutable_enum_type();
public:
const ::google::protobuf::EnumDescriptorProto& enum_type(int index) const;
::google::protobuf::EnumDescriptorProto* add_enum_type();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >&
- enum_type() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>& enum_type() const;
// repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
int extension_range_size() const;
private:
@@ -10008,16 +9785,15 @@
public:
void clear_extension_range() ;
::google::protobuf::DescriptorProto_ExtensionRange* mutable_extension_range(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >*
- mutable_extension_range();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ExtensionRange>* mutable_extension_range();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ExtensionRange>& _internal_extension_range() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ExtensionRange>* _internal_mutable_extension_range();
public:
const ::google::protobuf::DescriptorProto_ExtensionRange& extension_range(int index) const;
::google::protobuf::DescriptorProto_ExtensionRange* add_extension_range();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >&
- extension_range() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ExtensionRange>& extension_range() const;
// repeated .google.protobuf.FieldDescriptorProto extension = 6;
int extension_size() const;
private:
@@ -10026,16 +9802,15 @@
public:
void clear_extension() ;
::google::protobuf::FieldDescriptorProto* mutable_extension(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >*
- mutable_extension();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>* mutable_extension();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>& _internal_extension() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>* _internal_mutable_extension();
public:
const ::google::protobuf::FieldDescriptorProto& extension(int index) const;
::google::protobuf::FieldDescriptorProto* add_extension();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >&
- extension() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>& extension() const;
// repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;
int oneof_decl_size() const;
private:
@@ -10044,16 +9819,15 @@
public:
void clear_oneof_decl() ;
::google::protobuf::OneofDescriptorProto* mutable_oneof_decl(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto >*
- mutable_oneof_decl();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::OneofDescriptorProto>* mutable_oneof_decl();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::OneofDescriptorProto>& _internal_oneof_decl() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::OneofDescriptorProto>* _internal_mutable_oneof_decl();
public:
const ::google::protobuf::OneofDescriptorProto& oneof_decl(int index) const;
::google::protobuf::OneofDescriptorProto* add_oneof_decl();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto >&
- oneof_decl() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::OneofDescriptorProto>& oneof_decl() const;
// repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9;
int reserved_range_size() const;
private:
@@ -10062,16 +9836,15 @@
public:
void clear_reserved_range() ;
::google::protobuf::DescriptorProto_ReservedRange* mutable_reserved_range(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ReservedRange >*
- mutable_reserved_range();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ReservedRange>* mutable_reserved_range();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ReservedRange>& _internal_reserved_range() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ReservedRange>* _internal_mutable_reserved_range();
public:
const ::google::protobuf::DescriptorProto_ReservedRange& reserved_range(int index) const;
::google::protobuf::DescriptorProto_ReservedRange* add_reserved_range();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ReservedRange >&
- reserved_range() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto_ReservedRange>& reserved_range() const;
// repeated string reserved_name = 10;
int reserved_name_size() const;
private:
@@ -10135,7 +9908,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
4, 10, 8,
@@ -10147,14 +9919,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > field_;
@@ -10171,23 +9942,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FileDescriptorProto final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FileDescriptorProto) */ {
+class PROTOBUF_EXPORT FileDescriptorProto final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FileDescriptorProto) */ {
public:
inline FileDescriptorProto() : FileDescriptorProto(nullptr) {}
~FileDescriptorProto() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FileDescriptorProto(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FileDescriptorProto(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FileDescriptorProto(const FileDescriptorProto& from)
- : FileDescriptorProto(nullptr, from) {}
- FileDescriptorProto(FileDescriptorProto&& from) noexcept
- : FileDescriptorProto() {
- *this = ::std::move(from);
- }
-
+ inline FileDescriptorProto(const FileDescriptorProto& from) : FileDescriptorProto(nullptr, from) {}
+ inline FileDescriptorProto(FileDescriptorProto&& from) noexcept
+ : FileDescriptorProto(nullptr, std::move(from)) {}
inline FileDescriptorProto& operator=(const FileDescriptorProto& from) {
CopyFrom(from);
return *this;
@@ -10195,9 +9964,9 @@
inline FileDescriptorProto& operator=(FileDescriptorProto&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -10229,22 +9998,17 @@
}
static inline const FileDescriptorProto* internal_default_instance() {
return reinterpret_cast<const FileDescriptorProto*>(
- &_FileDescriptorProto_default_instance_);
+ &_FileDescriptorProto_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 1;
-
- friend void swap(FileDescriptorProto& a, FileDescriptorProto& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 1;
+ friend void swap(FileDescriptorProto& a, FileDescriptorProto& b) { a.Swap(&b); }
inline void Swap(FileDescriptorProto* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -10264,11 +10028,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FileDescriptorProto& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FileDescriptorProto& from) {
- FileDescriptorProto::MergeImpl(*this, from);
- }
+ void MergeFrom(const FileDescriptorProto& from) { FileDescriptorProto::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -10276,31 +10042,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FileDescriptorProto* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FileDescriptorProto";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FileDescriptorProto"; }
+
+ protected:
explicit FileDescriptorProto(::google::protobuf::Arena* arena);
FileDescriptorProto(::google::protobuf::Arena* arena, const FileDescriptorProto& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FileDescriptorProto(::google::protobuf::Arena* arena, FileDescriptorProto&& from) noexcept
+ : FileDescriptorProto(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kDependencyFieldNumber = 3,
kMessageTypeFieldNumber = 4,
@@ -10352,16 +10120,15 @@
public:
void clear_message_type() ;
::google::protobuf::DescriptorProto* mutable_message_type(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >*
- mutable_message_type();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>* mutable_message_type();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>& _internal_message_type() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>* _internal_mutable_message_type();
public:
const ::google::protobuf::DescriptorProto& message_type(int index) const;
::google::protobuf::DescriptorProto* add_message_type();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >&
- message_type() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::DescriptorProto>& message_type() const;
// repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
int enum_type_size() const;
private:
@@ -10370,16 +10137,15 @@
public:
void clear_enum_type() ;
::google::protobuf::EnumDescriptorProto* mutable_enum_type(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >*
- mutable_enum_type();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>* mutable_enum_type();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>& _internal_enum_type() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>* _internal_mutable_enum_type();
public:
const ::google::protobuf::EnumDescriptorProto& enum_type(int index) const;
::google::protobuf::EnumDescriptorProto* add_enum_type();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >&
- enum_type() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumDescriptorProto>& enum_type() const;
// repeated .google.protobuf.ServiceDescriptorProto service = 6;
int service_size() const;
private:
@@ -10388,16 +10154,15 @@
public:
void clear_service() ;
::google::protobuf::ServiceDescriptorProto* mutable_service(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto >*
- mutable_service();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::ServiceDescriptorProto>* mutable_service();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::ServiceDescriptorProto>& _internal_service() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::ServiceDescriptorProto>* _internal_mutable_service();
public:
const ::google::protobuf::ServiceDescriptorProto& service(int index) const;
::google::protobuf::ServiceDescriptorProto* add_service();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto >&
- service() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::ServiceDescriptorProto>& service() const;
// repeated .google.protobuf.FieldDescriptorProto extension = 7;
int extension_size() const;
private:
@@ -10406,16 +10171,15 @@
public:
void clear_extension() ;
::google::protobuf::FieldDescriptorProto* mutable_extension(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >*
- mutable_extension();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>* mutable_extension();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>& _internal_extension() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>* _internal_mutable_extension();
public:
const ::google::protobuf::FieldDescriptorProto& extension(int index) const;
::google::protobuf::FieldDescriptorProto* add_extension();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >&
- extension() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FieldDescriptorProto>& extension() const;
// repeated int32 public_dependency = 10;
int public_dependency_size() const;
private:
@@ -10547,7 +10311,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
4, 13, 7,
@@ -10559,14 +10322,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField<std::string> dependency_;
@@ -10586,23 +10348,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FileDescriptorSet final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FileDescriptorSet) */ {
+class PROTOBUF_EXPORT FileDescriptorSet final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FileDescriptorSet) */ {
public:
inline FileDescriptorSet() : FileDescriptorSet(nullptr) {}
~FileDescriptorSet() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FileDescriptorSet(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FileDescriptorSet(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FileDescriptorSet(const FileDescriptorSet& from)
- : FileDescriptorSet(nullptr, from) {}
- FileDescriptorSet(FileDescriptorSet&& from) noexcept
- : FileDescriptorSet() {
- *this = ::std::move(from);
- }
-
+ inline FileDescriptorSet(const FileDescriptorSet& from) : FileDescriptorSet(nullptr, from) {}
+ inline FileDescriptorSet(FileDescriptorSet&& from) noexcept
+ : FileDescriptorSet(nullptr, std::move(from)) {}
inline FileDescriptorSet& operator=(const FileDescriptorSet& from) {
CopyFrom(from);
return *this;
@@ -10610,9 +10370,9 @@
inline FileDescriptorSet& operator=(FileDescriptorSet&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -10644,22 +10404,17 @@
}
static inline const FileDescriptorSet* internal_default_instance() {
return reinterpret_cast<const FileDescriptorSet*>(
- &_FileDescriptorSet_default_instance_);
+ &_FileDescriptorSet_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(FileDescriptorSet& a, FileDescriptorSet& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(FileDescriptorSet& a, FileDescriptorSet& b) { a.Swap(&b); }
inline void Swap(FileDescriptorSet* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -10679,11 +10434,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FileDescriptorSet& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FileDescriptorSet& from) {
- FileDescriptorSet::MergeImpl(*this, from);
- }
+ void MergeFrom(const FileDescriptorSet& from) { FileDescriptorSet::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -10691,31 +10448,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FileDescriptorSet* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FileDescriptorSet";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FileDescriptorSet"; }
+
+ protected:
explicit FileDescriptorSet(::google::protobuf::Arena* arena);
FileDescriptorSet(::google::protobuf::Arena* arena, const FileDescriptorSet& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FileDescriptorSet(::google::protobuf::Arena* arena, FileDescriptorSet&& from) noexcept
+ : FileDescriptorSet(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kFileFieldNumber = 1,
};
@@ -10727,20 +10486,18 @@
public:
void clear_file() ;
::google::protobuf::FileDescriptorProto* mutable_file(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >*
- mutable_file();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>* mutable_file();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>& _internal_file() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>* _internal_mutable_file();
public:
const ::google::protobuf::FileDescriptorProto& file(int index) const;
::google::protobuf::FileDescriptorProto* add_file();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >&
- file() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::FileDescriptorProto>& file() const;
// @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 1,
@@ -10752,14 +10509,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto > file_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
@@ -11027,8 +10783,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.FileDescriptorProto.dependency)
}
inline void FileDescriptorProto::set_dependency(int index, absl::string_view value) {
- _internal_mutable_dependency()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_dependency()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.FileDescriptorProto.dependency)
}
inline void FileDescriptorProto::add_dependency(const std::string& value) {
@@ -11055,7 +10811,8 @@
}
inline void FileDescriptorProto::add_dependency(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_dependency()->Add()->assign(value.data(), value.size());
+ _internal_mutable_dependency()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.FileDescriptorProto.dependency)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
@@ -11115,8 +10872,8 @@
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
return _internal_mutable_public_dependency();
}
-inline const ::google::protobuf::RepeatedField<::int32_t>& FileDescriptorProto::_internal_public_dependency()
- const {
+inline const ::google::protobuf::RepeatedField<::int32_t>&
+FileDescriptorProto::_internal_public_dependency() const {
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
return _impl_.public_dependency_;
}
@@ -11160,8 +10917,8 @@
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
return _internal_mutable_weak_dependency();
}
-inline const ::google::protobuf::RepeatedField<::int32_t>& FileDescriptorProto::_internal_weak_dependency()
- const {
+inline const ::google::protobuf::RepeatedField<::int32_t>&
+FileDescriptorProto::_internal_weak_dependency() const {
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
return _impl_.weak_dependency_;
}
@@ -11429,7 +11186,6 @@
}
inline ::google::protobuf::FileOptions* FileDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FileOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::FileOptions*>(p);
@@ -11437,6 +11193,7 @@
return _impl_.options_;
}
inline ::google::protobuf::FileOptions* FileDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000008u;
::google::protobuf::FileOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.options)
return _msg;
@@ -11525,7 +11282,6 @@
}
inline ::google::protobuf::SourceCodeInfo* FileDescriptorProto::_internal_mutable_source_code_info() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000010u;
if (_impl_.source_code_info_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::SourceCodeInfo>(GetArena());
_impl_.source_code_info_ = reinterpret_cast<::google::protobuf::SourceCodeInfo*>(p);
@@ -11533,6 +11289,7 @@
return _impl_.source_code_info_;
}
inline ::google::protobuf::SourceCodeInfo* FileDescriptorProto::mutable_source_code_info() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000010u;
::google::protobuf::SourceCodeInfo* _msg = _internal_mutable_source_code_info();
// @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.source_code_info)
return _msg;
@@ -11645,6 +11402,7 @@
}
inline void FileDescriptorProto::set_edition(::google::protobuf::Edition value) {
_internal_set_edition(value);
+ _impl_._has_bits_[0] |= 0x00000020u;
// @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.edition)
}
inline ::google::protobuf::Edition FileDescriptorProto::_internal_edition() const {
@@ -11654,7 +11412,6 @@
inline void FileDescriptorProto::_internal_set_edition(::google::protobuf::Edition value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::Edition_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000020u;
_impl_.edition_ = value;
}
@@ -11678,6 +11435,7 @@
}
inline void DescriptorProto_ExtensionRange::set_start(::int32_t value) {
_internal_set_start(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ExtensionRange.start)
}
inline ::int32_t DescriptorProto_ExtensionRange::_internal_start() const {
@@ -11686,7 +11444,6 @@
}
inline void DescriptorProto_ExtensionRange::_internal_set_start(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.start_ = value;
}
@@ -11706,6 +11463,7 @@
}
inline void DescriptorProto_ExtensionRange::set_end(::int32_t value) {
_internal_set_end(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ExtensionRange.end)
}
inline ::int32_t DescriptorProto_ExtensionRange::_internal_end() const {
@@ -11714,7 +11472,6 @@
}
inline void DescriptorProto_ExtensionRange::_internal_set_end(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.end_ = value;
}
@@ -11781,7 +11538,6 @@
}
inline ::google::protobuf::ExtensionRangeOptions* DescriptorProto_ExtensionRange::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::ExtensionRangeOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::ExtensionRangeOptions*>(p);
@@ -11789,6 +11545,7 @@
return _impl_.options_;
}
inline ::google::protobuf::ExtensionRangeOptions* DescriptorProto_ExtensionRange::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::ExtensionRangeOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.ExtensionRange.options)
return _msg;
@@ -11834,6 +11591,7 @@
}
inline void DescriptorProto_ReservedRange::set_start(::int32_t value) {
_internal_set_start(value);
+ _impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ReservedRange.start)
}
inline ::int32_t DescriptorProto_ReservedRange::_internal_start() const {
@@ -11842,7 +11600,6 @@
}
inline void DescriptorProto_ReservedRange::_internal_set_start(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
_impl_.start_ = value;
}
@@ -11862,6 +11619,7 @@
}
inline void DescriptorProto_ReservedRange::set_end(::int32_t value) {
_internal_set_end(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ReservedRange.end)
}
inline ::int32_t DescriptorProto_ReservedRange::_internal_end() const {
@@ -11870,7 +11628,6 @@
}
inline void DescriptorProto_ReservedRange::_internal_set_end(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.end_ = value;
}
@@ -12306,7 +12063,6 @@
}
inline ::google::protobuf::MessageOptions* DescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::MessageOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::MessageOptions*>(p);
@@ -12314,6 +12070,7 @@
return _impl_.options_;
}
inline ::google::protobuf::MessageOptions* DescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000002u;
::google::protobuf::MessageOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.options)
return _msg;
@@ -12436,8 +12193,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.DescriptorProto.reserved_name)
}
inline void DescriptorProto::set_reserved_name(int index, absl::string_view value) {
- _internal_mutable_reserved_name()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_reserved_name()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.DescriptorProto.reserved_name)
}
inline void DescriptorProto::add_reserved_name(const std::string& value) {
@@ -12464,7 +12221,8 @@
}
inline void DescriptorProto::add_reserved_name(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_reserved_name()->Add()->assign(value.data(), value.size());
+ _internal_mutable_reserved_name()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.DescriptorProto.reserved_name)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
@@ -12509,6 +12267,7 @@
}
inline void ExtensionRangeOptions_Declaration::set_number(::int32_t value) {
_internal_set_number(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.ExtensionRangeOptions.Declaration.number)
}
inline ::int32_t ExtensionRangeOptions_Declaration::_internal_number() const {
@@ -12517,7 +12276,6 @@
}
inline void ExtensionRangeOptions_Declaration::_internal_set_number(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.number_ = value;
}
@@ -12679,6 +12437,7 @@
}
inline void ExtensionRangeOptions_Declaration::set_reserved(bool value) {
_internal_set_reserved(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.ExtensionRangeOptions.Declaration.reserved)
}
inline bool ExtensionRangeOptions_Declaration::_internal_reserved() const {
@@ -12687,7 +12446,6 @@
}
inline void ExtensionRangeOptions_Declaration::_internal_set_reserved(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.reserved_ = value;
}
@@ -12707,6 +12465,7 @@
}
inline void ExtensionRangeOptions_Declaration::set_repeated(bool value) {
_internal_set_repeated(value);
+ _impl_._has_bits_[0] |= 0x00000010u;
// @@protoc_insertion_point(field_set:google.protobuf.ExtensionRangeOptions.Declaration.repeated)
}
inline bool ExtensionRangeOptions_Declaration::_internal_repeated() const {
@@ -12715,7 +12474,6 @@
}
inline void ExtensionRangeOptions_Declaration::_internal_set_repeated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000010u;
_impl_.repeated_ = value;
}
@@ -12884,7 +12642,6 @@
}
inline ::google::protobuf::FeatureSet* ExtensionRangeOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -12892,6 +12649,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* ExtensionRangeOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.ExtensionRangeOptions.features)
return _msg;
@@ -12917,7 +12675,7 @@
// @@protoc_insertion_point(field_set_allocated:google.protobuf.ExtensionRangeOptions.features)
}
-// optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED];
+// optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];
inline bool ExtensionRangeOptions::has_verification() const {
bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
return value;
@@ -12933,6 +12691,7 @@
}
inline void ExtensionRangeOptions::set_verification(::google::protobuf::ExtensionRangeOptions_VerificationState value) {
_internal_set_verification(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.ExtensionRangeOptions.verification)
}
inline ::google::protobuf::ExtensionRangeOptions_VerificationState ExtensionRangeOptions::_internal_verification() const {
@@ -12942,7 +12701,6 @@
inline void ExtensionRangeOptions::_internal_set_verification(::google::protobuf::ExtensionRangeOptions_VerificationState value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::ExtensionRangeOptions_VerificationState_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.verification_ = value;
}
@@ -13037,6 +12795,7 @@
}
inline void FieldDescriptorProto::set_number(::int32_t value) {
_internal_set_number(value);
+ _impl_._has_bits_[0] |= 0x00000040u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.number)
}
inline ::int32_t FieldDescriptorProto::_internal_number() const {
@@ -13045,7 +12804,6 @@
}
inline void FieldDescriptorProto::_internal_set_number(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000040u;
_impl_.number_ = value;
}
@@ -13065,6 +12823,7 @@
}
inline void FieldDescriptorProto::set_label(::google::protobuf::FieldDescriptorProto_Label value) {
_internal_set_label(value);
+ _impl_._has_bits_[0] |= 0x00000200u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.label)
}
inline ::google::protobuf::FieldDescriptorProto_Label FieldDescriptorProto::_internal_label() const {
@@ -13074,7 +12833,6 @@
inline void FieldDescriptorProto::_internal_set_label(::google::protobuf::FieldDescriptorProto_Label value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FieldDescriptorProto_Label_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000200u;
_impl_.label_ = value;
}
@@ -13094,6 +12852,7 @@
}
inline void FieldDescriptorProto::set_type(::google::protobuf::FieldDescriptorProto_Type value) {
_internal_set_type(value);
+ _impl_._has_bits_[0] |= 0x00000400u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.type)
}
inline ::google::protobuf::FieldDescriptorProto_Type FieldDescriptorProto::_internal_type() const {
@@ -13103,7 +12862,6 @@
inline void FieldDescriptorProto::_internal_set_type(::google::protobuf::FieldDescriptorProto_Type value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FieldDescriptorProto_Type_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000400u;
_impl_.type_ = value;
}
@@ -13336,6 +13094,7 @@
}
inline void FieldDescriptorProto::set_oneof_index(::int32_t value) {
_internal_set_oneof_index(value);
+ _impl_._has_bits_[0] |= 0x00000080u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.oneof_index)
}
inline ::int32_t FieldDescriptorProto::_internal_oneof_index() const {
@@ -13344,7 +13103,6 @@
}
inline void FieldDescriptorProto::_internal_set_oneof_index(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000080u;
_impl_.oneof_index_ = value;
}
@@ -13482,7 +13240,6 @@
}
inline ::google::protobuf::FieldOptions* FieldDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000020u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FieldOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::FieldOptions*>(p);
@@ -13490,6 +13247,7 @@
return _impl_.options_;
}
inline ::google::protobuf::FieldOptions* FieldDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000020u;
::google::protobuf::FieldOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.options)
return _msg;
@@ -13531,6 +13289,7 @@
}
inline void FieldDescriptorProto::set_proto3_optional(bool value) {
_internal_set_proto3_optional(value);
+ _impl_._has_bits_[0] |= 0x00000100u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.proto3_optional)
}
inline bool FieldDescriptorProto::_internal_proto3_optional() const {
@@ -13539,7 +13298,6 @@
}
inline void FieldDescriptorProto::_internal_set_proto3_optional(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000100u;
_impl_.proto3_optional_ = value;
}
@@ -13681,7 +13439,6 @@
}
inline ::google::protobuf::OneofOptions* OneofDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::OneofOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::OneofOptions*>(p);
@@ -13689,6 +13446,7 @@
return _impl_.options_;
}
inline ::google::protobuf::OneofOptions* OneofDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000002u;
::google::protobuf::OneofOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.OneofDescriptorProto.options)
return _msg;
@@ -13734,6 +13492,7 @@
}
inline void EnumDescriptorProto_EnumReservedRange::set_start(::int32_t value) {
_internal_set_start(value);
+ _impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.EnumReservedRange.start)
}
inline ::int32_t EnumDescriptorProto_EnumReservedRange::_internal_start() const {
@@ -13742,7 +13501,6 @@
}
inline void EnumDescriptorProto_EnumReservedRange::_internal_set_start(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
_impl_.start_ = value;
}
@@ -13762,6 +13520,7 @@
}
inline void EnumDescriptorProto_EnumReservedRange::set_end(::int32_t value) {
_internal_set_end(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.EnumReservedRange.end)
}
inline ::int32_t EnumDescriptorProto_EnumReservedRange::_internal_end() const {
@@ -13770,7 +13529,6 @@
}
inline void EnumDescriptorProto_EnumReservedRange::_internal_set_end(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.end_ = value;
}
@@ -13961,7 +13719,6 @@
}
inline ::google::protobuf::EnumOptions* EnumDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::EnumOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::EnumOptions*>(p);
@@ -13969,6 +13726,7 @@
return _impl_.options_;
}
inline ::google::protobuf::EnumOptions* EnumDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000002u;
::google::protobuf::EnumOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.options)
return _msg;
@@ -14091,8 +13849,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.EnumDescriptorProto.reserved_name)
}
inline void EnumDescriptorProto::set_reserved_name(int index, absl::string_view value) {
- _internal_mutable_reserved_name()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_reserved_name()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.EnumDescriptorProto.reserved_name)
}
inline void EnumDescriptorProto::add_reserved_name(const std::string& value) {
@@ -14119,7 +13877,8 @@
}
inline void EnumDescriptorProto::add_reserved_name(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_reserved_name()->Add()->assign(value.data(), value.size());
+ _internal_mutable_reserved_name()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.EnumDescriptorProto.reserved_name)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
@@ -14235,6 +13994,7 @@
}
inline void EnumValueDescriptorProto::set_number(::int32_t value) {
_internal_set_number(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumValueDescriptorProto.number)
}
inline ::int32_t EnumValueDescriptorProto::_internal_number() const {
@@ -14243,7 +14003,6 @@
}
inline void EnumValueDescriptorProto::_internal_set_number(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.number_ = value;
}
@@ -14310,7 +14069,6 @@
}
inline ::google::protobuf::EnumValueOptions* EnumValueDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::EnumValueOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::EnumValueOptions*>(p);
@@ -14318,6 +14076,7 @@
return _impl_.options_;
}
inline ::google::protobuf::EnumValueOptions* EnumValueDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000002u;
::google::protobuf::EnumValueOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueDescriptorProto.options)
return _msg;
@@ -14530,7 +14289,6 @@
}
inline ::google::protobuf::ServiceOptions* ServiceDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::ServiceOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::ServiceOptions*>(p);
@@ -14538,6 +14296,7 @@
return _impl_.options_;
}
inline ::google::protobuf::ServiceOptions* ServiceDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000002u;
::google::protobuf::ServiceOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.options)
return _msg;
@@ -14843,7 +14602,6 @@
}
inline ::google::protobuf::MethodOptions* MethodDescriptorProto::_internal_mutable_options() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
if (_impl_.options_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::MethodOptions>(GetArena());
_impl_.options_ = reinterpret_cast<::google::protobuf::MethodOptions*>(p);
@@ -14851,6 +14609,7 @@
return _impl_.options_;
}
inline ::google::protobuf::MethodOptions* MethodDescriptorProto::mutable_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000008u;
::google::protobuf::MethodOptions* _msg = _internal_mutable_options();
// @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.options)
return _msg;
@@ -14892,6 +14651,7 @@
}
inline void MethodDescriptorProto::set_client_streaming(bool value) {
_internal_set_client_streaming(value);
+ _impl_._has_bits_[0] |= 0x00000010u;
// @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.client_streaming)
}
inline bool MethodDescriptorProto::_internal_client_streaming() const {
@@ -14900,7 +14660,6 @@
}
inline void MethodDescriptorProto::_internal_set_client_streaming(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000010u;
_impl_.client_streaming_ = value;
}
@@ -14920,6 +14679,7 @@
}
inline void MethodDescriptorProto::set_server_streaming(bool value) {
_internal_set_server_streaming(value);
+ _impl_._has_bits_[0] |= 0x00000020u;
// @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.server_streaming)
}
inline bool MethodDescriptorProto::_internal_server_streaming() const {
@@ -14928,7 +14688,6 @@
}
inline void MethodDescriptorProto::_internal_set_server_streaming(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000020u;
_impl_.server_streaming_ = value;
}
@@ -15094,6 +14853,7 @@
}
inline void FileOptions::set_java_multiple_files(bool value) {
_internal_set_java_multiple_files(value);
+ _impl_._has_bits_[0] |= 0x00000800u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_multiple_files)
}
inline bool FileOptions::_internal_java_multiple_files() const {
@@ -15102,7 +14862,6 @@
}
inline void FileOptions::_internal_set_java_multiple_files(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000800u;
_impl_.java_multiple_files_ = value;
}
@@ -15122,6 +14881,7 @@
}
inline void FileOptions::set_java_generate_equals_and_hash(bool value) {
_internal_set_java_generate_equals_and_hash(value);
+ _impl_._has_bits_[0] |= 0x00001000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_generate_equals_and_hash)
}
inline bool FileOptions::_internal_java_generate_equals_and_hash() const {
@@ -15130,7 +14890,6 @@
}
inline void FileOptions::_internal_set_java_generate_equals_and_hash(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00001000u;
_impl_.java_generate_equals_and_hash_ = value;
}
@@ -15150,6 +14909,7 @@
}
inline void FileOptions::set_java_string_check_utf8(bool value) {
_internal_set_java_string_check_utf8(value);
+ _impl_._has_bits_[0] |= 0x00002000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_string_check_utf8)
}
inline bool FileOptions::_internal_java_string_check_utf8() const {
@@ -15158,19 +14918,18 @@
}
inline void FileOptions::_internal_set_java_string_check_utf8(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00002000u;
_impl_.java_string_check_utf8_ = value;
}
// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
inline bool FileOptions::has_optimize_for() const {
- bool value = (_impl_._has_bits_[0] & 0x00080000u) != 0;
+ bool value = (_impl_._has_bits_[0] & 0x00040000u) != 0;
return value;
}
inline void FileOptions::clear_optimize_for() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
_impl_.optimize_for_ = 1;
- _impl_._has_bits_[0] &= ~0x00080000u;
+ _impl_._has_bits_[0] &= ~0x00040000u;
}
inline ::google::protobuf::FileOptions_OptimizeMode FileOptions::optimize_for() const {
// @@protoc_insertion_point(field_get:google.protobuf.FileOptions.optimize_for)
@@ -15178,6 +14937,7 @@
}
inline void FileOptions::set_optimize_for(::google::protobuf::FileOptions_OptimizeMode value) {
_internal_set_optimize_for(value);
+ _impl_._has_bits_[0] |= 0x00040000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.optimize_for)
}
inline ::google::protobuf::FileOptions_OptimizeMode FileOptions::_internal_optimize_for() const {
@@ -15187,7 +14947,6 @@
inline void FileOptions::_internal_set_optimize_for(::google::protobuf::FileOptions_OptimizeMode value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FileOptions_OptimizeMode_IsValid(value));
- _impl_._has_bits_[0] |= 0x00080000u;
_impl_.optimize_for_ = value;
}
@@ -15278,6 +15037,7 @@
}
inline void FileOptions::set_cc_generic_services(bool value) {
_internal_set_cc_generic_services(value);
+ _impl_._has_bits_[0] |= 0x00004000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.cc_generic_services)
}
inline bool FileOptions::_internal_cc_generic_services() const {
@@ -15286,7 +15046,6 @@
}
inline void FileOptions::_internal_set_cc_generic_services(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00004000u;
_impl_.cc_generic_services_ = value;
}
@@ -15306,6 +15065,7 @@
}
inline void FileOptions::set_java_generic_services(bool value) {
_internal_set_java_generic_services(value);
+ _impl_._has_bits_[0] |= 0x00008000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_generic_services)
}
inline bool FileOptions::_internal_java_generic_services() const {
@@ -15314,7 +15074,6 @@
}
inline void FileOptions::_internal_set_java_generic_services(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00008000u;
_impl_.java_generic_services_ = value;
}
@@ -15334,6 +15093,7 @@
}
inline void FileOptions::set_py_generic_services(bool value) {
_internal_set_py_generic_services(value);
+ _impl_._has_bits_[0] |= 0x00010000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.py_generic_services)
}
inline bool FileOptions::_internal_py_generic_services() const {
@@ -15342,47 +15102,18 @@
}
inline void FileOptions::_internal_set_py_generic_services(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00010000u;
_impl_.py_generic_services_ = value;
}
-// optional bool php_generic_services = 42 [default = false];
-inline bool FileOptions::has_php_generic_services() const {
- bool value = (_impl_._has_bits_[0] & 0x00020000u) != 0;
- return value;
-}
-inline void FileOptions::clear_php_generic_services() {
- PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_.php_generic_services_ = false;
- _impl_._has_bits_[0] &= ~0x00020000u;
-}
-inline bool FileOptions::php_generic_services() const {
- // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.php_generic_services)
- return _internal_php_generic_services();
-}
-inline void FileOptions::set_php_generic_services(bool value) {
- _internal_set_php_generic_services(value);
- // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.php_generic_services)
-}
-inline bool FileOptions::_internal_php_generic_services() const {
- PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
- return _impl_.php_generic_services_;
-}
-inline void FileOptions::_internal_set_php_generic_services(bool value) {
- PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00020000u;
- _impl_.php_generic_services_ = value;
-}
-
// optional bool deprecated = 23 [default = false];
inline bool FileOptions::has_deprecated() const {
- bool value = (_impl_._has_bits_[0] & 0x00040000u) != 0;
+ bool value = (_impl_._has_bits_[0] & 0x00020000u) != 0;
return value;
}
inline void FileOptions::clear_deprecated() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
_impl_.deprecated_ = false;
- _impl_._has_bits_[0] &= ~0x00040000u;
+ _impl_._has_bits_[0] &= ~0x00020000u;
}
inline bool FileOptions::deprecated() const {
// @@protoc_insertion_point(field_get:google.protobuf.FileOptions.deprecated)
@@ -15390,6 +15121,7 @@
}
inline void FileOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00020000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.deprecated)
}
inline bool FileOptions::_internal_deprecated() const {
@@ -15398,19 +15130,18 @@
}
inline void FileOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00040000u;
_impl_.deprecated_ = value;
}
// optional bool cc_enable_arenas = 31 [default = true];
inline bool FileOptions::has_cc_enable_arenas() const {
- bool value = (_impl_._has_bits_[0] & 0x00100000u) != 0;
+ bool value = (_impl_._has_bits_[0] & 0x00080000u) != 0;
return value;
}
inline void FileOptions::clear_cc_enable_arenas() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
_impl_.cc_enable_arenas_ = true;
- _impl_._has_bits_[0] &= ~0x00100000u;
+ _impl_._has_bits_[0] &= ~0x00080000u;
}
inline bool FileOptions::cc_enable_arenas() const {
// @@protoc_insertion_point(field_get:google.protobuf.FileOptions.cc_enable_arenas)
@@ -15418,6 +15149,7 @@
}
inline void FileOptions::set_cc_enable_arenas(bool value) {
_internal_set_cc_enable_arenas(value);
+ _impl_._has_bits_[0] |= 0x00080000u;
// @@protoc_insertion_point(field_set:google.protobuf.FileOptions.cc_enable_arenas)
}
inline bool FileOptions::_internal_cc_enable_arenas() const {
@@ -15426,7 +15158,6 @@
}
inline void FileOptions::_internal_set_cc_enable_arenas(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00100000u;
_impl_.cc_enable_arenas_ = value;
}
@@ -15990,7 +15721,6 @@
}
inline ::google::protobuf::FeatureSet* FileOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000400u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -15998,6 +15728,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* FileOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000400u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.features)
return _msg;
@@ -16092,6 +15823,7 @@
}
inline void MessageOptions::set_message_set_wire_format(bool value) {
_internal_set_message_set_wire_format(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.message_set_wire_format)
}
inline bool MessageOptions::_internal_message_set_wire_format() const {
@@ -16100,7 +15832,6 @@
}
inline void MessageOptions::_internal_set_message_set_wire_format(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.message_set_wire_format_ = value;
}
@@ -16120,6 +15851,7 @@
}
inline void MessageOptions::set_no_standard_descriptor_accessor(bool value) {
_internal_set_no_standard_descriptor_accessor(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.no_standard_descriptor_accessor)
}
inline bool MessageOptions::_internal_no_standard_descriptor_accessor() const {
@@ -16128,7 +15860,6 @@
}
inline void MessageOptions::_internal_set_no_standard_descriptor_accessor(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.no_standard_descriptor_accessor_ = value;
}
@@ -16148,6 +15879,7 @@
}
inline void MessageOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.deprecated)
}
inline bool MessageOptions::_internal_deprecated() const {
@@ -16156,7 +15888,6 @@
}
inline void MessageOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.deprecated_ = value;
}
@@ -16176,6 +15907,7 @@
}
inline void MessageOptions::set_map_entry(bool value) {
_internal_set_map_entry(value);
+ _impl_._has_bits_[0] |= 0x00000010u;
// @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.map_entry)
}
inline bool MessageOptions::_internal_map_entry() const {
@@ -16184,7 +15916,6 @@
}
inline void MessageOptions::_internal_set_map_entry(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000010u;
_impl_.map_entry_ = value;
}
@@ -16204,6 +15935,7 @@
}
inline void MessageOptions::set_deprecated_legacy_json_field_conflicts(bool value) {
_internal_set_deprecated_legacy_json_field_conflicts(value);
+ _impl_._has_bits_[0] |= 0x00000020u;
// @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts)
}
inline bool MessageOptions::_internal_deprecated_legacy_json_field_conflicts() const {
@@ -16212,7 +15944,6 @@
}
inline void MessageOptions::_internal_set_deprecated_legacy_json_field_conflicts(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000020u;
_impl_.deprecated_legacy_json_field_conflicts_ = value;
}
@@ -16279,7 +16010,6 @@
}
inline ::google::protobuf::FeatureSet* MessageOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -16287,6 +16017,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* MessageOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.MessageOptions.features)
return _msg;
@@ -16381,6 +16112,7 @@
}
inline void FieldOptions_EditionDefault::set_edition(::google::protobuf::Edition value) {
_internal_set_edition(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.EditionDefault.edition)
}
inline ::google::protobuf::Edition FieldOptions_EditionDefault::_internal_edition() const {
@@ -16390,7 +16122,6 @@
inline void FieldOptions_EditionDefault::_internal_set_edition(::google::protobuf::Edition value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::Edition_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.edition_ = value;
}
@@ -16485,6 +16216,7 @@
}
inline void FieldOptions::set_ctype(::google::protobuf::FieldOptions_CType value) {
_internal_set_ctype(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.ctype)
}
inline ::google::protobuf::FieldOptions_CType FieldOptions::_internal_ctype() const {
@@ -16494,7 +16226,6 @@
inline void FieldOptions::_internal_set_ctype(::google::protobuf::FieldOptions_CType value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FieldOptions_CType_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.ctype_ = value;
}
@@ -16514,6 +16245,7 @@
}
inline void FieldOptions::set_packed(bool value) {
_internal_set_packed(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.packed)
}
inline bool FieldOptions::_internal_packed() const {
@@ -16522,7 +16254,6 @@
}
inline void FieldOptions::_internal_set_packed(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.packed_ = value;
}
@@ -16542,6 +16273,7 @@
}
inline void FieldOptions::set_jstype(::google::protobuf::FieldOptions_JSType value) {
_internal_set_jstype(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.jstype)
}
inline ::google::protobuf::FieldOptions_JSType FieldOptions::_internal_jstype() const {
@@ -16551,7 +16283,6 @@
inline void FieldOptions::_internal_set_jstype(::google::protobuf::FieldOptions_JSType value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FieldOptions_JSType_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.jstype_ = value;
}
@@ -16571,6 +16302,7 @@
}
inline void FieldOptions::set_lazy(bool value) {
_internal_set_lazy(value);
+ _impl_._has_bits_[0] |= 0x00000010u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.lazy)
}
inline bool FieldOptions::_internal_lazy() const {
@@ -16579,7 +16311,6 @@
}
inline void FieldOptions::_internal_set_lazy(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000010u;
_impl_.lazy_ = value;
}
@@ -16599,6 +16330,7 @@
}
inline void FieldOptions::set_unverified_lazy(bool value) {
_internal_set_unverified_lazy(value);
+ _impl_._has_bits_[0] |= 0x00000020u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.unverified_lazy)
}
inline bool FieldOptions::_internal_unverified_lazy() const {
@@ -16607,7 +16339,6 @@
}
inline void FieldOptions::_internal_set_unverified_lazy(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000020u;
_impl_.unverified_lazy_ = value;
}
@@ -16627,6 +16358,7 @@
}
inline void FieldOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00000040u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.deprecated)
}
inline bool FieldOptions::_internal_deprecated() const {
@@ -16635,7 +16367,6 @@
}
inline void FieldOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000040u;
_impl_.deprecated_ = value;
}
@@ -16655,6 +16386,7 @@
}
inline void FieldOptions::set_weak(bool value) {
_internal_set_weak(value);
+ _impl_._has_bits_[0] |= 0x00000080u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.weak)
}
inline bool FieldOptions::_internal_weak() const {
@@ -16663,7 +16395,6 @@
}
inline void FieldOptions::_internal_set_weak(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000080u;
_impl_.weak_ = value;
}
@@ -16683,6 +16414,7 @@
}
inline void FieldOptions::set_debug_redact(bool value) {
_internal_set_debug_redact(value);
+ _impl_._has_bits_[0] |= 0x00000100u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.debug_redact)
}
inline bool FieldOptions::_internal_debug_redact() const {
@@ -16691,7 +16423,6 @@
}
inline void FieldOptions::_internal_set_debug_redact(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000100u;
_impl_.debug_redact_ = value;
}
@@ -16711,6 +16442,7 @@
}
inline void FieldOptions::set_retention(::google::protobuf::FieldOptions_OptionRetention value) {
_internal_set_retention(value);
+ _impl_._has_bits_[0] |= 0x00000200u;
// @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.retention)
}
inline ::google::protobuf::FieldOptions_OptionRetention FieldOptions::_internal_retention() const {
@@ -16720,7 +16452,6 @@
inline void FieldOptions::_internal_set_retention(::google::protobuf::FieldOptions_OptionRetention value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FieldOptions_OptionRetention_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000200u;
_impl_.retention_ = value;
}
@@ -16761,7 +16492,8 @@
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
return _internal_mutable_targets();
}
-inline const ::google::protobuf::RepeatedField<int>& FieldOptions::_internal_targets() const {
+inline const ::google::protobuf::RepeatedField<int>& FieldOptions::_internal_targets()
+ const {
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
return _impl_.targets_;
}
@@ -16882,7 +16614,6 @@
}
inline ::google::protobuf::FeatureSet* FieldOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -16890,6 +16621,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* FieldOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.FieldOptions.features)
return _msg;
@@ -17031,7 +16763,6 @@
}
inline ::google::protobuf::FeatureSet* OneofOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -17039,6 +16770,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* OneofOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.OneofOptions.features)
return _msg;
@@ -17133,6 +16865,7 @@
}
inline void EnumOptions::set_allow_alias(bool value) {
_internal_set_allow_alias(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.allow_alias)
}
inline bool EnumOptions::_internal_allow_alias() const {
@@ -17141,7 +16874,6 @@
}
inline void EnumOptions::_internal_set_allow_alias(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.allow_alias_ = value;
}
@@ -17161,6 +16893,7 @@
}
inline void EnumOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.deprecated)
}
inline bool EnumOptions::_internal_deprecated() const {
@@ -17169,7 +16902,6 @@
}
inline void EnumOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.deprecated_ = value;
}
@@ -17189,6 +16921,7 @@
}
inline void EnumOptions::set_deprecated_legacy_json_field_conflicts(bool value) {
_internal_set_deprecated_legacy_json_field_conflicts(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts)
}
inline bool EnumOptions::_internal_deprecated_legacy_json_field_conflicts() const {
@@ -17197,7 +16930,6 @@
}
inline void EnumOptions::_internal_set_deprecated_legacy_json_field_conflicts(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.deprecated_legacy_json_field_conflicts_ = value;
}
@@ -17264,7 +16996,6 @@
}
inline ::google::protobuf::FeatureSet* EnumOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -17272,6 +17003,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* EnumOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.EnumOptions.features)
return _msg;
@@ -17366,6 +17098,7 @@
}
inline void EnumValueOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumValueOptions.deprecated)
}
inline bool EnumValueOptions::_internal_deprecated() const {
@@ -17374,7 +17107,6 @@
}
inline void EnumValueOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.deprecated_ = value;
}
@@ -17441,7 +17173,6 @@
}
inline ::google::protobuf::FeatureSet* EnumValueOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -17449,6 +17180,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* EnumValueOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueOptions.features)
return _msg;
@@ -17490,6 +17222,7 @@
}
inline void EnumValueOptions::set_debug_redact(bool value) {
_internal_set_debug_redact(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.EnumValueOptions.debug_redact)
}
inline bool EnumValueOptions::_internal_debug_redact() const {
@@ -17498,7 +17231,6 @@
}
inline void EnumValueOptions::_internal_set_debug_redact(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.debug_redact_ = value;
}
@@ -17618,7 +17350,6 @@
}
inline ::google::protobuf::FeatureSet* ServiceOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -17626,6 +17357,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* ServiceOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.ServiceOptions.features)
return _msg;
@@ -17667,6 +17399,7 @@
}
inline void ServiceOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.ServiceOptions.deprecated)
}
inline bool ServiceOptions::_internal_deprecated() const {
@@ -17675,7 +17408,6 @@
}
inline void ServiceOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.deprecated_ = value;
}
@@ -17748,6 +17480,7 @@
}
inline void MethodOptions::set_deprecated(bool value) {
_internal_set_deprecated(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.MethodOptions.deprecated)
}
inline bool MethodOptions::_internal_deprecated() const {
@@ -17756,7 +17489,6 @@
}
inline void MethodOptions::_internal_set_deprecated(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.deprecated_ = value;
}
@@ -17776,6 +17508,7 @@
}
inline void MethodOptions::set_idempotency_level(::google::protobuf::MethodOptions_IdempotencyLevel value) {
_internal_set_idempotency_level(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.MethodOptions.idempotency_level)
}
inline ::google::protobuf::MethodOptions_IdempotencyLevel MethodOptions::_internal_idempotency_level() const {
@@ -17785,7 +17518,6 @@
inline void MethodOptions::_internal_set_idempotency_level(::google::protobuf::MethodOptions_IdempotencyLevel value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::MethodOptions_IdempotencyLevel_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.idempotency_level_ = value;
}
@@ -17852,7 +17584,6 @@
}
inline ::google::protobuf::FeatureSet* MethodOptions::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -17860,6 +17591,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* MethodOptions::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.MethodOptions.features)
return _msg;
@@ -18025,6 +17757,7 @@
}
inline void UninterpretedOption_NamePart::set_is_extension(bool value) {
_internal_set_is_extension(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.NamePart.is_extension)
}
inline bool UninterpretedOption_NamePart::_internal_is_extension() const {
@@ -18033,7 +17766,6 @@
}
inline void UninterpretedOption_NamePart::_internal_set_is_extension(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.is_extension_ = value;
}
@@ -18177,6 +17909,7 @@
}
inline void UninterpretedOption::set_positive_int_value(::uint64_t value) {
_internal_set_positive_int_value(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.positive_int_value)
}
inline ::uint64_t UninterpretedOption::_internal_positive_int_value() const {
@@ -18185,7 +17918,6 @@
}
inline void UninterpretedOption::_internal_set_positive_int_value(::uint64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.positive_int_value_ = value;
}
@@ -18205,6 +17937,7 @@
}
inline void UninterpretedOption::set_negative_int_value(::int64_t value) {
_internal_set_negative_int_value(value);
+ _impl_._has_bits_[0] |= 0x00000010u;
// @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.negative_int_value)
}
inline ::int64_t UninterpretedOption::_internal_negative_int_value() const {
@@ -18213,7 +17946,6 @@
}
inline void UninterpretedOption::_internal_set_negative_int_value(::int64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000010u;
_impl_.negative_int_value_ = value;
}
@@ -18233,6 +17965,7 @@
}
inline void UninterpretedOption::set_double_value(double value) {
_internal_set_double_value(value);
+ _impl_._has_bits_[0] |= 0x00000020u;
// @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.double_value)
}
inline double UninterpretedOption::_internal_double_value() const {
@@ -18241,7 +17974,6 @@
}
inline void UninterpretedOption::_internal_set_double_value(double value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000020u;
_impl_.double_value_ = value;
}
@@ -18407,6 +18139,7 @@
}
inline void FeatureSet::set_field_presence(::google::protobuf::FeatureSet_FieldPresence value) {
_internal_set_field_presence(value);
+ _impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.field_presence)
}
inline ::google::protobuf::FeatureSet_FieldPresence FeatureSet::_internal_field_presence() const {
@@ -18416,7 +18149,6 @@
inline void FeatureSet::_internal_set_field_presence(::google::protobuf::FeatureSet_FieldPresence value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FeatureSet_FieldPresence_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000001u;
_impl_.field_presence_ = value;
}
@@ -18436,6 +18168,7 @@
}
inline void FeatureSet::set_enum_type(::google::protobuf::FeatureSet_EnumType value) {
_internal_set_enum_type(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.enum_type)
}
inline ::google::protobuf::FeatureSet_EnumType FeatureSet::_internal_enum_type() const {
@@ -18445,7 +18178,6 @@
inline void FeatureSet::_internal_set_enum_type(::google::protobuf::FeatureSet_EnumType value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FeatureSet_EnumType_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.enum_type_ = value;
}
@@ -18465,6 +18197,7 @@
}
inline void FeatureSet::set_repeated_field_encoding(::google::protobuf::FeatureSet_RepeatedFieldEncoding value) {
_internal_set_repeated_field_encoding(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.repeated_field_encoding)
}
inline ::google::protobuf::FeatureSet_RepeatedFieldEncoding FeatureSet::_internal_repeated_field_encoding() const {
@@ -18474,7 +18207,6 @@
inline void FeatureSet::_internal_set_repeated_field_encoding(::google::protobuf::FeatureSet_RepeatedFieldEncoding value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FeatureSet_RepeatedFieldEncoding_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.repeated_field_encoding_ = value;
}
@@ -18494,6 +18226,7 @@
}
inline void FeatureSet::set_utf8_validation(::google::protobuf::FeatureSet_Utf8Validation value) {
_internal_set_utf8_validation(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.utf8_validation)
}
inline ::google::protobuf::FeatureSet_Utf8Validation FeatureSet::_internal_utf8_validation() const {
@@ -18503,7 +18236,6 @@
inline void FeatureSet::_internal_set_utf8_validation(::google::protobuf::FeatureSet_Utf8Validation value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FeatureSet_Utf8Validation_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.utf8_validation_ = value;
}
@@ -18523,6 +18255,7 @@
}
inline void FeatureSet::set_message_encoding(::google::protobuf::FeatureSet_MessageEncoding value) {
_internal_set_message_encoding(value);
+ _impl_._has_bits_[0] |= 0x00000010u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.message_encoding)
}
inline ::google::protobuf::FeatureSet_MessageEncoding FeatureSet::_internal_message_encoding() const {
@@ -18532,7 +18265,6 @@
inline void FeatureSet::_internal_set_message_encoding(::google::protobuf::FeatureSet_MessageEncoding value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FeatureSet_MessageEncoding_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000010u;
_impl_.message_encoding_ = value;
}
@@ -18552,6 +18284,7 @@
}
inline void FeatureSet::set_json_format(::google::protobuf::FeatureSet_JsonFormat value) {
_internal_set_json_format(value);
+ _impl_._has_bits_[0] |= 0x00000020u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.json_format)
}
inline ::google::protobuf::FeatureSet_JsonFormat FeatureSet::_internal_json_format() const {
@@ -18561,7 +18294,6 @@
inline void FeatureSet::_internal_set_json_format(::google::protobuf::FeatureSet_JsonFormat value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::FeatureSet_JsonFormat_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000020u;
_impl_.json_format_ = value;
}
@@ -18585,6 +18317,7 @@
}
inline void FeatureSetDefaults_FeatureSetEditionDefault::set_edition(::google::protobuf::Edition value) {
_internal_set_edition(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition)
}
inline ::google::protobuf::Edition FeatureSetDefaults_FeatureSetEditionDefault::_internal_edition() const {
@@ -18594,7 +18327,6 @@
inline void FeatureSetDefaults_FeatureSetEditionDefault::_internal_set_edition(::google::protobuf::Edition value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::Edition_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.edition_ = value;
}
@@ -18661,7 +18393,6 @@
}
inline ::google::protobuf::FeatureSet* FeatureSetDefaults_FeatureSetEditionDefault::_internal_mutable_features() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.features_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::FeatureSet>(GetArena());
_impl_.features_ = reinterpret_cast<::google::protobuf::FeatureSet*>(p);
@@ -18669,6 +18400,7 @@
return _impl_.features_;
}
inline ::google::protobuf::FeatureSet* FeatureSetDefaults_FeatureSetEditionDefault::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::FeatureSet* _msg = _internal_mutable_features();
// @@protoc_insertion_point(field_mutable:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.features)
return _msg;
@@ -18763,6 +18495,7 @@
}
inline void FeatureSetDefaults::set_minimum_edition(::google::protobuf::Edition value) {
_internal_set_minimum_edition(value);
+ _impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSetDefaults.minimum_edition)
}
inline ::google::protobuf::Edition FeatureSetDefaults::_internal_minimum_edition() const {
@@ -18772,7 +18505,6 @@
inline void FeatureSetDefaults::_internal_set_minimum_edition(::google::protobuf::Edition value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::Edition_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000001u;
_impl_.minimum_edition_ = value;
}
@@ -18792,6 +18524,7 @@
}
inline void FeatureSetDefaults::set_maximum_edition(::google::protobuf::Edition value) {
_internal_set_maximum_edition(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.FeatureSetDefaults.maximum_edition)
}
inline ::google::protobuf::Edition FeatureSetDefaults::_internal_maximum_edition() const {
@@ -18801,7 +18534,6 @@
inline void FeatureSetDefaults::_internal_set_maximum_edition(::google::protobuf::Edition value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::Edition_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.maximum_edition_ = value;
}
@@ -18844,8 +18576,8 @@
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
return _internal_mutable_path();
}
-inline const ::google::protobuf::RepeatedField<::int32_t>& SourceCodeInfo_Location::_internal_path()
- const {
+inline const ::google::protobuf::RepeatedField<::int32_t>&
+SourceCodeInfo_Location::_internal_path() const {
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
return _impl_.path_;
}
@@ -18889,8 +18621,8 @@
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
return _internal_mutable_span();
}
-inline const ::google::protobuf::RepeatedField<::int32_t>& SourceCodeInfo_Location::_internal_span()
- const {
+inline const ::google::protobuf::RepeatedField<::int32_t>&
+SourceCodeInfo_Location::_internal_span() const {
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
return _impl_.span_;
}
@@ -19089,8 +18821,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.SourceCodeInfo.Location.leading_detached_comments)
}
inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, absl::string_view value) {
- _internal_mutable_leading_detached_comments()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_leading_detached_comments()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.SourceCodeInfo.Location.leading_detached_comments)
}
inline void SourceCodeInfo_Location::add_leading_detached_comments(const std::string& value) {
@@ -19117,7 +18849,8 @@
}
inline void SourceCodeInfo_Location::add_leading_detached_comments(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_leading_detached_comments()->Add()->assign(value.data(), value.size());
+ _internal_mutable_leading_detached_comments()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.SourceCodeInfo.Location.leading_detached_comments)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
@@ -19234,8 +18967,8 @@
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
return _internal_mutable_path();
}
-inline const ::google::protobuf::RepeatedField<::int32_t>& GeneratedCodeInfo_Annotation::_internal_path()
- const {
+inline const ::google::protobuf::RepeatedField<::int32_t>&
+GeneratedCodeInfo_Annotation::_internal_path() const {
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
return _impl_.path_;
}
@@ -19331,6 +19064,7 @@
}
inline void GeneratedCodeInfo_Annotation::set_begin(::int32_t value) {
_internal_set_begin(value);
+ _impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.begin)
}
inline ::int32_t GeneratedCodeInfo_Annotation::_internal_begin() const {
@@ -19339,7 +19073,6 @@
}
inline void GeneratedCodeInfo_Annotation::_internal_set_begin(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000002u;
_impl_.begin_ = value;
}
@@ -19359,6 +19092,7 @@
}
inline void GeneratedCodeInfo_Annotation::set_end(::int32_t value) {
_internal_set_end(value);
+ _impl_._has_bits_[0] |= 0x00000004u;
// @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.end)
}
inline ::int32_t GeneratedCodeInfo_Annotation::_internal_end() const {
@@ -19367,7 +19101,6 @@
}
inline void GeneratedCodeInfo_Annotation::_internal_set_end(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000004u;
_impl_.end_ = value;
}
@@ -19387,6 +19120,7 @@
}
inline void GeneratedCodeInfo_Annotation::set_semantic(::google::protobuf::GeneratedCodeInfo_Annotation_Semantic value) {
_internal_set_semantic(value);
+ _impl_._has_bits_[0] |= 0x00000008u;
// @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.semantic)
}
inline ::google::protobuf::GeneratedCodeInfo_Annotation_Semantic GeneratedCodeInfo_Annotation::_internal_semantic() const {
@@ -19396,7 +19130,6 @@
inline void GeneratedCodeInfo_Annotation::_internal_set_semantic(::google::protobuf::GeneratedCodeInfo_Annotation_Semantic value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
assert(::google::protobuf::GeneratedCodeInfo_Annotation_Semantic_IsValid(value));
- _impl_._has_bits_[0] |= 0x00000008u;
_impl_.semantic_ = value;
}
diff --git a/src/google/protobuf/descriptor.proto b/src/google/protobuf/descriptor.proto
index 4748643..45220bd 100644
--- a/src/google/protobuf/descriptor.proto
+++ b/src/google/protobuf/descriptor.proto
@@ -81,6 +81,11 @@
EDITION_99997_TEST_ONLY = 99997;
EDITION_99998_TEST_ONLY = 99998;
EDITION_99999_TEST_ONLY = 99999;
+
+ // Placeholder for specifying unbounded edition support. This should only
+ // ever be used by plugins that can expect to never require any changes to
+ // support a new edition.
+ EDITION_MAX = 0x7FFFFFFF;
}
// Describes a complete .proto file.
@@ -202,7 +207,8 @@
// The verification state of the range.
// TODO: flip the default to DECLARATION once all empty ranges
// are marked as UNVERIFIED.
- optional VerificationState verification = 3 [default = UNVERIFIED];
+ optional VerificationState verification = 3
+ [default = UNVERIFIED, retention = RETENTION_SOURCE];
// Clients can define custom options in extensions of this message. See above.
extensions 1000 to max;
@@ -294,12 +300,12 @@
// If true, this is a proto3 "optional". When a proto3 field is optional, it
// tracks presence regardless of field type.
//
- // When proto3_optional is true, this field must be belong to a oneof to
- // signal to old proto3 clients that presence is tracked for this field. This
- // oneof is known as a "synthetic" oneof, and this field must be its sole
- // member (each proto3 optional field gets its own synthetic oneof). Synthetic
- // oneofs exist in the descriptor only, and do not generate any API. Synthetic
- // oneofs must be ordered after all "real" oneofs.
+ // When proto3_optional is true, this field must belong to a oneof to signal
+ // to old proto3 clients that presence is tracked for this field. This oneof
+ // is known as a "synthetic" oneof, and this field must be its sole member
+ // (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs
+ // exist in the descriptor only, and do not generate any API. Synthetic oneofs
+ // must be ordered after all "real" oneofs.
//
// For message fields, proto3_optional doesn't create any semantic change,
// since non-repeated message fields always track presence. However it still
@@ -478,7 +484,7 @@
optional bool cc_generic_services = 16 [default = false];
optional bool java_generic_services = 17 [default = false];
optional bool py_generic_services = 18 [default = false];
- optional bool php_generic_services = 42 [default = false];
+ reserved 42; // removed php_generic_services
// Is this file deprecated?
// Depending on the target platform, this can emit Deprecated annotations
@@ -570,10 +576,6 @@
reserved 4, 5, 6;
- // NOTE: Do not set the option in .proto files. Always use the maps syntax
- // instead. The option should only be implicitly set by the proto compiler
- // parser.
- //
// Whether the message is an automatically generated map entry type for the
// maps field.
//
@@ -591,6 +593,10 @@
// use a native map in the target language to hold the keys and values.
// The reflection APIs in such implementations still need to work as
// if the field is a repeated message field.
+ //
+ // NOTE: Do not set the option in .proto files. Always use the maps syntax
+ // instead. The option should only be implicitly set by the proto compiler
+ // parser.
optional bool map_entry = 7;
reserved 8; // javalite_serializable
@@ -974,8 +980,8 @@
enum Utf8Validation {
UTF8_VALIDATION_UNKNOWN = 0;
- NONE = 1;
VERIFY = 2;
+ NONE = 3;
}
optional Utf8Validation utf8_validation = 4 [
retention = RETENTION_RUNTIME,
@@ -1098,7 +1104,7 @@
// location.
//
// Each element is a field number or an index. They form a path from
- // the root FileDescriptorProto to the place where the definition occurs.
+ // the root FileDescriptorProto to the place where the definition appears.
// For example, this path:
// [ 4, 3, 2, 7, 1 ]
// refers to:
diff --git a/src/google/protobuf/descriptor_legacy.h b/src/google/protobuf/descriptor_legacy.h
deleted file mode 100644
index e7a1f7c..0000000
--- a/src/google/protobuf/descriptor_legacy.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-// Author: kenton@google.com (Kenton Varda)
-// Based on original Protocol Buffers design by
-// Sanjay Ghemawat, Jeff Dean, and others.
-//
-// This file contains classes which describe a type of protocol message.
-// You can use a message's descriptor to learn at runtime what fields
-// it contains and what the types of those fields are. The Message
-// interface also allows you to dynamically access and modify individual
-// fields by passing the FieldDescriptor of the field you are interested
-// in.
-//
-// Most users will not care about descriptors, because they will write
-// code specific to certain protocol types and will simply use the classes
-// generated by the protocol compiler directly. Advanced users who want
-// to operate on arbitrary types (not known at compile time) may want to
-// read descriptors in order to learn about the contents of a message.
-// A very small number of users will want to construct their own
-// Descriptors, either because they are implementing Message manually or
-// because they are writing something like the protocol compiler.
-//
-// For an example of how you might use descriptors, see the code example
-// at the top of message.h.
-
-#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_LEGACY_H__
-#define GOOGLE_PROTOBUF_DESCRIPTOR_LEGACY_H__
-
-#include "absl/strings/string_view.h"
-#include "google/protobuf/descriptor.h"
-
-// Must be included last.
-#include "google/protobuf/port_def.inc"
-
-// This file is meant to be a temporary housing for legacy descriptor APIs we
-// want to deprecate and remove. This will help prevent backslide by allowing
-// us to control visibility.
-
-namespace google {
-namespace protobuf {
-PROTOBUF_IGNORE_DEPRECATION_START
-
-// Wraps FileDescriptor.
-class PROTOBUF_EXPORT FileDescriptorLegacy {
- public:
- explicit FileDescriptorLegacy(const FileDescriptor* desc) : desc_(desc) {}
-
- // Any dependencies on file-level syntax keyword should be replaced by
- // feature-level switches to support go/protobuf-editions.
- enum Syntax {
- SYNTAX_UNKNOWN = FileDescriptor::SYNTAX_UNKNOWN,
- SYNTAX_PROTO2 = FileDescriptor::SYNTAX_PROTO2,
- SYNTAX_PROTO3 = FileDescriptor::SYNTAX_PROTO3,
- SYNTAX_EDITIONS = FileDescriptor::SYNTAX_EDITIONS,
- };
- Syntax syntax() const { return static_cast<Syntax>(desc_->syntax()); }
- static absl::string_view SyntaxName(Syntax syntax) {
- return FileDescriptor::SyntaxName(
- static_cast<FileDescriptor::Syntax>(syntax));
- }
-
- private:
- const FileDescriptor* desc_;
-};
-
-class PROTOBUF_EXPORT FieldDescriptorLegacy {
- public:
- explicit FieldDescriptorLegacy(const FieldDescriptor* desc) : desc_(desc) {}
-
- bool has_optional_keyword() const { return desc_->has_optional_keyword(); }
-
- private:
- const FieldDescriptor* desc_;
-};
-
-class PROTOBUF_EXPORT OneofDescriptorLegacy {
- public:
- explicit OneofDescriptorLegacy(const OneofDescriptor* desc) : desc_(desc) {}
-
- bool is_synthetic() const { return desc_->is_synthetic(); }
-
- private:
- const OneofDescriptor* desc_;
-};
-
-PROTOBUF_IGNORE_DEPRECATION_STOP
-} // namespace protobuf
-} // namespace google
-
-#include "google/protobuf/port_undef.inc"
-
-#endif // GOOGLE_PROTOBUF_DESCRIPTOR_LEGACY_H__
diff --git a/src/google/protobuf/descriptor_unittest.cc b/src/google/protobuf/descriptor_unittest.cc
index 01dc123..7745313 100644
--- a/src/google/protobuf/descriptor_unittest.cc
+++ b/src/google/protobuf/descriptor_unittest.cc
@@ -14,6 +14,7 @@
#include "google/protobuf/descriptor.h"
#include <cstdlib>
+#include <functional>
#include <limits>
#include <memory>
#include <string>
@@ -30,20 +31,22 @@
#include <gtest/gtest.h>
#include "absl/container/btree_set.h"
#include "absl/container/flat_hash_set.h"
+#include "absl/functional/any_invocable.h"
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/log/die_if_null.h"
#include "absl/log/scoped_mock_log.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
+#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
+#include "absl/synchronization/notification.h"
#include "google/protobuf/compiler/importer.h"
#include "google/protobuf/compiler/parser.h"
#include "google/protobuf/cpp_features.pb.h"
#include "google/protobuf/descriptor_database.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/dynamic_message.h"
#include "google/protobuf/feature_resolver.h"
#include "google/protobuf/io/tokenizer.h"
@@ -75,12 +78,14 @@
absl::Status GetStatus(const absl::StatusOr<T>& s) {
return s.status();
}
-MATCHER_P(StatusIs, status,
- absl::StrCat(".status() is ", testing::PrintToString(status))) {
- return GetStatus(arg).code() == status;
+MATCHER_P2(StatusIs, status, message,
+ absl::StrCat(".status() is ", testing::PrintToString(status))) {
+ return GetStatus(arg).code() == status &&
+ testing::ExplainMatchResult(message, GetStatus(arg).message(),
+ result_listener);
}
-#define EXPECT_OK(x) EXPECT_THAT(x, StatusIs(absl::StatusCode::kOk))
-#define ASSERT_OK(x) ASSERT_THAT(x, StatusIs(absl::StatusCode::kOk))
+#define EXPECT_OK(x) EXPECT_THAT(x, StatusIs(absl::StatusCode::kOk, testing::_))
+#define ASSERT_OK(x) ASSERT_THAT(x, StatusIs(absl::StatusCode::kOk, testing::_))
namespace google {
namespace protobuf {
@@ -467,32 +472,30 @@
EXPECT_EQ(proto3_descriptor, pool_.BuildFile(proto_syntax3));
}
-TEST_F(FileDescriptorTest, Syntax) {
+TEST_F(FileDescriptorTest, Edition) {
FileDescriptorProto proto;
proto.set_name("foo");
- // Enable the test when we also populate the syntax for proto2.
-#if 0
{
proto.set_syntax("proto2");
DescriptorPool pool;
const FileDescriptor* file = pool.BuildFile(proto);
ASSERT_TRUE(file != nullptr);
- EXPECT_EQ(FileDescriptorLegacy::Syntax::SYNTAX_PROTO2, FileDescriptorLegacy(file).syntax());
+ EXPECT_EQ(file->edition(), Edition::EDITION_PROTO2);
FileDescriptorProto other;
file->CopyTo(&other);
- EXPECT_EQ("proto2", other.syntax());
+ EXPECT_EQ("", other.syntax());
+ EXPECT_FALSE(other.has_edition());
}
-#endif
{
proto.set_syntax("proto3");
DescriptorPool pool;
const FileDescriptor* file = pool.BuildFile(proto);
ASSERT_TRUE(file != nullptr);
- EXPECT_EQ(FileDescriptorLegacy::Syntax::SYNTAX_PROTO3,
- FileDescriptorLegacy(file).syntax());
+ EXPECT_EQ(file->edition(), Edition::EDITION_PROTO3);
FileDescriptorProto other;
file->CopyTo(&other);
EXPECT_EQ("proto3", other.syntax());
+ EXPECT_FALSE(other.has_edition());
}
{
proto.set_syntax("editions");
@@ -500,8 +503,7 @@
DescriptorPool pool;
const FileDescriptor* file = pool.BuildFile(proto);
ASSERT_TRUE(file != nullptr);
- EXPECT_EQ(FileDescriptorLegacy::Syntax::SYNTAX_EDITIONS,
- FileDescriptorLegacy(file).syntax());
+ EXPECT_EQ(file->edition(), Edition::EDITION_2023);
EXPECT_EQ(file->edition(), EDITION_2023);
FileDescriptorProto other;
file->CopyTo(&other);
@@ -4013,7 +4015,7 @@
}
// Parse file_text as a FileDescriptorProto in text format and add it
// to the DescriptorPool. Expect no errors.
- const FileDescriptor* BuildFile(const std::string& file_text) {
+ const FileDescriptor* BuildFile(absl::string_view file_text) {
FileDescriptorProto file_proto;
EXPECT_TRUE(TextFormat::ParseFromString(file_text, &file_proto));
return ABSL_DIE_IF_NULL(pool_.BuildFile(file_proto));
@@ -6651,8 +6653,8 @@
"}",
"foo.proto: bar: NAME: Enum name bar has the same name as BAR "
"if you ignore case and strip out the enum name prefix (if any). "
- "(If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
BuildFileWithErrors(
"syntax: 'proto2'"
@@ -6664,8 +6666,8 @@
"}",
"foo.proto: bar: NAME: Enum name bar has the same name as BAR "
"if you ignore case and strip out the enum name prefix (if any). "
- "(If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
// Not an error because both enums are mapped to the same value.
BuildFile(
@@ -6691,8 +6693,8 @@
"}",
"foo.proto: BAZ: NAME: Enum name BAZ has the same name as FOO_ENUM_BAZ "
"if you ignore case and strip out the enum name prefix (if any). "
- "(If you are using allow_alias, please assign the same numeric value "
- "to both enums.)\n");
+ "(If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
BuildFileWithErrors(
"syntax: 'proto3'"
@@ -6704,8 +6706,8 @@
"}",
"foo.proto: BAZ: NAME: Enum name BAZ has the same name as FOOENUM_BAZ "
"if you ignore case and strip out the enum name prefix (if any). "
- "(If you are using allow_alias, please assign the same numeric value "
- "to both enums.)\n");
+ "(If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
BuildFileWithErrors(
"syntax: 'proto3'"
@@ -6717,8 +6719,8 @@
"}",
"foo.proto: BAR__BAZ: NAME: Enum name BAR__BAZ has the same name as "
"FOO_ENUM_BAR_BAZ if you ignore case and strip out the enum name prefix "
- "(if any). (If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(if any). (If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
BuildFileWithErrors(
"syntax: 'proto3'"
@@ -6730,8 +6732,8 @@
"}",
"foo.proto: BAR_BAZ: NAME: Enum name BAR_BAZ has the same name as "
"FOO_ENUM__BAR_BAZ if you ignore case and strip out the enum name prefix "
- "(if any). (If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(if any). (If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
BuildFileWithErrors(
"syntax: 'proto2'"
@@ -6743,8 +6745,8 @@
"}",
"foo.proto: BAR_BAZ: NAME: Enum name BAR_BAZ has the same name as "
"FOO_ENUM__BAR_BAZ if you ignore case and strip out the enum name prefix "
- "(if any). (If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(if any). (If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
// This isn't an error because the underscore will cause the PascalCase to
// differ by case (BarBaz vs. Barbaz).
@@ -6770,8 +6772,8 @@
"}",
"foo.proto: bar: NAME: Enum name bar has the same name as BAR "
"if you ignore case and strip out the enum name prefix (if any). "
- "(If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
BuildFileWithErrors(
"syntax: 'proto3'"
@@ -6786,8 +6788,7 @@
"FOO_ENUM__BAR_BAZ if you ignore case and strip out the enum name "
"prefix "
"(if any). (If you are using allow_alias, please assign the same "
- "numeric "
- "value to both enums.)\n");
+ "number to each enum value name.)\n");
BuildFileWithWarnings(
"syntax: 'proto2'"
@@ -6800,8 +6801,8 @@
"}",
"foo.proto: bar: NAME: Enum name bar has the same name as BAR "
"if you ignore case and strip out the enum name prefix (if any). "
- "(If you are using allow_alias, please assign the same numeric "
- "value to both enums.)\n");
+ "(If you are using allow_alias, please assign the same number "
+ "to each enum value name.)\n");
}
TEST_F(ValidationErrorTest, MapEntryConflictsWithOneof) {
@@ -7032,10 +7033,73 @@
" field { name:'bar' number:1 label:LABEL_OPTIONAL type:TYPE_ENUM "
" type_name: 'foo.FooEnum' }"
"}",
- "bar.proto: Foo.bar: TYPE: Enum type \"foo.FooEnum\" is not a proto3 "
+ "bar.proto: Foo.bar: TYPE: Enum type \"foo.FooEnum\" is not an open "
"enum, but is used in \"Foo\" which is a proto3 message type.\n");
}
+TEST_F(ValidationErrorTest, ValidateProto3ClosedEnum) {
+ // Define a closed enum in an editions file.
+ BuildFile(R"pb(name: 'foo.proto'
+ package: 'foo'
+ syntax: 'editions'
+ edition: EDITION_2023
+ enum_type {
+ name: 'FooEnum'
+ value { name: 'DEFAULT_OPTION' number: 0 }
+ options { features { enum_type: CLOSED } }
+ })pb");
+
+ BuildFileWithErrors(
+ R"pb(name: 'bar.proto'
+ dependency: 'foo.proto'
+ syntax: 'proto3'
+ message_type {
+ name: 'Foo'
+ field {
+ name: 'bar'
+ number: 1
+ label: LABEL_OPTIONAL
+ type: TYPE_ENUM
+ type_name: 'foo.FooEnum'
+ }
+ })pb",
+ "bar.proto: Foo.bar: TYPE: Enum type \"foo.FooEnum\" is not an open "
+ "enum, but is used in \"Foo\" which is a proto3 message type.\n");
+}
+
+TEST_F(ValidationErrorTest, ValidateProto3OpenEnum) {
+ // Define an open enum in an editions file.
+ const FileDescriptor* foo =
+ BuildFile(R"pb(name: 'foo.proto'
+ package: 'foo'
+ syntax: 'editions'
+ edition: EDITION_2023
+ enum_type {
+ name: 'FooEnum'
+ value { name: 'DEFAULT_OPTION' number: 0 }
+ })pb");
+ const EnumDescriptor* enm = foo->enum_type(0);
+ ASSERT_NE(enm, nullptr);
+
+ const FileDescriptor* bar = BuildFile(
+ R"pb(name: 'bar.proto'
+ dependency: 'foo.proto'
+ syntax: 'proto3'
+ message_type {
+ name: 'Foo'
+ field {
+ name: 'bar'
+ number: 1
+ label: LABEL_OPTIONAL
+ type: TYPE_ENUM
+ type_name: 'foo.FooEnum'
+ }
+ })pb");
+ ASSERT_NE(bar, nullptr);
+
+ EXPECT_EQ(bar->message_type(0)->field(0)->enum_type(), enm);
+}
+
TEST_F(ValidationErrorTest, ValidateProto3Extension) {
// Valid for options.
DescriptorPool pool;
@@ -7238,7 +7302,7 @@
GetExtensionReflection(pb::TestMessage::Nested::test_nested)},
EDITION_PROTO2, EDITION_99999_TEST_ONLY);
ASSERT_OK(default_spec);
- pool_.SetFeatureSetDefaults(std::move(default_spec).value());
+ ASSERT_OK(pool_.SetFeatureSetDefaults(std::move(default_spec).value()));
}
};
@@ -7346,8 +7410,11 @@
[pb.cpp] { legacy_closed_enum: true })pb"));
EXPECT_TRUE(field->has_presence());
EXPECT_FALSE(field->requires_utf8_validation());
- EXPECT_EQ(GetUtf8CheckMode(field, /*is_lite=*/false), Utf8CheckMode::kVerify);
- EXPECT_EQ(GetUtf8CheckMode(field, /*is_lite=*/true), Utf8CheckMode::kNone);
+ EXPECT_EQ(
+ GetUtf8CheckMode(message->FindFieldByName("str"), /*is_lite=*/false),
+ Utf8CheckMode::kVerify);
+ EXPECT_EQ(GetUtf8CheckMode(message->FindFieldByName("str"), /*is_lite=*/true),
+ Utf8CheckMode::kNone);
EXPECT_FALSE(field->is_packed());
EXPECT_FALSE(field->legacy_enum_field_treated_as_closed());
EXPECT_FALSE(HasPreservingUnknownEnumSemantics(field));
@@ -7412,8 +7479,11 @@
[pb.cpp] { legacy_closed_enum: false })pb"));
EXPECT_FALSE(field->has_presence());
EXPECT_FALSE(field->requires_utf8_validation());
- EXPECT_EQ(GetUtf8CheckMode(field, /*is_lite=*/false), Utf8CheckMode::kStrict);
- EXPECT_EQ(GetUtf8CheckMode(field, /*is_lite=*/true), Utf8CheckMode::kStrict);
+ EXPECT_EQ(
+ GetUtf8CheckMode(message->FindFieldByName("str"), /*is_lite=*/false),
+ Utf8CheckMode::kStrict);
+ EXPECT_EQ(GetUtf8CheckMode(message->FindFieldByName("str"), /*is_lite=*/true),
+ Utf8CheckMode::kStrict);
EXPECT_FALSE(field->is_packed());
EXPECT_FALSE(field->legacy_enum_field_treated_as_closed());
EXPECT_FALSE(HasPreservingUnknownEnumSemantics(field));
@@ -9149,9 +9219,9 @@
EXPECT_FALSE(default_repeated_field->has_presence());
EXPECT_FALSE(default_repeated_field->requires_utf8_validation());
EXPECT_EQ(GetUtf8CheckMode(default_repeated_field, /*is_lite=*/false),
- Utf8CheckMode::kStrict);
+ Utf8CheckMode::kNone);
EXPECT_EQ(GetUtf8CheckMode(default_repeated_field, /*is_lite=*/true),
- Utf8CheckMode::kStrict);
+ Utf8CheckMode::kNone);
EXPECT_TRUE(required_field->has_presence());
EXPECT_TRUE(required_field->is_required());
@@ -10327,6 +10397,100 @@
[](const ::testing::TestParamInfo<FeaturesDebugStringTest::ParamType>&
info) { return std::string(std::get<0>(info.param)); });
+using DescriptorPoolFeaturesTest = FeaturesBaseTest;
+
+TEST_F(DescriptorPoolFeaturesTest, BuildStarted) {
+ BuildDescriptorMessagesInTestPool();
+ FeatureSetDefaults defaults = ParseTextOrDie(R"pb()pb");
+ EXPECT_THAT(pool_.SetFeatureSetDefaults(std::move(defaults)),
+ StatusIs(absl::StatusCode::kFailedPrecondition,
+ HasSubstr("defaults can't be changed")));
+}
+
+TEST_F(DescriptorPoolFeaturesTest, InvalidRange) {
+ FeatureSetDefaults defaults = ParseTextOrDie(R"pb(
+ minimum_edition: EDITION_2023
+ maximum_edition: EDITION_PROTO2
+ )pb");
+ EXPECT_THAT(pool_.SetFeatureSetDefaults(std::move(defaults)),
+ StatusIs(absl::StatusCode::kInvalidArgument,
+ AllOf(HasSubstr("Invalid edition range"),
+ HasSubstr("PROTO2"), HasSubstr("2023"))));
+}
+
+TEST_F(DescriptorPoolFeaturesTest, UnknownDefaults) {
+ FeatureSetDefaults defaults = ParseTextOrDie(R"pb(
+ defaults {
+ edition: EDITION_UNKNOWN
+ features {}
+ }
+ minimum_edition: EDITION_PROTO2
+ maximum_edition: EDITION_2023
+ )pb");
+ EXPECT_THAT(pool_.SetFeatureSetDefaults(std::move(defaults)),
+ StatusIs(absl::StatusCode::kInvalidArgument,
+ AllOf(HasSubstr("Invalid edition UNKNOWN"))));
+}
+
+TEST_F(DescriptorPoolFeaturesTest, NotStrictlyIncreasing) {
+ FeatureSetDefaults defaults = ParseTextOrDie(R"pb(
+ defaults {
+ edition: EDITION_PROTO3
+ features {}
+ }
+ defaults {
+ edition: EDITION_PROTO2
+ features {}
+ }
+ minimum_edition: EDITION_PROTO2
+ maximum_edition: EDITION_2023
+ )pb");
+ EXPECT_THAT(
+ pool_.SetFeatureSetDefaults(std::move(defaults)),
+ StatusIs(
+ absl::StatusCode::kInvalidArgument,
+ AllOf(
+ HasSubstr("not strictly increasing"),
+ HasSubstr("PROTO3 is greater than or equal to edition PROTO2"))));
+}
+
+TEST_F(DescriptorPoolFeaturesTest, OverrideDefaults) {
+ FeatureSetDefaults defaults = ParseTextOrDie(R"pb(
+ defaults {
+ edition: EDITION_PROTO2
+ features {
+ field_presence: EXPLICIT
+ enum_type: CLOSED
+ repeated_field_encoding: EXPANDED
+ utf8_validation: VERIFY
+ message_encoding: LENGTH_PREFIXED
+ json_format: ALLOW
+ }
+ }
+ minimum_edition: EDITION_PROTO2
+ maximum_edition: EDITION_2023
+ )pb");
+ EXPECT_OK(pool_.SetFeatureSetDefaults(std::move(defaults)));
+
+ FileDescriptorProto file_proto = ParseTextOrDie(R"pb(
+ name: "foo.proto"
+ syntax: "editions"
+ edition: EDITION_PROTO3
+ )pb");
+
+ BuildDescriptorMessagesInTestPool();
+ const FileDescriptor* file = ABSL_DIE_IF_NULL(pool_.BuildFile(file_proto));
+ EXPECT_THAT(GetFeatures(file), EqualsProto(R"pb(
+ field_presence: EXPLICIT
+ enum_type: CLOSED
+ repeated_field_encoding: EXPANDED
+ utf8_validation: VERIFY
+ message_encoding: LENGTH_PREFIXED
+ json_format: ALLOW
+ )pb"));
+}
+
+
TEST_F(ValidationErrorTest, ExtensionDeclarationsMatchFullNameCompile) {
diff --git a/src/google/protobuf/duration.pb.cc b/src/google/protobuf/duration.pb.cc
index bdbcf29..0cd69b6 100644
--- a/src/google/protobuf/duration.pb.cc
+++ b/src/google/protobuf/duration.pb.cc
@@ -115,9 +115,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fduration_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fduration_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fduration_2eproto(&descriptor_table_google_2fprotobuf_2fduration_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -162,12 +159,15 @@
const ::google::protobuf::MessageLite::ClassData*
Duration::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Duration::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Duration, _impl_._cached_size_),
+ false,
+ },
+ &Duration::MergeImpl,
+ &Duration::kDescriptorMethods,
};
return &_data_;
}
@@ -284,7 +284,7 @@
}
-void Duration::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Duration::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Duration*>(&to_msg);
auto& from = static_cast<const Duration&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Duration)
@@ -293,10 +293,10 @@
(void) cached_has_bits;
if (from._internal_seconds() != 0) {
- _this->_internal_set_seconds(from._internal_seconds());
+ _this->_impl_.seconds_ = from._impl_.seconds_;
}
if (from._internal_nanos() != 0) {
- _this->_internal_set_nanos(from._internal_nanos());
+ _this->_impl_.nanos_ = from._impl_.nanos_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -324,9 +324,9 @@
}
::google::protobuf::Metadata Duration::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fduration_2eproto_getter, &descriptor_table_google_2fprotobuf_2fduration_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fduration_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fduration_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fduration_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fduration_2eproto[0]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -336,4 +336,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fduration_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/duration.pb.h b/src/google/protobuf/duration.pb.h
index c20d3ee..816a6d7 100644
--- a/src/google/protobuf/duration.pb.h
+++ b/src/google/protobuf/duration.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -71,21 +65,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Duration final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Duration) */ {
+class PROTOBUF_EXPORT Duration final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Duration) */ {
public:
inline Duration() : Duration(nullptr) {}
~Duration() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Duration(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Duration(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Duration(const Duration& from)
- : Duration(nullptr, from) {}
- Duration(Duration&& from) noexcept
- : Duration() {
- *this = ::std::move(from);
- }
-
+ inline Duration(const Duration& from) : Duration(nullptr, from) {}
+ inline Duration(Duration&& from) noexcept
+ : Duration(nullptr, std::move(from)) {}
inline Duration& operator=(const Duration& from) {
CopyFrom(from);
return *this;
@@ -93,9 +84,9 @@
inline Duration& operator=(Duration&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -127,22 +118,17 @@
}
static inline const Duration* internal_default_instance() {
return reinterpret_cast<const Duration*>(
- &_Duration_default_instance_);
+ &_Duration_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(Duration& a, Duration& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(Duration& a, Duration& b) { a.Swap(&b); }
inline void Swap(Duration* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -162,11 +148,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Duration& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Duration& from) {
- Duration::MergeImpl(*this, from);
- }
+ void MergeFrom(const Duration& from) { Duration::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -174,31 +162,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Duration* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Duration";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Duration"; }
+
+ protected:
explicit Duration(::google::protobuf::Arena* arena);
Duration(::google::protobuf::Arena* arena, const Duration& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Duration(::google::protobuf::Arena* arena, Duration&& from) noexcept
+ : Duration(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kSecondsFieldNumber = 1,
kNanosFieldNumber = 2,
@@ -226,7 +216,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Duration)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -238,14 +227,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::int64_t seconds_;
::int32_t nanos_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
@@ -290,7 +278,6 @@
}
inline void Duration::_internal_set_seconds(::int64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.seconds_ = value;
}
@@ -313,7 +300,6 @@
}
inline void Duration::_internal_set_nanos(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.nanos_ = value;
}
diff --git a/src/google/protobuf/dynamic_message.cc b/src/google/protobuf/dynamic_message.cc
index 94d7e45..0c4ee1b 100644
--- a/src/google/protobuf/dynamic_message.cc
+++ b/src/google/protobuf/dynamic_message.cc
@@ -49,7 +49,6 @@
#include "google/protobuf/arenastring.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/extension_set.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/generated_message_util.h"
@@ -84,8 +83,7 @@
inline bool InRealOneof(const FieldDescriptor* field) {
- return field->containing_oneof() &&
- !OneofDescriptorLegacy(field->containing_oneof()).is_synthetic();
+ return field->real_containing_oneof() != nullptr;
}
// Compute the byte size of the in-memory representation of the field.
@@ -205,11 +203,14 @@
Message* New(Arena* arena) const override;
const ClassData* GetClassData() const final {
- ABSL_CONST_INIT static const ClassData data = {
+ ABSL_CONST_INIT static const ClassDataFull data = {
+ {
+ nullptr, // on_demand_register_arena_dtor
+ PROTOBUF_FIELD_OFFSET(DynamicMessage, cached_byte_size_),
+ false,
+ },
&MergeImpl,
- nullptr, // on_demand_register_arena_dtor
&kDescriptorMethods,
- PROTOBUF_FIELD_OFFSET(DynamicMessage, cached_byte_size_),
};
return &data;
}
@@ -351,16 +352,15 @@
// constructor.)
const Descriptor* descriptor = type_info_->type;
+ Arena* arena = GetArena();
// Initialize oneof cases.
int oneof_count = 0;
- for (int i = 0; i < descriptor->oneof_decl_count(); ++i) {
- if (OneofDescriptorLegacy(descriptor->oneof_decl(i)).is_synthetic())
- continue;
+ for (int i = 0; i < descriptor->real_oneof_decl_count(); ++i) {
new (MutableOneofCaseRaw(oneof_count++)) uint32_t{0};
}
if (type_info_->extensions_offset != -1) {
- new (MutableExtensionsRaw()) ExtensionSet(GetArena());
+ new (MutableExtensionsRaw()) ExtensionSet(arena);
}
for (int i = 0; i < descriptor->field_count(); i++) {
const FieldDescriptor* field = descriptor->field(i);
@@ -374,7 +374,7 @@
if (!field->is_repeated()) { \
new (field_ptr) TYPE(field->default_value_##TYPE()); \
} else { \
- new (field_ptr) RepeatedField<TYPE>(GetArena()); \
+ new (field_ptr) RepeatedField<TYPE>(arena); \
} \
break;
@@ -391,7 +391,7 @@
if (!field->is_repeated()) {
new (field_ptr) int{field->default_value_enum()->number()};
} else {
- new (field_ptr) RepeatedField<int>(GetArena());
+ new (field_ptr) RepeatedField<int>(arena);
}
break;
@@ -403,7 +403,7 @@
ArenaStringPtr* asp = new (field_ptr) ArenaStringPtr();
asp->InitDefault();
} else {
- new (field_ptr) RepeatedPtrField<std::string>(GetArena());
+ new (field_ptr) RepeatedPtrField<std::string>(arena);
}
break;
}
@@ -418,20 +418,20 @@
// when the constructor is called inside GetPrototype(), in which
// case we have already locked the factory.
if (lock_factory) {
- if (GetArena() != nullptr) {
+ if (arena != nullptr) {
new (field_ptr) DynamicMapField(
type_info_->factory->GetPrototype(field->message_type()),
- GetArena());
+ arena);
} else {
new (field_ptr) DynamicMapField(
type_info_->factory->GetPrototype(field->message_type()));
}
} else {
- if (GetArena() != nullptr) {
+ if (arena != nullptr) {
new (field_ptr)
DynamicMapField(type_info_->factory->GetPrototypeNoLock(
field->message_type()),
- GetArena());
+ arena);
} else {
new (field_ptr)
DynamicMapField(type_info_->factory->GetPrototypeNoLock(
@@ -439,7 +439,7 @@
}
}
} else {
- new (field_ptr) RepeatedPtrField<Message>(GetArena());
+ new (field_ptr) RepeatedPtrField<Message>(arena);
}
}
break;
@@ -626,7 +626,9 @@
const Descriptor* type) {
if (delegate_to_generated_factory_ &&
type->file()->pool() == DescriptorPool::generated_pool()) {
- return MessageFactory::generated_factory()->GetPrototype(type);
+ const Message* result = MessageFactory::TryGetGeneratedPrototype(type);
+ if (result != nullptr) return result;
+ // Otherwise, we will create it dynamically so keep going.
}
const TypeInfo** target = &prototypes_[type];
@@ -649,12 +651,7 @@
// this block.
// - A big bitfield containing a bit for each field indicating whether
// or not that field is set.
- int real_oneof_count = 0;
- for (int i = 0; i < type->oneof_decl_count(); i++) {
- if (!OneofDescriptorLegacy(type->oneof_decl(i)).is_synthetic()) {
- real_oneof_count++;
- }
- }
+ int real_oneof_count = type->real_oneof_decl_count();
// Compute size and offsets.
uint32_t* offsets = new uint32_t[type->field_count() + real_oneof_count];
@@ -724,12 +721,10 @@
}
// The oneofs.
- for (int i = 0; i < type->oneof_decl_count(); i++) {
- if (!OneofDescriptorLegacy(type->oneof_decl(i)).is_synthetic()) {
- size = AlignTo(size, kSafeAlignment);
- offsets[type->field_count() + i] = size;
- size += kMaxOneofUnionSize;
- }
+ for (int i = 0; i < type->real_oneof_decl_count(); i++) {
+ size = AlignTo(size, kSafeAlignment);
+ offsets[type->field_count() + i] = size;
+ size += kMaxOneofUnionSize;
}
type_info->weak_field_map_offset = -1;
@@ -742,10 +737,9 @@
// Compute the size of default oneof instance and offsets of default
// oneof fields.
- for (int i = 0; i < type->oneof_decl_count(); i++) {
- if (OneofDescriptorLegacy(type->oneof_decl(i)).is_synthetic()) continue;
- for (int j = 0; j < type->oneof_decl(i)->field_count(); j++) {
- const FieldDescriptor* field = type->oneof_decl(i)->field(j);
+ for (int i = 0; i < type->real_oneof_decl_count(); i++) {
+ for (int j = 0; j < type->real_oneof_decl(i)->field_count(); j++) {
+ const FieldDescriptor* field = type->real_oneof_decl(i)->field(j);
// oneof fields are not accessed through offsets, but we still have the
// entry from a legacy implementation. This should be removed at some
// point.
diff --git a/src/google/protobuf/editions/BUILD b/src/google/protobuf/editions/BUILD
index cba6363..76d1a0e 100644
--- a/src/google/protobuf/editions/BUILD
+++ b/src/google/protobuf/editions/BUILD
@@ -1,7 +1,10 @@
load("@rules_python//python:proto.bzl", "py_proto_library")
+load("//rust:defs.bzl", "rust_cc_proto_library", "rust_upb_proto_library")
+load("//bazel:upb_proto_library.bzl", "upb_c_proto_library", "upb_proto_reflection_library")
load("@rules_cc//cc:defs.bzl", "cc_proto_library")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load(":defaults.bzl", "compile_edition_defaults", "embed_edition_defaults")
+load("//:protobuf.bzl", "internal_objc_proto_library")
bzl_library(
name = "defaults",
@@ -81,6 +84,7 @@
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:string_view",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
@@ -99,6 +103,14 @@
deps = [":test_messages_proto2_editions_proto"],
)
+internal_objc_proto_library(
+ name = "test_messages_proto2_editions_objc_proto",
+ testonly = True,
+ srcs = ["golden/test_messages_proto2_editions.proto"],
+ enable_editions = True,
+ visibility = ["//conformance:__pkg__"],
+)
+
py_proto_library(
name = "test_messages_proto2_editions_py_pb2",
testonly = True,
@@ -106,6 +118,33 @@
deps = [":test_messages_proto2_editions_proto"],
)
+rust_cc_proto_library(
+ name = "test_messages_proto2_editions_rust_cc_proto",
+ testonly = True,
+ visibility = ["//conformance:__pkg__"],
+ deps = [":test_messages_proto2_editions_cc_proto"],
+)
+
+rust_upb_proto_library(
+ name = "test_messages_proto2_editions_rust_upb_proto",
+ testonly = True,
+ visibility = ["//conformance:__pkg__"],
+ deps = [":test_messages_proto2_editions_proto"],
+)
+
+upb_c_proto_library(
+ name = "test_messages_proto2_editions_upb_proto",
+ testonly = 1,
+ deps = [":test_messages_proto2_editions_proto"],
+)
+
+upb_proto_reflection_library(
+ name = "test_messages_proto2_editions_upbdefs",
+ testonly = 1,
+ visibility = ["//upb/conformance:__pkg__"],
+ deps = [":test_messages_proto2_editions_proto"],
+)
+
proto_library(
name = "test_messages_proto3_editions_proto",
testonly = True,
@@ -128,6 +167,19 @@
deps = [":test_messages_proto3_editions_proto"],
)
+internal_objc_proto_library(
+ name = "test_messages_proto3_editions_objc_proto",
+ testonly = True,
+ srcs = ["golden/test_messages_proto3_editions.proto"],
+ enable_editions = True,
+ includes = [
+ ".",
+ "src",
+ ],
+ proto_deps = ["//:well_known_type_protos"],
+ visibility = ["//conformance:__pkg__"],
+)
+
py_proto_library(
name = "test_messages_proto3_editions_py_pb2",
testonly = True,
@@ -135,6 +187,33 @@
deps = [":test_messages_proto3_editions_proto"],
)
+rust_cc_proto_library(
+ name = "test_messages_proto3_editions_rust_cc_proto",
+ testonly = True,
+ visibility = ["//conformance:__pkg__"],
+ deps = [":test_messages_proto3_editions_cc_proto"],
+)
+
+rust_upb_proto_library(
+ name = "test_messages_proto3_editions_rust_upb_proto",
+ testonly = True,
+ visibility = ["//conformance:__pkg__"],
+ deps = [":test_messages_proto3_editions_proto"],
+)
+
+upb_c_proto_library(
+ name = "test_messages_proto3_editions_upb_proto",
+ testonly = 1,
+ deps = [":test_messages_proto3_editions_proto"],
+)
+
+upb_proto_reflection_library(
+ name = "test_messages_proto3_editions_upbdefs",
+ testonly = 1,
+ visibility = ["//upb/conformance:__pkg__"],
+ deps = ["test_messages_proto3_editions_proto"],
+)
+
# Export these for conformance tests until we support py_proto_library.
exports_files(
[
@@ -168,6 +247,7 @@
":test_messages_proto3_editions_cc_proto",
"//:protobuf",
"//src/google/protobuf:test_textproto",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
@@ -177,6 +257,7 @@
srcs = ["generated_reflection_test.cc"],
deps = [
":test_messages_proto2_editions_cc_proto",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
diff --git a/src/google/protobuf/editions/golden/editions_transform_proto2.proto b/src/google/protobuf/editions/golden/editions_transform_proto2.proto
index 0c483d1..c8e9fb2 100644
--- a/src/google/protobuf/editions/golden/editions_transform_proto2.proto
+++ b/src/google/protobuf/editions/golden/editions_transform_proto2.proto
@@ -10,7 +10,7 @@
// This file contains various edge cases we've collected from migrating real
// protos in order to lock down the transformations.
-// LINT:ALLOW_GROUPS
+// LINT: ALLOW_GROUPS
package protobuf_editions_test;
@@ -18,7 +18,6 @@
import "google/protobuf/cpp_features.proto";
import "google/protobuf/editions/proto/editions_transform_proto3.proto";
-option features.enum_type = CLOSED;
option features.repeated_field_encoding = EXPANDED;
option features.utf8_validation = NONE;
option java_multiple_files = true;
@@ -34,7 +33,7 @@
}
service BasicService {
- rpc BasicMethod(EmptyMessage) returns (EmptyMessage);
+ rpc BasicMethod(EmptyMessage) returns (EmptyMessage) {}
}
// clang-format off
@@ -63,8 +62,8 @@
message ExtendedMessage {
extensions 536860000 to 536869999 [
declaration = {
- number: 536860000,
- full_name: ".protobuf_editions_test.extension",
+ number: 536860000
+ full_name: ".protobuf_editions_test.extension"
type: ".protobuf_editions_test.EmptyMessage"
}
];
@@ -110,6 +109,8 @@
}
enum TestEnum {
+ option features.enum_type = CLOSED;
+
FOO = 1; // Non-zero default
BAR = 2;
diff --git a/src/google/protobuf/editions/golden/test_messages_proto2_editions.proto b/src/google/protobuf/editions/golden/test_messages_proto2_editions.proto
index 3d9e9ad..9f4f198 100644
--- a/src/google/protobuf/editions/golden/test_messages_proto2_editions.proto
+++ b/src/google/protobuf/editions/golden/test_messages_proto2_editions.proto
@@ -9,7 +9,7 @@
//
// - conformance tests
-// LINT:ALLOW_GROUPS
+// LINT: ALLOW_GROUPS
edition = "2023";
@@ -19,7 +19,7 @@
option features.repeated_field_encoding = EXPANDED;
option features.utf8_validation = NONE;
option java_package = "com.google.protobuf_test_messages.editions.proto2";
-option objc_class_prefix = "Proto2";
+option objc_class_prefix = "EditionsProto2";
// This is the default, but we specify it here explicitly.
option optimize_for = SPEED;
@@ -264,11 +264,11 @@
];
float default_float = 251 [
- default = 9.0E9
+ default = 9e9
];
double default_double = 252 [
- default = 7.0E22
+ default = 7e22
];
bool default_bool = 253 [
@@ -567,12 +567,12 @@
float default_float = 251 [
features.field_presence = LEGACY_REQUIRED,
- default = 9.0E9
+ default = 9e9
];
double default_double = 252 [
features.field_presence = LEGACY_REQUIRED,
- default = 7.0E22
+ default = 7e22
];
bool default_bool = 253 [
diff --git a/src/google/protobuf/editions/golden/test_messages_proto3_editions.proto b/src/google/protobuf/editions/golden/test_messages_proto3_editions.proto
index 9dbf63e..c092ea6 100644
--- a/src/google/protobuf/editions/golden/test_messages_proto3_editions.proto
+++ b/src/google/protobuf/editions/golden/test_messages_proto3_editions.proto
@@ -24,7 +24,7 @@
option features.field_presence = IMPLICIT;
option java_package = "com.google.protobuf_test_messages.editions.proto3";
-option objc_class_prefix = "Proto3";
+option objc_class_prefix = "EditionsProto3";
// This is the default, but we specify it here explicitly.
option optimize_for = SPEED;
diff --git a/src/google/protobuf/empty.pb.cc b/src/google/protobuf/empty.pb.cc
index cc9d9bf..5304e38 100644
--- a/src/google/protobuf/empty.pb.cc
+++ b/src/google/protobuf/empty.pb.cc
@@ -104,9 +104,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fempty_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fempty_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fempty_2eproto(&descriptor_table_google_2fprotobuf_2fempty_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -140,9 +137,9 @@
::google::protobuf::Metadata Empty::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fempty_2eproto_getter, &descriptor_table_google_2fprotobuf_2fempty_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fempty_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fempty_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fempty_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fempty_2eproto[0]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -152,4 +149,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fempty_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/empty.pb.h b/src/google/protobuf/empty.pb.h
index a5ca022..75f41a0 100644
--- a/src/google/protobuf/empty.pb.h
+++ b/src/google/protobuf/empty.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -72,20 +66,17 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Empty final :
- public ::google::protobuf::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:google.protobuf.Empty) */ {
+class PROTOBUF_EXPORT Empty final : public ::google::protobuf::internal::ZeroFieldsBase
+/* @@protoc_insertion_point(class_definition:google.protobuf.Empty) */ {
public:
inline Empty() : Empty(nullptr) {}
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Empty(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Empty(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Empty(const Empty& from)
- : Empty(nullptr, from) {}
- Empty(Empty&& from) noexcept
- : Empty() {
- *this = ::std::move(from);
- }
-
+ inline Empty(const Empty& from) : Empty(nullptr, from) {}
+ inline Empty(Empty&& from) noexcept
+ : Empty(nullptr, std::move(from)) {}
inline Empty& operator=(const Empty& from) {
CopyFrom(from);
return *this;
@@ -93,9 +84,9 @@
inline Empty& operator=(Empty&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -127,22 +118,17 @@
}
static inline const Empty* internal_default_instance() {
return reinterpret_cast<const Empty*>(
- &_Empty_default_instance_);
+ &_Empty_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(Empty& a, Empty& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(Empty& a, Empty& b) { a.Swap(&b); }
inline void Swap(Empty* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -167,42 +153,41 @@
void MergeFrom(const Empty& from) {
::google::protobuf::internal::ZeroFieldsBase::MergeImpl(*this, from);
}
- public:
- private:
+ public:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Empty";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Empty"; }
+
+ protected:
explicit Empty(::google::protobuf::Arena* arena);
Empty(::google::protobuf::Arena* arena, const Empty& from);
- public:
+ Empty(::google::protobuf::Arena* arena, Empty&& from) noexcept
+ : Empty(arena) {
+ *this = ::std::move(from);
+ }
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
// @@protoc_insertion_point(class_scope:google.protobuf.Empty)
private:
class _Internal;
-
friend class ::google::protobuf::MessageLite;
friend class ::google::protobuf::Arena;
template <typename T>
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
PROTOBUF_TSAN_DECLARE_MEMBER
};
friend struct ::TableStruct_google_2fprotobuf_2fempty_2eproto;
diff --git a/src/google/protobuf/extension_set.cc b/src/google/protobuf/extension_set.cc
index 32528d4..5328fa0 100644
--- a/src/google/protobuf/extension_set.cc
+++ b/src/google/protobuf/extension_set.cc
@@ -630,38 +630,40 @@
ClearExtension(number);
return;
}
- ABSL_DCHECK(message->GetArena() == nullptr || message->GetArena() == arena_);
- Arena* message_arena = message->GetArena();
+ Arena* const arena = arena_;
+ Arena* const message_arena = message->GetArena();
+ ABSL_DCHECK(message_arena == nullptr || message_arena == arena);
+
Extension* extension;
if (MaybeNewExtension(number, descriptor, &extension)) {
extension->type = type;
ABSL_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_MESSAGE);
extension->is_repeated = false;
extension->is_lazy = false;
- if (message_arena == arena_) {
+ if (message_arena == arena) {
extension->message_value = message;
} else if (message_arena == nullptr) {
extension->message_value = message;
- arena_->Own(message); // not nullptr because not equal to message_arena
+ arena->Own(message); // not nullptr because not equal to message_arena
} else {
- extension->message_value = message->New(arena_);
+ extension->message_value = message->New(arena);
extension->message_value->CheckTypeAndMergeFrom(*message);
}
} else {
ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
if (extension->is_lazy) {
- extension->lazymessage_value->SetAllocatedMessage(message, arena_);
+ extension->lazymessage_value->SetAllocatedMessage(message, arena);
} else {
- if (arena_ == nullptr) {
+ if (arena == nullptr) {
delete extension->message_value;
}
- if (message_arena == arena_) {
+ if (message_arena == arena) {
extension->message_value = message;
} else if (message_arena == nullptr) {
extension->message_value = message;
- arena_->Own(message); // not nullptr because not equal to message_arena
+ arena->Own(message); // not nullptr because not equal to message_arena
} else {
- extension->message_value = message->New(arena_);
+ extension->message_value = message->New(arena);
extension->message_value->CheckTypeAndMergeFrom(*message);
}
}
@@ -708,8 +710,9 @@
ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
MessageLite* ret = nullptr;
if (extension->is_lazy) {
- ret = extension->lazymessage_value->ReleaseMessage(prototype, arena_);
- if (arena_ == nullptr) {
+ Arena* const arena = arena_;
+ ret = extension->lazymessage_value->ReleaseMessage(prototype, arena);
+ if (arena == nullptr) {
delete extension->lazymessage_value;
}
} else {
@@ -737,9 +740,10 @@
ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
MessageLite* ret = nullptr;
if (extension->is_lazy) {
+ Arena* const arena = arena_;
ret = extension->lazymessage_value->UnsafeArenaReleaseMessage(prototype,
- arena_);
- if (arena_ == nullptr) {
+ arena);
+ if (arena == nullptr) {
delete extension->lazymessage_value;
}
} else {
@@ -994,10 +998,11 @@
HANDLE_TYPE(STRING, string, RepeatedPtrField<std::string>);
#undef HANDLE_TYPE
- case WireFormatLite::CPPTYPE_MESSAGE:
+ case WireFormatLite::CPPTYPE_MESSAGE: {
+ Arena* const arena = arena_;
if (is_new) {
extension->repeated_message_value =
- Arena::CreateMessage<RepeatedPtrField<MessageLite>>(arena_);
+ Arena::CreateMessage<RepeatedPtrField<MessageLite>>(arena);
}
// We can't call RepeatedPtrField<MessageLite>::MergeFrom() because
// it would attempt to allocate new objects.
@@ -1010,12 +1015,13 @@
extension->repeated_message_value)
->AddFromCleared<GenericTypeHandler<MessageLite>>();
if (target == nullptr) {
- target = other_message.New(arena_);
+ target = other_message.New(arena);
extension->repeated_message_value->AddAllocated(target);
}
target->CheckTypeAndMergeFrom(other_message);
}
break;
+ }
}
} else {
if (!other_extension.is_cleared) {
@@ -1041,6 +1047,7 @@
other_extension.descriptor);
break;
case WireFormatLite::CPPTYPE_MESSAGE: {
+ Arena* const arena = arena_;
Extension* extension;
bool is_new =
MaybeNewExtension(number, other_extension.descriptor, &extension);
@@ -1051,14 +1058,14 @@
if (other_extension.is_lazy) {
extension->is_lazy = true;
extension->lazymessage_value =
- other_extension.lazymessage_value->New(arena_);
+ other_extension.lazymessage_value->New(arena);
extension->lazymessage_value->MergeFrom(
GetPrototypeForLazyMessage(extendee, number),
- *other_extension.lazymessage_value, arena_);
+ *other_extension.lazymessage_value, arena);
} else {
extension->is_lazy = false;
extension->message_value =
- other_extension.message_value->New(arena_);
+ other_extension.message_value->New(arena);
extension->message_value->CheckTypeAndMergeFrom(
*other_extension.message_value);
}
@@ -1070,7 +1077,7 @@
if (extension->is_lazy) {
extension->lazymessage_value->MergeFrom(
GetPrototypeForLazyMessage(extendee, number),
- *other_extension.lazymessage_value, arena_);
+ *other_extension.lazymessage_value, arena);
} else {
extension->message_value->CheckTypeAndMergeFrom(
other_extension.lazymessage_value->GetMessage(
@@ -1079,7 +1086,7 @@
} else {
if (extension->is_lazy) {
extension->lazymessage_value
- ->MutableMessage(*other_extension.message_value, arena_)
+ ->MutableMessage(*other_extension.message_value, arena)
->CheckTypeAndMergeFrom(*other_extension.message_value);
} else {
extension->message_value->CheckTypeAndMergeFrom(
@@ -1097,9 +1104,9 @@
void ExtensionSet::Swap(const MessageLite* extendee, ExtensionSet* other) {
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+ if (arena_ != nullptr && arena_ == other->arena_) {
#else // PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() == other->GetArena()) {
+ if (arena_ == other->arena_) {
#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
@@ -1127,7 +1134,9 @@
ExtensionSet* other, int number) {
if (this == other) return;
- if (GetArena() == other->GetArena()) {
+ Arena* const arena = arena_;
+ Arena* const other_arena = other->arena_;
+ if (arena == other_arena) {
UnsafeShallowSwapExtension(other, number);
return;
}
@@ -1144,23 +1153,20 @@
// We do it this way to reuse the copy-across-arenas logic already
// implemented in ExtensionSet's MergeFrom.
ExtensionSet temp;
- temp.InternalExtensionMergeFrom(extendee, number, *other_ext,
- other->GetArena());
+ temp.InternalExtensionMergeFrom(extendee, number, *other_ext, other_arena);
Extension* temp_ext = temp.FindOrNull(number);
other_ext->Clear();
- other->InternalExtensionMergeFrom(extendee, number, *this_ext,
- this->GetArena());
+ other->InternalExtensionMergeFrom(extendee, number, *this_ext, arena);
this_ext->Clear();
InternalExtensionMergeFrom(extendee, number, *temp_ext, temp.GetArena());
} else if (this_ext == nullptr) {
- InternalExtensionMergeFrom(extendee, number, *other_ext, other->GetArena());
- if (other->GetArena() == nullptr) other_ext->Free();
+ InternalExtensionMergeFrom(extendee, number, *other_ext, other_arena);
+ if (other_arena == nullptr) other_ext->Free();
other->Erase(number);
} else {
- other->InternalExtensionMergeFrom(extendee, number, *this_ext,
- this->GetArena());
- if (GetArena() == nullptr) this_ext->Free();
+ other->InternalExtensionMergeFrom(extendee, number, *this_ext, arena);
+ if (arena == nullptr) this_ext->Free();
Erase(number);
}
}
@@ -1173,7 +1179,7 @@
if (this_ext == other_ext) return;
- ABSL_DCHECK_EQ(GetArena(), other->GetArena());
+ ABSL_DCHECK_EQ(arena_, other->arena_);
if (this_ext != nullptr && other_ext != nullptr) {
std::swap(*this_ext, *other_ext);
@@ -1189,16 +1195,17 @@
bool ExtensionSet::IsInitialized(const MessageLite* extendee) const {
// Extensions are never required. However, we need to check that all
// embedded messages are initialized.
+ Arena* const arena = arena_;
if (PROTOBUF_PREDICT_FALSE(is_large())) {
for (const auto& kv : *map_.large) {
- if (!kv.second.IsInitialized(this, extendee, kv.first, arena_)) {
+ if (!kv.second.IsInitialized(this, extendee, kv.first, arena)) {
return false;
}
}
return true;
}
for (const KeyValue* it = flat_begin(); it != flat_end(); ++it) {
- if (!it->second.IsInitialized(this, extendee, it->first, arena_)) {
+ if (!it->second.IsInitialized(this, extendee, it->first, arena)) {
return false;
}
}
@@ -1445,12 +1452,9 @@
HANDLE_TYPE(GROUP, Group, *message_value);
#undef HANDLE_TYPE
case WireFormatLite::TYPE_MESSAGE: {
- if (is_lazy) {
- // LazyField::ByteSizeLong includes sizeof(length).
- result += lazymessage_value->ByteSizeLong();
- } else {
- result += WireFormatLite::MessageSize(*message_value);
- }
+ result += WireFormatLite::LengthDelimitedSize(
+ is_lazy ? lazymessage_value->ByteSizeLong()
+ : message_value->ByteSizeLong());
break;
}
@@ -1639,8 +1643,9 @@
const KeyValue* begin = flat_begin();
const KeyValue* end = flat_end();
AllocatedData new_map;
+ Arena* const arena = arena_;
if (new_flat_capacity > kMaximumFlatCapacity) {
- new_map.large = Arena::Create<LargeMap>(arena_);
+ new_map.large = Arena::Create<LargeMap>(arena);
LargeMap::iterator hint = new_map.large->begin();
for (const KeyValue* it = begin; it != end; ++it) {
hint = new_map.large->insert(hint, {it->first, it->second});
@@ -1648,11 +1653,11 @@
flat_size_ = static_cast<uint16_t>(-1);
ABSL_DCHECK(is_large());
} else {
- new_map.flat = Arena::CreateArray<KeyValue>(arena_, new_flat_capacity);
+ new_map.flat = Arena::CreateArray<KeyValue>(arena, new_flat_capacity);
std::copy(begin, end, new_map.flat);
}
- if (arena_ == nullptr) {
+ if (arena == nullptr) {
DeleteFlatMap(begin, flat_capacity_);
}
flat_capacity_ = new_flat_capacity;
@@ -1911,11 +1916,9 @@
our_size += io::CodedOutputStream::VarintSize32(number);
// message
- if (is_lazy) {
- our_size += lazymessage_value->ByteSizeLong();
- } else {
- our_size += WireFormatLite::MessageSize(*message_value);
- }
+ our_size += WireFormatLite::LengthDelimitedSize(
+ is_lazy ? lazymessage_value->ByteSizeLong()
+ : message_value->ByteSizeLong());
return our_size;
}
diff --git a/src/google/protobuf/extension_set.h b/src/google/protobuf/extension_set.h
index 74a316e..79754ba 100644
--- a/src/google/protobuf/extension_set.h
+++ b/src/google/protobuf/extension_set.h
@@ -789,7 +789,7 @@
// someone
// adds a new wire type.
}
- PROTOBUF_ASSUME(false); // switch handles all possible enum values
+ Unreachable(); // switch handles all possible enum values
return false;
}
@@ -1003,8 +1003,6 @@
// static inline MutableType Add(int number, ExtensionSet* set);
// This is used by the ExtensionIdentifier constructor to register
// the extension at dynamic initialization.
-// template <typename ExtendeeT>
-// static void Register(int number, FieldType type, bool is_packed);
// };
//
// Not all of these methods make sense for all field types. For example, the
@@ -1030,6 +1028,8 @@
public:
typedef Type ConstType;
typedef Type MutableType;
+ using InitType = ConstType;
+ static const ConstType& FromInitType(const InitType& v) { return v; }
typedef PrimitiveTypeTraits<Type> Singular;
static constexpr bool kLifetimeBound = false;
@@ -1040,11 +1040,6 @@
const ConstType& default_value);
static inline void Set(int number, FieldType field_type, ConstType value,
ExtensionSet* set);
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number,
- type, false, is_packed);
- }
};
template <typename Type>
@@ -1052,6 +1047,8 @@
public:
typedef Type ConstType;
typedef Type MutableType;
+ using InitType = ConstType;
+ static const ConstType& FromInitType(const InitType& v) { return v; }
typedef RepeatedPrimitiveTypeTraits<Type> Repeated;
static constexpr bool kLifetimeBound = false;
@@ -1074,11 +1071,6 @@
ExtensionSet* set);
static const RepeatedFieldType* GetDefaultRepeatedField();
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number,
- type, true, is_packed);
- }
};
class PROTOBUF_EXPORT RepeatedPrimitiveDefaults {
@@ -1178,6 +1170,8 @@
public:
typedef const std::string& ConstType;
typedef std::string* MutableType;
+ using InitType = ConstType;
+ static ConstType FromInitType(InitType v) { return v; }
typedef StringTypeTraits Singular;
static constexpr bool kLifetimeBound = true;
@@ -1197,17 +1191,14 @@
ExtensionSet* set) {
return set->MutableString(number, field_type, nullptr);
}
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number,
- type, false, is_packed);
- }
};
class PROTOBUF_EXPORT RepeatedStringTypeTraits {
public:
typedef const std::string& ConstType;
typedef std::string* MutableType;
+ using InitType = ConstType;
+ static ConstType FromInitType(InitType v) { return v; }
typedef RepeatedStringTypeTraits Repeated;
static constexpr bool kLifetimeBound = true;
@@ -1254,12 +1245,6 @@
static const RepeatedFieldType* GetDefaultRepeatedField();
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number,
- type, true, is_packed);
- }
-
private:
static void InitializeDefaultRepeatedFields();
static void DestroyDefaultRepeatedFields();
@@ -1275,6 +1260,8 @@
public:
typedef Type ConstType;
typedef Type MutableType;
+ using InitType = ConstType;
+ static const ConstType& FromInitType(const InitType& v) { return v; }
typedef EnumTypeTraits<Type, IsValid> Singular;
static constexpr bool kLifetimeBound = false;
@@ -1292,11 +1279,6 @@
ABSL_DCHECK(IsValid(value));
set->SetEnum(number, field_type, value, nullptr);
}
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterEnumExtension(&ExtendeeT::default_instance(), number,
- type, false, is_packed, IsValid);
- }
};
template <typename Type, bool IsValid(int)>
@@ -1304,6 +1286,8 @@
public:
typedef Type ConstType;
typedef Type MutableType;
+ using InitType = ConstType;
+ static const ConstType& FromInitType(const InitType& v) { return v; }
typedef RepeatedEnumTypeTraits<Type, IsValid> Repeated;
static constexpr bool kLifetimeBound = false;
@@ -1358,11 +1342,6 @@
return reinterpret_cast<const RepeatedField<Type>*>(
RepeatedPrimitiveTypeTraits<int32_t>::GetDefaultRepeatedField());
}
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterEnumExtension(&ExtendeeT::default_instance(), number,
- type, true, is_packed, IsValid);
- }
};
// -------------------------------------------------------------------
@@ -1376,6 +1355,10 @@
public:
typedef const Type& ConstType;
typedef Type* MutableType;
+ using InitType = const void*;
+ static ConstType FromInitType(InitType v) {
+ return *static_cast<const Type*>(v);
+ }
typedef MessageTypeTraits<Type> Singular;
static constexpr bool kLifetimeBound = true;
@@ -1414,21 +1397,6 @@
return static_cast<Type*>(
set->UnsafeArenaReleaseMessage(number, Type::default_instance()));
}
- // Some messages won't (can't) be verified; e.g. lite.
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterMessageExtension(
- &ExtendeeT::default_instance(), number, type, false, is_packed,
- &Type::default_instance(), nullptr, LazyAnnotation::kUndefined);
- }
-
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed,
- LazyEagerVerifyFnType fn, LazyAnnotation is_lazy) {
- ExtensionSet::RegisterMessageExtension(
- &ExtendeeT::default_instance(), number, type, false, is_packed,
- &Type::default_instance(), fn, is_lazy);
- }
};
// Used by WireFormatVerify to extract the verify function from the registry.
@@ -1443,6 +1411,10 @@
public:
typedef const Type& ConstType;
typedef Type* MutableType;
+ using InitType = const void*;
+ static ConstType FromInitType(InitType v) {
+ return *static_cast<const Type*>(v);
+ }
typedef RepeatedMessageTypeTraits<Type> Repeated;
static constexpr bool kLifetimeBound = true;
@@ -1489,22 +1461,6 @@
}
static const RepeatedFieldType* GetDefaultRepeatedField();
-
- // Some messages won't (can't) be verified; e.g. lite.
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed) {
- ExtensionSet::RegisterMessageExtension(
- &ExtendeeT::default_instance(), number, type, true, is_packed,
- &Type::default_instance(), nullptr, LazyAnnotation::kUndefined);
- }
-
- template <typename ExtendeeT>
- static void Register(int number, FieldType type, bool is_packed,
- LazyEagerVerifyFnType fn, LazyAnnotation is_lazy) {
- ExtensionSet::RegisterMessageExtension(
- &ExtendeeT::default_instance(), number, type, true, is_packed,
- &Type::default_instance(), fn, is_lazy);
- }
};
template <typename Type>
@@ -1540,79 +1496,28 @@
typedef TypeTraitsType TypeTraits;
typedef ExtendeeType Extendee;
- ExtensionIdentifier(int number, typename TypeTraits::ConstType default_value)
- : number_(number), default_value_(default_value) {
- Register(number);
- }
- ExtensionIdentifier(int number, typename TypeTraits::ConstType default_value,
- LazyEagerVerifyFnType verify_func,
- LazyAnnotation is_lazy = LazyAnnotation::kUndefined)
- : number_(number), default_value_(default_value) {
- Register(number, verify_func, is_lazy);
- }
+ constexpr ExtensionIdentifier(int number,
+ typename TypeTraits::InitType default_value)
+ : number_(number), default_value_(default_value) {}
+
inline int number() const { return number_; }
typename TypeTraits::ConstType default_value() const {
- return default_value_;
- }
-
- static void Register(int number) {
- TypeTraits::template Register<ExtendeeType>(number, field_type, is_packed);
- }
-
- static void Register(int number, LazyEagerVerifyFnType verify_func,
- LazyAnnotation is_lazy) {
- TypeTraits::template Register<ExtendeeType>(number, field_type, is_packed,
- verify_func, is_lazy);
+ return TypeTraits::FromInitType(default_value_);
}
typename TypeTraits::ConstType const& default_value_ref() const {
- return default_value_;
+ return TypeTraits::FromInitType(default_value_);
}
private:
const int number_;
- typename TypeTraits::ConstType default_value_;
+ typename TypeTraits::InitType default_value_;
};
// -------------------------------------------------------------------
// Generated accessors
-// Define a specialization of ExtensionIdentifier for bootstrapped extensions
-// that we need to register lazily.
-template <>
-class ExtensionIdentifier<FeatureSet, MessageTypeTraits<::pb::CppFeatures>, 11,
- false> {
- public:
- using TypeTraits = MessageTypeTraits<::pb::CppFeatures>;
- using Extendee = FeatureSet;
-
- explicit constexpr ExtensionIdentifier(int number) : number_(number) {}
-
- int number() const { return number_; }
- const ::pb::CppFeatures& default_value() const { return *default_value_; }
-
- template <typename MessageType = ::pb::CppFeatures,
- typename ExtendeeType = FeatureSet>
- void LazyRegister(
- const MessageType& default_instance = MessageType::default_instance(),
- LazyEagerVerifyFnType verify_func = nullptr) const {
- absl::call_once(once_, [&] {
- default_value_ = &default_instance;
- MessageTypeTraits<MessageType>::template Register<ExtendeeType>(
- number_, 11, false, verify_func, LazyAnnotation::kUndefined);
- });
- }
-
- const ::pb::CppFeatures& default_value_ref() const { return *default_value_; }
-
- private:
- const int number_;
- mutable const ::pb::CppFeatures* default_value_ = nullptr;
- mutable absl::once_flag once_;
-};
-
-
} // namespace internal
// Call this function to ensure that this extensions's reflection is linked into
diff --git a/src/google/protobuf/field_mask.pb.cc b/src/google/protobuf/field_mask.pb.cc
index 6d7a385..d474ff3 100644
--- a/src/google/protobuf/field_mask.pb.cc
+++ b/src/google/protobuf/field_mask.pb.cc
@@ -113,9 +113,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2ffield_5fmask_2eproto(&descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -168,12 +165,15 @@
const ::google::protobuf::MessageLite::ClassData*
FieldMask::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FieldMask::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FieldMask, _impl_._cached_size_),
+ false,
+ },
+ &FieldMask::MergeImpl,
+ &FieldMask::kDescriptorMethods,
};
return &_data_;
}
@@ -273,7 +273,7 @@
}
-void FieldMask::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FieldMask::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FieldMask*>(&to_msg);
auto& from = static_cast<const FieldMask&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FieldMask)
@@ -303,9 +303,9 @@
}
::google::protobuf::Metadata FieldMask::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_getter, &descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ffield_5fmask_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ffield_5fmask_2eproto[0]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -315,4 +315,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/field_mask.pb.h b/src/google/protobuf/field_mask.pb.h
index 24cf98b..84399b4 100644
--- a/src/google/protobuf/field_mask.pb.h
+++ b/src/google/protobuf/field_mask.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -71,21 +65,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FieldMask final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldMask) */ {
+class PROTOBUF_EXPORT FieldMask final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FieldMask) */ {
public:
inline FieldMask() : FieldMask(nullptr) {}
~FieldMask() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FieldMask(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FieldMask(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FieldMask(const FieldMask& from)
- : FieldMask(nullptr, from) {}
- FieldMask(FieldMask&& from) noexcept
- : FieldMask() {
- *this = ::std::move(from);
- }
-
+ inline FieldMask(const FieldMask& from) : FieldMask(nullptr, from) {}
+ inline FieldMask(FieldMask&& from) noexcept
+ : FieldMask(nullptr, std::move(from)) {}
inline FieldMask& operator=(const FieldMask& from) {
CopyFrom(from);
return *this;
@@ -93,9 +84,9 @@
inline FieldMask& operator=(FieldMask&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -127,22 +118,17 @@
}
static inline const FieldMask* internal_default_instance() {
return reinterpret_cast<const FieldMask*>(
- &_FieldMask_default_instance_);
+ &_FieldMask_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(FieldMask& a, FieldMask& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(FieldMask& a, FieldMask& b) { a.Swap(&b); }
inline void Swap(FieldMask* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -162,11 +148,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FieldMask& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FieldMask& from) {
- FieldMask::MergeImpl(*this, from);
- }
+ void MergeFrom(const FieldMask& from) { FieldMask::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -174,31 +162,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FieldMask* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FieldMask";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FieldMask"; }
+
+ protected:
explicit FieldMask(::google::protobuf::Arena* arena);
FieldMask(::google::protobuf::Arena* arena, const FieldMask& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FieldMask(::google::protobuf::Arena* arena, FieldMask&& from) noexcept
+ : FieldMask(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kPathsFieldNumber = 1,
};
@@ -233,7 +223,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FieldMask)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -245,14 +234,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField<std::string> paths_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
@@ -325,8 +313,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldMask.paths)
}
inline void FieldMask::set_paths(int index, absl::string_view value) {
- _internal_mutable_paths()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_paths()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.FieldMask.paths)
}
inline void FieldMask::add_paths(const std::string& value) {
@@ -353,7 +341,8 @@
}
inline void FieldMask::add_paths(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_paths()->Add()->assign(value.data(), value.size());
+ _internal_mutable_paths()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.FieldMask.paths)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
diff --git a/src/google/protobuf/generated_message_bases.cc b/src/google/protobuf/generated_message_bases.cc
index 45bdf0c..9ebd820 100644
--- a/src/google/protobuf/generated_message_bases.cc
+++ b/src/google/protobuf/generated_message_bases.cc
@@ -10,6 +10,7 @@
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/io/zero_copy_stream_impl.h"
+#include "google/protobuf/message_lite.h"
#include "google/protobuf/parse_context.h"
#include "google/protobuf/unknown_field_set.h"
#include "google/protobuf/wire_format.h"
@@ -76,7 +77,8 @@
return target;
}
-void ZeroFieldsBase::MergeImpl(Message& to_param, const Message& from_param) {
+void ZeroFieldsBase::MergeImpl(MessageLite& to_param,
+ const MessageLite& from_param) {
auto* to = static_cast<ZeroFieldsBase*>(&to_param);
const auto* from = static_cast<const ZeroFieldsBase*>(&from_param);
ABSL_DCHECK_NE(from, to);
@@ -96,11 +98,14 @@
}
const Message::ClassData* ZeroFieldsBase::GetClassData() const {
- ABSL_CONST_INIT static const ClassData data = {
+ ABSL_CONST_INIT static const ClassDataFull data = {
+ {
+ nullptr, // on_demand_register_arena_dtor
+ PROTOBUF_FIELD_OFFSET(ZeroFieldsBase, _cached_size_),
+ false,
+ },
&MergeImpl,
- nullptr, // on_demand_register_arena_dtor
&kDescriptorMethods,
- PROTOBUF_FIELD_OFFSET(ZeroFieldsBase, _cached_size_),
};
return &data;
}
diff --git a/src/google/protobuf/generated_message_bases.h b/src/google/protobuf/generated_message_bases.h
index 4cd9757..9e649d6 100644
--- a/src/google/protobuf/generated_message_bases.h
+++ b/src/google/protobuf/generated_message_bases.h
@@ -47,7 +47,7 @@
const ClassData* GetClassData() const final;
- static void MergeImpl(Message& to, const Message& from);
+ static void MergeImpl(MessageLite& to, const MessageLite& from);
static void CopyImpl(Message& to, const Message& from);
void InternalSwap(ZeroFieldsBase* other);
diff --git a/src/google/protobuf/generated_message_reflection.cc b/src/google/protobuf/generated_message_reflection.cc
index d721060..647b4cc 100644
--- a/src/google/protobuf/generated_message_reflection.cc
+++ b/src/google/protobuf/generated_message_reflection.cc
@@ -30,7 +30,6 @@
#include "absl/synchronization/mutex.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/extension_set.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_tctable_gen.h"
@@ -39,6 +38,7 @@
#include "google/protobuf/inlined_string_field.h"
#include "google/protobuf/map_field.h"
#include "google/protobuf/map_field_inl.h"
+#include "google/protobuf/message.h"
#include "google/protobuf/raw_ptr.h"
#include "google/protobuf/repeated_field.h"
#include "google/protobuf/unknown_field_set.h"
@@ -1007,7 +1007,7 @@
const FieldDescriptor* field;
};
- ABSL_DCHECK(!OneofDescriptorLegacy(oneof_descriptor).is_synthetic());
+ ABSL_DCHECK(!oneof_descriptor->is_synthetic());
uint32_t oneof_case_lhs = GetOneofCase(*lhs, oneof_descriptor);
uint32_t oneof_case_rhs = GetOneofCase(*rhs, oneof_descriptor);
@@ -1044,21 +1044,24 @@
}
}
-void Reflection::Swap(Message* message1, Message* message2) const {
- if (message1 == message2) return;
+void Reflection::Swap(Message* lhs, Message* rhs) const {
+ if (lhs == rhs) return;
+
+ Arena* lhs_arena = lhs->GetArena();
+ Arena* rhs_arena = rhs->GetArena();
// TODO: Other Reflection methods should probably check this too.
- ABSL_CHECK_EQ(message1->GetReflection(), this)
+ ABSL_CHECK_EQ(lhs->GetReflection(), this)
<< "First argument to Swap() (of type \""
- << message1->GetDescriptor()->full_name()
+ << lhs->GetDescriptor()->full_name()
<< "\") is not compatible with this reflection object (which is for type "
"\""
<< descriptor_->full_name()
<< "\"). Note that the exact same class is required; not just the same "
"descriptor.";
- ABSL_CHECK_EQ(message2->GetReflection(), this)
+ ABSL_CHECK_EQ(rhs->GetReflection(), this)
<< "Second argument to Swap() (of type \""
- << message2->GetDescriptor()->full_name()
+ << rhs->GetDescriptor()->full_name()
<< "\") is not compatible with this reflection object (which is for type "
"\""
<< descriptor_->full_name()
@@ -1068,32 +1071,31 @@
// Check that both messages are in the same arena (or both on the heap). We
// need to copy all data if not, due to ownership semantics.
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (message1->GetArena() == nullptr ||
- message1->GetArena() != message2->GetArena()) {
+ if (lhs_arena == nullptr || lhs_arena != rhs_arena) {
#else // PROTOBUF_FORCE_COPY_IN_SWAP
- if (message1->GetArena() != message2->GetArena()) {
+ if (lhs_arena != rhs_arena) {
#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
// One of the two is guaranteed to have an arena. Switch things around
- // to guarantee that message1 has an arena.
- Arena* arena = message1->GetArena();
+ // to guarantee that lhs has an arena.
+ Arena* arena = lhs_arena;
if (arena == nullptr) {
- arena = message2->GetArena();
- std::swap(message1, message2); // Swapping names for pointers!
+ arena = rhs_arena;
+ std::swap(lhs, rhs); // Swapping names for pointers!
}
- Message* temp = message1->New(arena);
- temp->MergeFrom(*message2);
- message2->CopyFrom(*message1);
+ Message* temp = lhs->New(arena);
+ temp->MergeFrom(*rhs);
+ rhs->CopyFrom(*lhs);
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- message1->CopyFrom(*temp);
+ lhs->CopyFrom(*temp);
if (arena == nullptr) delete temp;
#else // PROTOBUF_FORCE_COPY_IN_SWAP
- Swap(message1, temp);
+ Swap(lhs, temp);
#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
return;
}
- UnsafeArenaSwap(message1, message2);
+ UnsafeArenaSwap(lhs, rhs);
}
template <bool unsafe_shallow_swap>
@@ -1227,12 +1229,10 @@
if (schema_.IsSplit()) {
std::swap(*MutableSplitField(lhs), *MutableSplitField(rhs));
}
- const int oneof_decl_count = descriptor_->oneof_decl_count();
+ const int oneof_decl_count = descriptor_->real_oneof_decl_count();
for (int i = 0; i < oneof_decl_count; i++) {
- const OneofDescriptor* oneof = descriptor_->oneof_decl(i);
- if (!OneofDescriptorLegacy(oneof).is_synthetic()) {
- SwapOneofField<true>(lhs, rhs, oneof);
- }
+ const OneofDescriptor* oneof = descriptor_->real_oneof_decl(i);
+ SwapOneofField<true>(lhs, rhs, oneof);
}
// Swapping bits need to happen after swapping fields, because the latter may
@@ -2318,27 +2318,34 @@
ABSL_DCHECK(sub_message == nullptr || sub_message->GetArena() == nullptr ||
sub_message->GetArena() == message->GetArena());
+ if (sub_message == nullptr) {
+ UnsafeArenaSetAllocatedMessage(message, nullptr, field);
+ return;
+ }
+
+ Arena* arena = message->GetArena();
+ Arena* sub_arena = sub_message->GetArena();
+ if (arena == sub_arena) {
+ UnsafeArenaSetAllocatedMessage(message, sub_message, field);
+ return;
+ }
+
// If message and sub-message are in different memory ownership domains
// (different arenas, or one is on heap and one is not), then we may need to
// do a copy.
- if (sub_message != nullptr &&
- sub_message->GetArena() != message->GetArena()) {
- if (sub_message->GetArena() == nullptr && message->GetArena() != nullptr) {
- // Case 1: parent is on an arena and child is heap-allocated. We can add
- // the child to the arena's Own() list to free on arena destruction, then
- // set our pointer.
- message->GetArena()->Own(sub_message);
- UnsafeArenaSetAllocatedMessage(message, sub_message, field);
- } else {
- // Case 2: all other cases. We need to make a copy. MutableMessage() will
- // either get the existing message object, or instantiate a new one as
- // appropriate w.r.t. our arena.
- Message* sub_message_copy = MutableMessage(message, field);
- sub_message_copy->CopyFrom(*sub_message);
- }
- } else {
- // Same memory ownership domains.
+ if (sub_arena == nullptr) {
+ ABSL_DCHECK_NE(arena, nullptr);
+ // Case 1: parent is on an arena and child is heap-allocated. We can add
+ // the child to the arena's Own() list to free on arena destruction, then
+ // set our pointer.
+ arena->Own(sub_message);
UnsafeArenaSetAllocatedMessage(message, sub_message, field);
+ } else {
+ // Case 2: all other cases. We need to make a copy. MutableMessage() will
+ // either get the existing message object, or instantiate a new one as
+ // appropriate w.r.t. our arena.
+ Message* sub_message_copy = MutableMessage(message, field);
+ sub_message_copy->CopyFrom(*sub_message);
}
}
@@ -2564,7 +2571,7 @@
const FieldDescriptor* Reflection::GetOneofFieldDescriptor(
const Message& message, const OneofDescriptor* oneof_descriptor) const {
- if (OneofDescriptorLegacy(oneof_descriptor).is_synthetic()) {
+ if (oneof_descriptor->is_synthetic()) {
const FieldDescriptor* field = oneof_descriptor->field(0);
return HasField(message, field) ? field : nullptr;
}
@@ -2646,11 +2653,6 @@
return descriptor_pool_->FindExtensionByNumber(descriptor_, number);
}
-bool Reflection::SupportsUnknownEnumValues() const {
- return FileDescriptorLegacy(descriptor_->file()).syntax() ==
- FileDescriptorLegacy::Syntax::SYNTAX_PROTO3;
-}
-
// ===================================================================
// Some private helpers.
@@ -2749,14 +2751,14 @@
uint32_t Reflection::GetOneofCase(
const Message& message, const OneofDescriptor* oneof_descriptor) const {
- ABSL_DCHECK(!OneofDescriptorLegacy(oneof_descriptor).is_synthetic());
+ ABSL_DCHECK(!oneof_descriptor->is_synthetic());
return internal::GetConstRefAtOffset<uint32_t>(
message, schema_.GetOneofCaseOffset(oneof_descriptor));
}
uint32_t* Reflection::MutableOneofCase(
Message* message, const OneofDescriptor* oneof_descriptor) const {
- ABSL_DCHECK(!OneofDescriptorLegacy(oneof_descriptor).is_synthetic());
+ ABSL_DCHECK(!oneof_descriptor->is_synthetic());
return GetPointerAtOffset<uint32_t>(
message, schema_.GetOneofCaseOffset(oneof_descriptor));
}
@@ -2950,7 +2952,7 @@
bool Reflection::HasOneof(const Message& message,
const OneofDescriptor* oneof_descriptor) const {
- if (OneofDescriptorLegacy(oneof_descriptor).is_synthetic()) {
+ if (oneof_descriptor->is_synthetic()) {
return HasField(message, oneof_descriptor->field(0));
}
return (GetOneofCase(message, oneof_descriptor) > 0);
@@ -2970,7 +2972,7 @@
void Reflection::ClearOneof(Message* message,
const OneofDescriptor* oneof_descriptor) const {
- if (OneofDescriptorLegacy(oneof_descriptor).is_synthetic()) {
+ if (oneof_descriptor->is_synthetic()) {
ClearField(message, oneof_descriptor->field(0));
return;
}
@@ -3222,7 +3224,12 @@
// `operator delete` unconditionally.
void* p = ::operator new(sizeof(Table));
auto* full_table = ::new (p)
- Table{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, schema_.default_instance_, nullptr},
+ Table{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, schema_.default_instance_, nullptr
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ ,
+ nullptr
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
+ },
{{{&internal::TcParser::ReflectionParseLoop, {}}}}};
#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
// We'll prefetch `to_prefetch->to_prefetch` unconditionally to avoid
@@ -3459,7 +3466,12 @@
static_cast<uint16_t>(table_info.aux_entries.size()),
aux_offset,
schema_.default_instance_,
- &internal::TcParser::ReflectionFallback};
+ &internal::TcParser::ReflectionFallback
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ ,
+ nullptr
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
+ };
#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
// We'll prefetch `to_prefetch->to_prefetch` unconditionally to avoid
// branches. Here we don't know which field is the hottest, so set the pointer
@@ -3603,8 +3615,6 @@
std::vector<std::pair<const Metadata*, const Metadata*> > metadata_arrays_;
};
-void AddDescriptors(const DescriptorTable* table);
-
void AssignDescriptorsImpl(const DescriptorTable* table, bool eager) {
// Ensure the file descriptor is added to the pool.
{
@@ -3692,16 +3702,6 @@
MessageFactory::InternalRegisterGeneratedFile(table);
}
-void AddDescriptors(const DescriptorTable* table) {
- // AddDescriptors is not thread safe. Callers need to ensure calls are
- // properly serialized. This function is only called pre-main by global
- // descriptors and we can assume single threaded access or it's called
- // by AssignDescriptorImpl which uses a mutex to sequence calls.
- if (table->is_initialized) return;
- table->is_initialized = true;
- AddDescriptorsImpl(table);
-}
-
} // namespace
// Separate function because it needs to be a friend of
@@ -3717,6 +3717,16 @@
namespace internal {
+void AddDescriptors(const DescriptorTable* table) {
+ // AddDescriptors is not thread safe. Callers need to ensure calls are
+ // properly serialized. This function is only called pre-main by global
+ // descriptors and we can assume single threaded access or it's called
+ // by AssignDescriptorImpl which uses a mutex to sequence calls.
+ if (table->is_initialized) return;
+ table->is_initialized = true;
+ AddDescriptorsImpl(table);
+}
+
Metadata AssignDescriptors(const DescriptorTable* (*table)(),
absl::once_flag* once, const Metadata& metadata) {
absl::call_once(*once, [=] {
@@ -3807,6 +3817,24 @@
return field->is_repeated();
}
+const Message* GetPrototypeForWeakDescriptor(const DescriptorTable* table,
+ int index) {
+ // First, make sure we inject the surviving default instances.
+ InitProtobufDefaults();
+
+ // Now check if the table has it. If so, return it.
+ if (const auto* msg = table->default_instances[index]) {
+ return msg;
+ }
+
+ // Fallback to dynamic messages.
+ // Register the dep and generate the prototype via the generated pool.
+ AssignDescriptors(table);
+ ABSL_CHECK(table->file_level_metadata[index].descriptor != nullptr);
+ return MessageFactory::generated_factory()->GetPrototype(
+ table->file_level_metadata[index].descriptor);
+}
+
} // namespace internal
} // namespace protobuf
} // namespace google
diff --git a/src/google/protobuf/generated_message_reflection.h b/src/google/protobuf/generated_message_reflection.h
index 1df00c3..7b42813 100644
--- a/src/google/protobuf/generated_message_reflection.h
+++ b/src/google/protobuf/generated_message_reflection.h
@@ -15,12 +15,13 @@
#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__
#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__
+#include <atomic>
+#include <cstddef>
+#include <cstdint>
#include <string>
-#include "google/protobuf/stubs/common.h"
#include "absl/base/call_once.h"
-#include "absl/base/casts.h"
-#include "absl/strings/string_view.h"
+#include "absl/log/absl_check.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/generated_enum_reflection.h"
#include "google/protobuf/port.h"
@@ -40,6 +41,10 @@
class MessageLayoutInspector;
class Message;
struct Metadata;
+
+namespace io {
+class CodedOutputStream;
+}
} // namespace protobuf
} // namespace google
@@ -333,10 +338,17 @@
PROTOBUF_EXPORT void InitializeFileDescriptorDefaultInstances();
+PROTOBUF_EXPORT void AddDescriptors(const DescriptorTable* table);
+
struct PROTOBUF_EXPORT AddDescriptorsRunner {
explicit AddDescriptorsRunner(const DescriptorTable* table);
};
+// Retrieves the existing prototype out of a descriptor table.
+// If it doesn't exist, asks the generated message factory for one.
+const Message* GetPrototypeForWeakDescriptor(const DescriptorTable* table,
+ int index);
+
struct DenseEnumCacheInfo {
std::atomic<const std::string**> cache;
int min_val;
diff --git a/src/google/protobuf/generated_message_tctable_decl.h b/src/google/protobuf/generated_message_tctable_decl.h
index 55057a6..72b703b 100644
--- a/src/google/protobuf/generated_message_tctable_decl.h
+++ b/src/google/protobuf/generated_message_tctable_decl.h
@@ -238,7 +238,7 @@
case WireFormatLite::TYPE_GROUP:
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
}
diff --git a/src/google/protobuf/generated_message_tctable_gen.cc b/src/google/protobuf/generated_message_tctable_gen.cc
index 6740e35..b421a35 100644
--- a/src/google/protobuf/generated_message_tctable_gen.cc
+++ b/src/google/protobuf/generated_message_tctable_gen.cc
@@ -412,13 +412,7 @@
// We only need field names for reporting UTF-8 parsing errors, so we only
// emit them for string fields with Utf8 transform specified.
bool NeedsFieldNameForTable(const FieldDescriptor* field, bool is_lite) {
- if (cpp::GetUtf8CheckMode(field, is_lite) == cpp::Utf8CheckMode::kNone)
- return false;
- return field->type() == FieldDescriptor::TYPE_STRING ||
- (field->is_map() && (field->message_type()->map_key()->type() ==
- FieldDescriptor::TYPE_STRING ||
- field->message_type()->map_value()->type() ==
- FieldDescriptor::TYPE_STRING));
+ return cpp::GetUtf8CheckMode(field, is_lite) != cpp::Utf8CheckMode::kNone;
}
absl::string_view FieldNameForTable(
@@ -713,7 +707,7 @@
}
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
}
diff --git a/src/google/protobuf/generated_message_tctable_impl.h b/src/google/protobuf/generated_message_tctable_impl.h
index fb111e3..285bdd3 100644
--- a/src/google/protobuf/generated_message_tctable_impl.h
+++ b/src/google/protobuf/generated_message_tctable_impl.h
@@ -394,6 +394,9 @@
static const char* ParseLoop(MessageLite* msg, const char* ptr,
ParseContext* ctx,
const TcParseTableBase* table);
+ static const char* ParseLoopInlined(MessageLite* msg, const char* ptr,
+ ParseContext* ctx,
+ const TcParseTableBase* table);
// Functions referenced by generated fast tables (numeric types):
// F: fixed V: varint Z: zigzag
diff --git a/src/google/protobuf/generated_message_tctable_lite.cc b/src/google/protobuf/generated_message_tctable_lite.cc
index e37a208..eafa3da 100644
--- a/src/google/protobuf/generated_message_tctable_lite.cc
+++ b/src/google/protobuf/generated_message_tctable_lite.cc
@@ -27,6 +27,7 @@
#include "google/protobuf/map.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/parse_context.h"
+#include "google/protobuf/port.h"
#include "google/protobuf/repeated_field.h"
#include "google/protobuf/repeated_ptr_field.h"
#include "google/protobuf/varint_shuffle.h"
@@ -72,7 +73,7 @@
// Core fast parsing implementation:
//////////////////////////////////////////////////////////////////////////////
-PROTOBUF_NOINLINE const char* TcParser::ParseLoop(
+inline PROTOBUF_ALWAYS_INLINE const char* TcParser::ParseLoopInlined(
MessageLite* msg, const char* ptr, ParseContext* ctx,
const TcParseTableBase* table) {
// Note: TagDispatch uses a dispatch table at "&table->fast_entries".
@@ -97,6 +98,12 @@
return ptr;
}
+PROTOBUF_NOINLINE const char* TcParser::ParseLoop(
+ MessageLite* msg, const char* ptr, ParseContext* ctx,
+ const TcParseTableBase* table) {
+ return ParseLoopInlined(msg, ptr, ctx, table);
+}
+
// On the fast path, a (matching) 1-byte tag already has the decoded value.
static uint32_t FastDecodeTag(uint8_t coded_tag) {
return coded_tag;
@@ -386,11 +393,12 @@
if (field == nullptr) {
field = inner_table->default_instance->New(msg->GetArena());
}
- if (group_coding) {
- return ctx->ParseGroup<TcParser>(field, ptr, FastDecodeTag(saved_tag),
- inner_table);
- }
- return ctx->ParseMessage<TcParser>(field, ptr, inner_table);
+ const auto inner_loop = [&](const char* ptr) {
+ return ParseLoopInlined(field, ptr, ctx, inner_table);
+ };
+ return group_coding ? ctx->ParseGroupInlined(ptr, FastDecodeTag(saved_tag),
+ inner_loop)
+ : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
} else {
if (field == nullptr) {
const MessageLite* default_instance =
@@ -473,12 +481,12 @@
ptr += sizeof(TagType);
MessageLite* submsg = field.AddMessage(default_instance);
if (aux_is_table) {
- if (group_coding) {
- ptr = ctx->ParseGroup<TcParser>(submsg, ptr,
- FastDecodeTag(expected_tag), aux.table);
- } else {
- ptr = ctx->ParseMessage<TcParser>(submsg, ptr, aux.table);
- }
+ const auto inner_loop = [&](const char* ptr) {
+ return ParseLoopInlined(submsg, ptr, ctx, aux.table);
+ };
+ ptr = group_coding ? ctx->ParseGroupInlined(
+ ptr, FastDecodeTag(expected_tag), inner_loop)
+ : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
} else {
if (group_coding) {
ptr = ctx->ParseGroup(submsg, ptr, FastDecodeTag(expected_tag));
@@ -2013,14 +2021,14 @@
is_split, uint32_t, (is_split ? 0 : field_layout::kTvRange)>(
PROTOBUF_TC_PARAM_PASS);
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
case field_layout::kRep8Bits >> field_layout::kRepShift:
PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, bool, 0>(
PROTOBUF_TC_PARAM_PASS);
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
return nullptr; // To silence -Werror=return-type in some toolchains
}
}
@@ -2110,14 +2118,14 @@
is_split, uint32_t, (is_split ? 0 : field_layout::kTvRange)>(
PROTOBUF_TC_PARAM_PASS);
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
case field_layout::kRep8Bits >> field_layout::kRepShift:
PROTOBUF_MUSTTAIL return MpPackedVarintT<is_split, bool, 0>(
PROTOBUF_TC_PARAM_PASS);
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
return nullptr; // To silence -Werror=return-type in some toolchains
}
}
@@ -2216,7 +2224,7 @@
}
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !is_valid)) {
@@ -2368,10 +2376,11 @@
if (need_init || field == nullptr) {
field = inner_table->default_instance->New(msg->GetArena());
}
- if (is_group) {
- return ctx->ParseGroup<TcParser>(field, ptr, decoded_tag, inner_table);
- }
- return ctx->ParseMessage<TcParser>(field, ptr, inner_table);
+ const auto inner_loop = [&](const char* ptr) {
+ return ParseLoop(field, ptr, ctx, inner_table);
+ };
+ return is_group ? ctx->ParseGroupInlined(ptr, decoded_tag, inner_loop)
+ : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
} else {
if (need_init || field == nullptr) {
const MessageLite* def;
@@ -2427,9 +2436,11 @@
uint32_t next_tag;
do {
MessageLite* value = field.AddMessage(default_instance);
- ptr = is_group ? ctx->ParseGroup<TcParser>(value, ptr2, decoded_tag,
- inner_table)
- : ctx->ParseMessage<TcParser>(value, ptr2, inner_table);
+ const auto inner_loop = [&](const char* ptr) {
+ return ParseLoop(value, ptr, ctx, inner_table);
+ };
+ ptr = is_group ? ctx->ParseGroupInlined(ptr2, decoded_tag, inner_loop)
+ : ctx->ParseLengthDelimitedInlined(ptr2, inner_loop);
if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) goto error;
if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
ptr2 = ReadTag(ptr, &next_tag);
@@ -2503,7 +2514,7 @@
}
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
break;
case WireFormatLite::WIRETYPE_FIXED32:
@@ -2522,7 +2533,7 @@
&coded_output);
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
}
@@ -2567,7 +2578,7 @@
aux[1].create_in_arena(map.arena(), reinterpret_cast<MessageLite*>(obj));
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
}
@@ -2661,7 +2672,7 @@
memcpy(obj, &tmp, sizeof(tmp));
continue;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
case WFL::WIRETYPE_FIXED32:
ptr = ReadFixed<uint32_t>(obj, ptr);
@@ -2697,7 +2708,7 @@
continue;
}
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
}
return ptr;
@@ -2772,7 +2783,7 @@
static_cast<KeyMapBase<std::string>::KeyNode*>(node));
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
}
}
diff --git a/src/google/protobuf/generated_message_tctable_lite_test.cc b/src/google/protobuf/generated_message_tctable_lite_test.cc
index 8648712..136fea5 100644
--- a/src/google/protobuf/generated_message_tctable_lite_test.cc
+++ b/src/google/protobuf/generated_message_tctable_lite_test.cc
@@ -14,6 +14,11 @@
#include "google/protobuf/unittest.pb.h"
#include "google/protobuf/wire_format_lite.h"
+
+// clang-format off
+#include "google/protobuf/port_def.inc"
+// clang-format on
+
namespace google {
namespace protobuf {
namespace internal {
@@ -83,6 +88,9 @@
offsetof(decltype(parse_table), field_names), // no aux_entries
nullptr, // default instance
FastParserGaveUp, // fallback
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
// Fast Table:
{{
@@ -274,6 +282,9 @@
0, 0, // num_aux_entries, aux_offset,
nullptr, // default instance
nullptr, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
}};
// clang-format on
int table_field_numbers[] = {1, 2, 3};
@@ -342,6 +353,9 @@
0, 0, // num_aux_entries, aux_offset,
nullptr, // default instance
{}, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
{}, // fast_entries
// field_lookup_table for 2, 3, 4, 5, 111:
@@ -382,6 +396,9 @@
0, 0, // num_aux_entries, aux_offset,
nullptr, // default instance
{}, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
{}, // fast_entries
// field_lookup_table for 1, 3, 4, 5, 7, 111:
@@ -430,6 +447,9 @@
0, 0, // num_aux_entries, aux_offset,
nullptr, // default instance
{}, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
{}, // fast_entries
// field_lookup_table for 1, 3, 4, 5, 6, 8, 9, 11, 12, 70
@@ -475,6 +495,9 @@
offsetof(decltype(table), field_names), // no aux_entries
nullptr, // default instance
{}, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
{}, // fast_entries
{{// field lookup table
@@ -525,6 +548,9 @@
offsetof(TableType, field_names),
nullptr, // default instance
nullptr, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
{}, // fast_entries
{{// empty field lookup table
@@ -575,6 +601,9 @@
offsetof(decltype(test_all_types_table), aux_entries),
nullptr, // default instance
nullptr, // fallback function
+#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
+ nullptr, // to_prefetch
+#endif // PROTOBUF_PREFETCH_PARSE_TABLE
},
{{
// tail-call table
@@ -832,7 +861,7 @@
// This test checks that the parser doesn't overflow an int32 when computing the
// array's new length.
TEST(GeneratedMessageTctableLiteTest, PackedEnumSmallRangeLargeSize) {
-#ifdef ABSL_HAVE_MEMORY_SANITIZER
+#ifdef PROTOBUF_MSAN
// This test attempts to allocate 8GB of memory, which OOMs MSAN.
return;
#endif
diff --git a/src/google/protobuf/generated_message_util.cc b/src/google/protobuf/generated_message_util.cc
index 4893ca8..1bad594 100644
--- a/src/google/protobuf/generated_message_util.cc
+++ b/src/google/protobuf/generated_message_util.cc
@@ -21,6 +21,7 @@
#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/metadata_lite.h"
+#include "google/protobuf/port.h"
#include "google/protobuf/repeated_field.h"
#include "google/protobuf/wire_format_lite.h"
@@ -48,10 +49,32 @@
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT const EmptyCord empty_cord_;
+#if defined(PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED)
+extern "C" {
+// We add a single dummy writer to guarantee the section is never empty.
+WeakDefaultWriter dummy_writer
+ __attribute__((section("pb_defaults"))) = {&dummy_writer.source, nullptr};
+// When using --descriptor_implicit_weak_messages we expect the writer objects
+// to live in the `pb_defaults` section. We load them all using the
+// __start/__end symbols provided by the linker.
+extern const WeakDefaultWriter __start_pb_defaults;
+extern const WeakDefaultWriter __stop_pb_defaults;
+}
+static void InitWeakDefaults() {
+ StrongPointer(&dummy_writer); // force link the dummy writer.
+ for (auto it = &__start_pb_defaults; it != &__stop_pb_defaults; ++it) {
+ *it->destination = it->source;
+ }
+}
+#else
+void InitWeakDefaults() {}
+#endif
+
PROTOBUF_CONSTINIT std::atomic<bool> init_protobuf_defaults_state{false};
static bool InitProtobufDefaultsImpl() {
fixed_address_empty_string.DefaultConstruct();
OnShutdownDestroyString(fixed_address_empty_string.get_mutable());
+ InitWeakDefaults();
init_protobuf_defaults_state.store(true, std::memory_order_release);
diff --git a/src/google/protobuf/generated_message_util.h b/src/google/protobuf/generated_message_util.h
index 72e6649..4c1258f 100644
--- a/src/google/protobuf/generated_message_util.h
+++ b/src/google/protobuf/generated_message_util.h
@@ -316,6 +316,13 @@
std::unique_ptr<storage_type[]> items_;
};
+// Single message link for implicit weak descriptor messages.
+// The runtime will register all the instances that are linked in.
+struct WeakDefaultWriter {
+ const Message** destination;
+ const Message* source;
+};
+
} // namespace internal
} // namespace protobuf
} // namespace google
diff --git a/src/google/protobuf/has_bits.h b/src/google/protobuf/has_bits.h
index 72af335..93cda15 100644
--- a/src/google/protobuf/has_bits.h
+++ b/src/google/protobuf/has_bits.h
@@ -8,6 +8,9 @@
#ifndef GOOGLE_PROTOBUF_HAS_BITS_H__
#define GOOGLE_PROTOBUF_HAS_BITS_H__
+#include <cassert>
+#include <cstddef>
+#include <cstdint>
#include <initializer_list>
#include "google/protobuf/stubs/common.h"
@@ -54,7 +57,12 @@
}
void Or(const HasBits<doublewords>& rhs) {
- for (int i = 0; i < doublewords; i++) has_bits_[i] |= rhs.has_bits_[i];
+ for (int i = 0; (i + 1) < doublewords; i += 2) {
+ Write64B(Read64B(i) | rhs.Read64B(i), i);
+ }
+ if ((doublewords % 2) != 0) {
+ has_bits_[doublewords - 1] |= rhs.has_bits_[doublewords - 1];
+ }
}
bool empty() const;
@@ -75,6 +83,16 @@
}
}
+ uint64_t Read64B(int index) const {
+ uint64_t v;
+ memcpy(&v, has_bits_ + index, sizeof(v));
+ return v;
+ }
+
+ void Write64B(uint64_t v, int index) {
+ memcpy(has_bits_ + index, &v, sizeof(v));
+ }
+
uint32_t has_bits_[doublewords];
};
diff --git a/src/google/protobuf/implicit_weak_message.h b/src/google/protobuf/implicit_weak_message.h
index 7c94d39..708f73a 100644
--- a/src/google/protobuf/implicit_weak_message.h
+++ b/src/google/protobuf/implicit_weak_message.h
@@ -63,10 +63,9 @@
};
static constexpr Data data = {
{
- nullptr, // merge_impl
nullptr, // on_demand_register_arena_dtor
- nullptr, // descriptor_methods
PROTOBUF_FIELD_OFFSET(ImplicitWeakMessage, cached_size_),
+ true,
},
""};
return &data.header;
@@ -167,7 +166,11 @@
// TODO: make this constructor private
explicit WeakRepeatedPtrField(Arena* arena) : weak(arena) {}
- ~WeakRepeatedPtrField() { weak.template Destroy<TypeHandler>(); }
+ ~WeakRepeatedPtrField() {
+ if (weak.NeedsDestroy()) {
+ weak.DestroyProtos();
+ }
+ }
typedef internal::RepeatedPtrIterator<MessageLite> iterator;
typedef internal::RepeatedPtrIterator<const MessageLite> const_iterator;
diff --git a/src/google/protobuf/io/coded_stream.h b/src/google/protobuf/io/coded_stream.h
index 97d62e4..7e4f6a5 100644
--- a/src/google/protobuf/io/coded_stream.h
+++ b/src/google/protobuf/io/coded_stream.h
@@ -1704,38 +1704,68 @@
return WriteVarint32ToArray(value, target);
}
+#if (defined(__x86__) || defined(__x86_64__) || defined(_M_IX86) || \
+ defined(_M_X64)) && \
+ !(defined(__LZCNT__) || defined(__AVX2__))
+// X86 CPUs lacking the lzcnt instruction are faster with the bsr-based
+// implementation. MSVC does not define __LZCNT__, the nearest option that
+// it interprets as lzcnt availability is __AVX2__.
+#define PROTOBUF_CODED_STREAM_H_PREFER_BSR 1
+#else
+#define PROTOBUF_CODED_STREAM_H_PREFER_BSR 0
+#endif
inline size_t CodedOutputStream::VarintSize32(uint32_t value) {
- // This computes value == 0 ? 1 : floor(log2(value)) / 7 + 1
- // Use an explicit multiplication to implement the divide of
- // a number in the 1..31 range.
- //
+#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
// Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
- // requires a branch to check for on many platforms.
- uint32_t log2value = 31 - absl::countl_zero(value | 0x1);
- return static_cast<size_t>((log2value * 9 + 73) / 64);
+ // requires a branch to check for on platforms without a clz instruction.
+ uint32_t log2value = (std::numeric_limits<uint32_t>::digits - 1) -
+ absl::countl_zero(value | 0x1);
+ return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
+#else
+ uint32_t clz = absl::countl_zero(value);
+ return static_cast<size_t>(
+ ((std::numeric_limits<uint32_t>::digits * 9 + 64) - (clz * 9)) / 64);
+#endif
}
inline size_t CodedOutputStream::VarintSize32PlusOne(uint32_t value) {
// Same as above, but one more.
- uint32_t log2value = 31 - absl::countl_zero(value | 0x1);
- return static_cast<size_t>((log2value * 9 + 73 + 64) / 64);
+#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
+ uint32_t log2value = (std::numeric_limits<uint32_t>::digits - 1) -
+ absl::countl_zero(value | 0x1);
+ return static_cast<size_t>((log2value * 9 + (64 + 9) + 64) / 64);
+#else
+ uint32_t clz = absl::countl_zero(value);
+ return static_cast<size_t>(
+ ((std::numeric_limits<uint32_t>::digits * 9 + 64 + 64) - (clz * 9)) / 64);
+#endif
}
inline size_t CodedOutputStream::VarintSize64(uint64_t value) {
- // This computes value == 0 ? 1 : floor(log2(value)) / 7 + 1
- // Use an explicit multiplication to implement the divide of
- // a number in the 1..63 range.
- //
+#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
// Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
- // requires a branch to check for on many platforms.
- uint32_t log2value = 63 - absl::countl_zero(value | 0x1);
- return static_cast<size_t>((log2value * 9 + 73) / 64);
+ // requires a branch to check for on platforms without a clz instruction.
+ uint32_t log2value = (std::numeric_limits<uint64_t>::digits - 1) -
+ absl::countl_zero(value | 0x1);
+ return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
+#else
+ uint32_t clz = absl::countl_zero(value);
+ return static_cast<size_t>(
+ ((std::numeric_limits<uint64_t>::digits * 9 + 64) - (clz * 9)) / 64);
+#endif
}
inline size_t CodedOutputStream::VarintSize64PlusOne(uint64_t value) {
// Same as above, but one more.
- uint32_t log2value = 63 - absl::countl_zero(value | 0x1);
- return static_cast<size_t>((log2value * 9 + 73 + 64) / 64);
+#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
+ uint32_t log2value = (std::numeric_limits<uint64_t>::digits - 1) -
+ absl::countl_zero(value | 0x1);
+ return static_cast<size_t>((log2value * 9 + (64 + 9) + 64) / 64);
+#else
+ uint32_t clz = absl::countl_zero(value);
+ return static_cast<size_t>(
+ ((std::numeric_limits<uint64_t>::digits * 9 + 64 + 64) - (clz * 9)) / 64);
+#endif
}
inline size_t CodedOutputStream::VarintSize32SignExtended(int32_t value) {
@@ -1746,6 +1776,7 @@
int32_t value) {
return VarintSize64PlusOne(static_cast<uint64_t>(int64_t{value}));
}
+#undef PROTOBUF_CODED_STREAM_H_PREFER_BSR
inline void CodedOutputStream::WriteString(const std::string& str) {
WriteRaw(str.data(), static_cast<int>(str.size()));
diff --git a/src/google/protobuf/io/printer.cc b/src/google/protobuf/io/printer.cc
index 621d1ed..5e58b15 100644
--- a/src/google/protobuf/io/printer.cc
+++ b/src/google/protobuf/io/printer.cc
@@ -547,6 +547,9 @@
// If we get this far, we can conclude the chunk is a substitution
// variable; we rename the `chunk` variable to make this clear below.
absl::string_view var = chunk.text;
+ if (substitution_listener_ != nullptr) {
+ substitution_listener_(var, opts.loc.value_or(SourceLocation()));
+ }
if (opts.use_curly_brace_substitutions &&
absl::ConsumePrefix(&var, "{")) {
if (!Validate(var.size() == 1u, opts,
diff --git a/src/google/protobuf/io/printer.h b/src/google/protobuf/io/printer.h
index e2bcc55..c64c479 100644
--- a/src/google/protobuf/io/printer.h
+++ b/src/google/protobuf/io/printer.h
@@ -24,6 +24,7 @@
#include "absl/cleanup/cleanup.h"
#include "absl/container/flat_hash_map.h"
+#include "absl/functional/any_invocable.h"
#include "absl/functional/function_ref.h"
#include "absl/log/absl_check.h"
#include "absl/meta/type_traits.h"
@@ -449,8 +450,8 @@
// released.
struct SourceLocation {
static SourceLocation current() { return {}; }
- absl::string_view file_name() { return "<unknown>"; }
- int line() { return 0; }
+ absl::string_view file_name() const { return "<unknown>"; }
+ int line() const { return 0; }
};
static constexpr char kDefaultVariableDelimiter = '$';
@@ -655,6 +656,18 @@
void FormatInternal(absl::Span<const std::string> args, const Map& vars,
absl::string_view format);
+ // Injects a substitution listener for the lifetime of the RAII object
+ // returned.
+ // While the listener is active it will receive a callback on each
+ // substitution label found.
+ // This can be used to add basic verification on top of emit routines.
+ auto WithSubstitutionListener(
+ absl::AnyInvocable<void(absl::string_view, SourceLocation)> listener) {
+ ABSL_CHECK(substitution_listener_ == nullptr);
+ substitution_listener_ = std::move(listener);
+ return absl::MakeCleanup([this] { substitution_listener_ = nullptr; });
+ }
+
private:
struct PrintOptions;
struct Format;
@@ -753,6 +766,11 @@
std::function<absl::optional<AnnotationRecord>(absl::string_view)>>
annotation_lookups_;
+ // If set, we invoke this when we do a label substitution. This can be used to
+ // verify consistency of the generated code while we generate it.
+ absl::AnyInvocable<void(absl::string_view, SourceLocation)>
+ substitution_listener_;
+
// A map from variable name to [start, end) offsets in the output buffer.
//
// This stores the data looked up by GetSubstitutionRange().
diff --git a/src/google/protobuf/io/printer_unittest.cc b/src/google/protobuf/io/printer_unittest.cc
index 5e72f2d..081f4a5 100644
--- a/src/google/protobuf/io/printer_unittest.cc
+++ b/src/google/protobuf/io/printer_unittest.cc
@@ -610,6 +610,35 @@
"};\n");
}
+TEST_F(PrinterTest, EmitWithSubstituionListener) {
+ std::vector<std::string> seen;
+ Printer printer(output());
+ const auto emit = [&] {
+ printer.Emit(
+ {
+ {"class", "Foo"},
+ Printer::Sub{"var", "int x;"}.WithSuffix(";"),
+ },
+ R"cc(
+ void $class$::foo() { $var$; }
+ void $class$::set_foo() { $var$; }
+ )cc");
+ };
+ emit();
+ EXPECT_THAT(seen, ElementsAre());
+ {
+ auto listener = printer.WithSubstitutionListener(
+ [&](auto label, auto loc) { seen.emplace_back(label); });
+ emit();
+ }
+ EXPECT_THAT(seen, ElementsAre("class", "var", "class", "var"));
+
+ // Still works after the listener is disconnected.
+ seen.clear();
+ emit();
+ EXPECT_THAT(seen, ElementsAre());
+}
+
TEST_F(PrinterTest, EmitConditionalFunctionCall) {
{
Printer printer(output());
diff --git a/src/google/protobuf/io/tokenizer.h b/src/google/protobuf/io/tokenizer.h
index 0855a17..007d090 100644
--- a/src/google/protobuf/io/tokenizer.h
+++ b/src/google/protobuf/io/tokenizer.h
@@ -55,33 +55,16 @@
// column numbers. The numbers are zero-based, so you may want to add
// 1 to each before printing them.
virtual void RecordError(int line, ColumnNumber column,
- absl::string_view message) {
- PROTOBUF_IGNORE_DEPRECATION_START
- AddError(line, column, std::string(message));
- PROTOBUF_IGNORE_DEPRECATION_STOP
- }
+ absl::string_view message)
+ = 0;
// Indicates that there was a warning in the input at the given line and
// column numbers. The numbers are zero-based, so you may want to add
// 1 to each before printing them.
virtual void RecordWarning(int line, ColumnNumber column,
absl::string_view message) {
- PROTOBUF_IGNORE_DEPRECATION_START
- AddWarning(line, column, std::string(message));
- PROTOBUF_IGNORE_DEPRECATION_STOP
}
- private:
- // These should never be called directly, but if a legacy class overrides
- // them they'll get routed to by the Record* methods.
- ABSL_DEPRECATED("Use RecordError")
- virtual void AddError(int line, ColumnNumber column,
- const std::string& message) {
- ABSL_LOG(FATAL) << "AddError or RecordError must be implemented.";
- }
- ABSL_DEPRECATED("Use RecordWarning")
- virtual void AddWarning(int line, ColumnNumber column,
- const std::string& message) {}
};
// This class converts a stream of raw text into a stream of tokens for
diff --git a/src/google/protobuf/json/internal/parser_traits.h b/src/google/protobuf/json/internal/parser_traits.h
index 22e6efe..9d2745b 100644
--- a/src/google/protobuf/json/internal/parser_traits.h
+++ b/src/google/protobuf/json/internal/parser_traits.h
@@ -173,7 +173,7 @@
}
}
- static void SetInt32(Field f, Msg& msg, int32 x) {
+ static void SetInt32(Field f, Msg& msg, int32_t x) {
RecordAsSeen(f, msg);
if (f->is_repeated()) {
msg.msg_->GetReflection()->AddInt32(msg.msg_, f, x);
@@ -182,7 +182,7 @@
}
}
- static void SetUInt32(Field f, Msg& msg, uint32 x) {
+ static void SetUInt32(Field f, Msg& msg, uint32_t x) {
RecordAsSeen(f, msg);
if (f->is_repeated()) {
msg.msg_->GetReflection()->AddUInt32(msg.msg_, f, x);
diff --git a/src/google/protobuf/json/json_test.cc b/src/google/protobuf/json/json_test.cc
index 2ff1e87..aac3ed7 100644
--- a/src/google/protobuf/json/json_test.cc
+++ b/src/google/protobuf/json/json_test.cc
@@ -204,6 +204,9 @@
m.set_string_value("i am a test string value");
m.set_bytes_value("i am a test bytes value");
+ m.set_optional_bool_value(false);
+ m.set_optional_string_value("");
+ m.set_optional_bytes_value("");
EXPECT_THAT(
ToJson(m, options),
IsOkAndHolds("{\"boolValue\":false,"
@@ -226,7 +229,10 @@
"\"repeatedStringValue\":[],"
"\"repeatedBytesValue\":[],"
"\"repeatedEnumValue\":[],"
- "\"repeatedMessageValue\":[]"
+ "\"repeatedMessageValue\":[],"
+ "\"optionalBoolValue\":false,"
+ "\"optionalStringValue\":\"\","
+ "\"optionalBytesValue\":\"\""
"}"));
EXPECT_THAT(
diff --git a/src/google/protobuf/lite_unittest.cc b/src/google/protobuf/lite_unittest.cc
index 09f5ec6..9023582 100644
--- a/src/google/protobuf/lite_unittest.cc
+++ b/src/google/protobuf/lite_unittest.cc
@@ -8,6 +8,7 @@
// Author: kenton@google.com (Kenton Varda)
#include <climits>
+#include <cstdint>
#include <iostream>
#include <limits>
#include <string>
@@ -104,7 +105,7 @@
TEST(ParseVarintTest, Varint32) {
auto test_value = [](uint32_t value, int varint_length) {
- uint8_t buffer[10];
+ uint8_t buffer[10] = {0};
uint8_t* p = io::CodedOutputStream::WriteVarint32ToArray(value, buffer);
ASSERT_EQ(p - buffer, varint_length) << "Value = " << value;
@@ -131,7 +132,7 @@
TEST(ParseVarintTest, Varint64) {
auto test_value = [](uint64_t value, int varint_length) {
- uint8_t buffer[10];
+ uint8_t buffer[10] = {0};
uint8_t* p = io::CodedOutputStream::WriteVarint64ToArray(value, buffer);
ASSERT_EQ(p - buffer, varint_length) << "Value = " << value;
diff --git a/src/google/protobuf/map.h b/src/google/protobuf/map.h
index e84ca69..4ea4224 100644
--- a/src/google/protobuf/map.h
+++ b/src/google/protobuf/map.h
@@ -454,18 +454,6 @@
return size;
}
-// Multiply two numbers where overflow is expected.
-template <typename N>
-N MultiplyWithOverflow(N a, N b) {
-#if defined(PROTOBUF_HAS_BUILTIN_MUL_OVERFLOW)
- N res;
- (void)__builtin_mul_overflow(a, b, &res);
- return res;
-#else
- return a * b;
-#endif
-}
-
inline size_t SpaceUsedInValues(const void*) { return 0; }
class UntypedMapBase;
@@ -536,7 +524,8 @@
UntypedMapBase& operator=(const UntypedMapBase&) = delete;
protected:
- enum { kMinTableSize = 8 };
+ // 16 bytes is the minimum useful size for the array cache in the arena.
+ enum { kMinTableSize = 16 / sizeof(void*) };
public:
Arena* arena() const { return this->alloc_.arena(); }
@@ -649,7 +638,11 @@
}
void DeleteTable(TableEntryPtr* table, map_index_t n) {
- AllocFor<TableEntryPtr>(alloc_).deallocate(table, n);
+ if (auto* a = arena()) {
+ a->ReturnArrayMemory(table, n * sizeof(TableEntryPtr));
+ } else {
+ internal::SizedDelete(table, n * sizeof(TableEntryPtr));
+ }
}
NodeBase* DestroyTree(Tree* tree);
@@ -664,13 +657,8 @@
map_index_t BucketNumberFromHash(uint64_t h) const {
// We xor the hash value against the random seed so that we effectively
// have a random hash function.
- h ^= seed_;
-
- // We use the multiplication method to determine the bucket number from
- // the hash value. The constant kPhi (suggested by Knuth) is roughly
- // (sqrt(5) - 1) / 2 * 2^64.
- constexpr uint64_t kPhi = uint64_t{0x9e3779b97f4a7c15};
- return (MultiplyWithOverflow(kPhi, h) >> 32) & (num_buckets_ - 1);
+ // We use absl::Hash to do bit mixing for uniform bucket selection.
+ return absl::HashOf(h ^ seed_) & (num_buckets_ - 1);
}
TableEntryPtr* CreateEmptyTable(map_index_t n) {
@@ -683,29 +671,29 @@
// Return a randomish value.
map_index_t Seed() const {
- // We get a little bit of randomness from the address of the map. The
- // lower bits are not very random, due to alignment, so we discard them
- // and shift the higher bits into their place.
- map_index_t s = reinterpret_cast<uintptr_t>(this) >> 4;
+ uint64_t s = 0;
#if !defined(GOOGLE_PROTOBUF_NO_RDTSC)
#if defined(__APPLE__)
// Use a commpage-based fast time function on Apple environments (MacOS,
// iOS, tvOS, watchOS, etc).
- s += mach_absolute_time();
+ s = mach_absolute_time();
#elif defined(__x86_64__) && defined(__GNUC__)
uint32_t hi, lo;
asm volatile("rdtsc" : "=a"(lo), "=d"(hi));
- s += ((static_cast<uint64_t>(hi) << 32) | lo);
+ s = ((static_cast<uint64_t>(hi) << 32) | lo);
#elif defined(__aarch64__) && defined(__GNUC__)
// There is no rdtsc on ARMv8. CNTVCT_EL0 is the virtual counter of the
// system timer. It runs at a different frequency than the CPU's, but is
// the best source of time-based entropy we get.
uint64_t virtual_timer_value;
asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
- s += virtual_timer_value;
+ s = virtual_timer_value;
#endif
#endif // !defined(GOOGLE_PROTOBUF_NO_RDTSC)
- return s;
+ // Add entropy from the address of the map and the address of the table
+ // array.
+ return static_cast<map_index_t>(
+ absl::HashOf(s, table_, static_cast<const void*>(this)));
}
enum {
@@ -988,6 +976,18 @@
static_cast<KeyNode*>(node)->key());
}
+ // Have it a separate function for testing.
+ static size_type CalculateHiCutoff(size_type num_buckets) {
+ // We want the high cutoff to follow this rules:
+ // - When num_buckets_ == kGlobalEmptyTableSize, then make it 0 to force an
+ // allocation.
+ // - When num_buckets_ < 8, then make it num_buckets_ to avoid
+ // a reallocation. A large load factor is not that important on small
+ // tables and saves memory.
+ // - Otherwise, make it 75% of num_buckets_.
+ return num_buckets - num_buckets / 16 * 4 - num_buckets % 2;
+ }
+
// Returns whether it did resize. Currently this is only used when
// num_elements_ increases, though it could be used in other situations.
// It checks for load too low as well as load too high: because any number
@@ -997,13 +997,12 @@
// policy that sometimes we resize down as well as up, clients can easily
// keep O(size()) = O(number of buckets) if they want that.
bool ResizeIfLoadIsOutOfRange(size_type new_size) {
- const size_type kMaxMapLoadTimes16 = 12; // controls RAM vs CPU tradeoff
- const size_type hi_cutoff = num_buckets_ * kMaxMapLoadTimes16 / 16;
+ const size_type hi_cutoff = CalculateHiCutoff(num_buckets_);
const size_type lo_cutoff = hi_cutoff / 4;
// We don't care how many elements are in trees. If a lot are,
// we may resize even though there are many empty buckets. In
// practice, this seems fine.
- if (PROTOBUF_PREDICT_FALSE(new_size >= hi_cutoff)) {
+ if (PROTOBUF_PREDICT_FALSE(new_size > hi_cutoff)) {
if (num_buckets_ <= max_size() / 2) {
Resize(num_buckets_ * 2);
return true;
diff --git a/src/google/protobuf/map_entry.h b/src/google/protobuf/map_entry.h
index 1bc1fc3..3a1712b 100644
--- a/src/google/protobuf/map_entry.h
+++ b/src/google/protobuf/map_entry.h
@@ -50,11 +50,14 @@
using Message::Message;
const ClassData* GetClassData() const final {
- ABSL_CONST_INIT static const ClassData data = {
+ ABSL_CONST_INIT static const ClassDataFull data = {
+ {
+ nullptr, // on_demand_register_arena_dtor
+ PROTOBUF_FIELD_OFFSET(MapEntryBase, _cached_size_),
+ false,
+ },
&MergeImpl,
- nullptr, // on_demand_register_arena_dtor
&kDescriptorMethods,
- PROTOBUF_FIELD_OFFSET(MapEntryBase, _cached_size_),
};
return &data;
}
@@ -139,12 +142,6 @@
// accessors ======================================================
- inline const auto& key() const {
- return KeyTypeHandler::GetExternalReference(key_);
- }
- inline const auto& value() const {
- return ValueTypeHandler::DefaultIfNotInitialized(value_);
- }
inline auto* mutable_key() {
_has_bits_[0] |= 0x00000001u;
return KeyTypeHandler::EnsureMutable(&key_, GetArena());
@@ -153,7 +150,6 @@
_has_bits_[0] |= 0x00000002u;
return ValueTypeHandler::EnsureMutable(&value_, GetArena());
}
-
// TODO: These methods currently differ in behavior from the ones
// implemented via reflection. This means that a MapEntry does not behave the
// same as an equivalent object made via DynamicMessage.
@@ -185,24 +181,6 @@
return ptr;
}
- size_t ByteSizeLong() const final {
- size_t size = 0;
- size += kTagSize + static_cast<size_t>(KeyTypeHandler::ByteSize(key()));
- size += kTagSize + static_cast<size_t>(ValueTypeHandler::ByteSize(value()));
- _cached_size_.Set(ToCachedSize(size));
- return size;
- }
-
- ::uint8_t* _InternalSerialize(::uint8_t* ptr,
- io::EpsCopyOutputStream* stream) const final {
- ptr = KeyTypeHandler::Write(kKeyFieldNumber, key(), ptr, stream);
- return ValueTypeHandler::Write(kValueFieldNumber, value(), ptr, stream);
- }
-
- bool IsInitialized() const final {
- return ValueTypeHandler::IsInitialized(value_);
- }
-
Message* New(Arena* arena) const final {
return Arena::CreateMessage<Derived>(arena);
}
diff --git a/src/google/protobuf/map_field.cc b/src/google/protobuf/map_field.cc
index 0d70c65..6496d71 100644
--- a/src/google/protobuf/map_field.cc
+++ b/src/google/protobuf/map_field.cc
@@ -38,7 +38,7 @@
case FieldDescriptor::CPPTYPE_BOOL:
return VariantKey(static_cast<uint64_t>(value.GetBoolValue()));
default:
- ABSL_ASSUME(false);
+ Unreachable();
return VariantKey(uint64_t{});
}
}
@@ -246,7 +246,7 @@
reflection->SetBool(new_entry, key_des, map_key.GetBoolValue());
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
const MapValueRef& map_val = it.GetValueRef();
@@ -342,7 +342,7 @@
map_key.SetBoolValue(reflection->GetBool(elem, key_des));
break;
default:
- PROTOBUF_ASSUME(false);
+ Unreachable();
}
MapValueRef map_val;
diff --git a/src/google/protobuf/map_field.h b/src/google/protobuf/map_field.h
index 8388f8a..b9d03c8 100644
--- a/src/google/protobuf/map_field.h
+++ b/src/google/protobuf/map_field.h
@@ -436,7 +436,7 @@
// thread calls either ConstAccess() or MutableAccess(), on the same
// MapFieldBase-derived object, and there is no synchronization going
// on between them, tsan will alert.
-#if defined(__SANITIZE_THREAD__) || defined(THREAD_SANITIZER)
+#if defined(PROTOBUF_TSAN)
void ConstAccess() const { ABSL_CHECK_EQ(seq1_, seq2_); }
void MutableAccess() {
if (seq1_ & 1) {
diff --git a/src/google/protobuf/map_field_inl.h b/src/google/protobuf/map_field_inl.h
index 499d8ed..e6a7acf 100644
--- a/src/google/protobuf/map_field_inl.h
+++ b/src/google/protobuf/map_field_inl.h
@@ -9,6 +9,7 @@
#define GOOGLE_PROTOBUF_MAP_FIELD_INL_H__
#include <cstddef>
+#include <cstdint>
#include <memory>
#include <string>
#include <tuple>
@@ -31,38 +32,37 @@
namespace google {
namespace protobuf {
namespace internal {
-// UnwrapMapKey template
-template <typename T>
-T UnwrapMapKey(const MapKey& map_key);
-template <>
-inline int32_t UnwrapMapKey(const MapKey& map_key) {
+// UnwrapMapKey template. We're using overloading rather than template
+// specialization so that we can return a value or reference type depending on
+// `T`.
+inline int32_t UnwrapMapKeyImpl(const MapKey& map_key, const int32_t*) {
return map_key.GetInt32Value();
}
-template <>
-inline uint32_t UnwrapMapKey(const MapKey& map_key) {
+inline uint32_t UnwrapMapKeyImpl(const MapKey& map_key, const uint32_t*) {
return map_key.GetUInt32Value();
}
-template <>
-inline int64_t UnwrapMapKey(const MapKey& map_key) {
+inline int64_t UnwrapMapKeyImpl(const MapKey& map_key, const int64_t*) {
return map_key.GetInt64Value();
}
-template <>
-inline uint64_t UnwrapMapKey(const MapKey& map_key) {
+inline uint64_t UnwrapMapKeyImpl(const MapKey& map_key, const uint64_t*) {
return map_key.GetUInt64Value();
}
-template <>
-inline bool UnwrapMapKey(const MapKey& map_key) {
+inline bool UnwrapMapKeyImpl(const MapKey& map_key, const bool*) {
return map_key.GetBoolValue();
}
-template <>
-inline std::string UnwrapMapKey(const MapKey& map_key) {
+inline const std::string& UnwrapMapKeyImpl(const MapKey& map_key,
+ const std::string*) {
return map_key.GetStringValue();
}
-template <>
-inline MapKey UnwrapMapKey(const MapKey& map_key) {
+inline const MapKey& UnwrapMapKeyImpl(const MapKey& map_key, const MapKey*) {
return map_key;
}
+template <typename T>
+decltype(auto) UnwrapMapKey(const MapKey& map_key) {
+ return UnwrapMapKeyImpl(map_key, static_cast<T*>(nullptr));
+}
+
// SetMapKey
inline void SetMapKey(MapKey* map_key, int32_t value) {
map_key->SetInt32Value(value);
diff --git a/src/google/protobuf/map_proto3_unittest.proto b/src/google/protobuf/map_proto3_unittest.proto
index 1181b29..29a3b36 100644
--- a/src/google/protobuf/map_proto3_unittest.proto
+++ b/src/google/protobuf/map_proto3_unittest.proto
@@ -21,3 +21,7 @@
map<int32, bytes> map_bytes = 1;
map<int32, string> map_string = 2;
}
+
+message TestI32StrMap {
+ map<int32, string> m_32_str = 1;
+}
diff --git a/src/google/protobuf/map_test.cc b/src/google/protobuf/map_test.cc
index e09471a..59647af 100644
--- a/src/google/protobuf/map_test.cc
+++ b/src/google/protobuf/map_test.cc
@@ -5,15 +5,24 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+#include "google/protobuf/map.h"
+
#include <array>
+#include <cstddef>
+#include <cstdint>
+#include <memory>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
#include "absl/container/flat_hash_set.h"
+#include "absl/strings/str_cat.h"
#include "google/protobuf/arena_test_util.h"
#include "google/protobuf/internal_visibility_for_testing.h"
+#include "google/protobuf/map_field.h"
#include "google/protobuf/map_proto2_unittest.pb.h"
#include "google/protobuf/map_unittest.pb.h"
#include "google/protobuf/reflection_tester.h"
@@ -54,7 +63,10 @@
namespace {
+using ::testing::AllOf;
using ::testing::FieldsAre;
+using ::testing::Ge;
+using ::testing::Le;
using ::testing::UnorderedElementsAre;
@@ -160,6 +172,94 @@
EXPECT_EQ(map1["2"].GetArena(), &arena);
}
+TEST(MapTest, AlwaysSerializesBothEntries) {
+ for (const Message* prototype :
+ {static_cast<const Message*>(
+ &protobuf_unittest::TestI32StrMap::default_instance()),
+ static_cast<const Message*>(
+ &proto3_unittest::TestI32StrMap::default_instance())}) {
+ const FieldDescriptor* map_field =
+ prototype->GetDescriptor()->FindFieldByName("m_32_str");
+ const FieldDescriptor* map_key = map_field->message_type()->map_key();
+ const FieldDescriptor* map_value = map_field->message_type()->map_value();
+ for (bool add_key : {true, false}) {
+ for (bool add_value : {true, false}) {
+ std::unique_ptr<Message> message(prototype->New());
+ Message* entry_message =
+ message->GetReflection()->AddMessage(message.get(), map_field);
+ // Add the fields, but leave them as the default to make it easier to
+ // match.
+ if (add_key) {
+ entry_message->GetReflection()->SetInt32(entry_message, map_key, 0);
+ }
+ if (add_value) {
+ entry_message->GetReflection()->SetString(entry_message, map_value,
+ "");
+ }
+ ASSERT_EQ(4, entry_message->ByteSizeLong());
+ EXPECT_EQ(entry_message->SerializeAsString(),
+ std::string({
+ '\010', '\0', // key, VARINT, value=0
+ '\022', '\0', // value, LEN, size=0
+ }));
+ ASSERT_EQ(6, message->ByteSizeLong());
+ EXPECT_EQ(message->SerializeAsString(),
+ std::string({
+ '\012', '\04', // field=1, LEN, size=4
+ '\010', '\0', // key, VARINT, value=0
+ '\022', '\0', // value, LEN, size=0
+ }));
+ }
+ }
+ }
+}
+
+TEST(MapTest, LoadFactorCalculationWorks) {
+ // Three stages:
+ // - empty
+ // - small
+ // - large
+
+ const auto calculate = MapTestPeer::CalculateHiCutoff;
+ // empty
+ EXPECT_EQ(calculate(kGlobalEmptyTableSize), 0);
+
+ // small
+ EXPECT_EQ(calculate(2), 2);
+ EXPECT_EQ(calculate(4), 4);
+ EXPECT_EQ(calculate(8), 8);
+
+ // large
+ for (int i = 16; i < 10000; i *= 2) {
+ EXPECT_EQ(calculate(i), .75 * i) << "i=" << i;
+ }
+}
+
+TEST(MapTest, NaturalGrowthOnArenasReuseBlocks) {
+ Arena arena;
+ std::vector<Map<int, int>*> values;
+
+ static constexpr int kNumFields = 100;
+ static constexpr int kNumElems = 1000;
+ for (int i = 0; i < kNumFields; ++i) {
+ values.push_back(Arena::CreateMessage<Map<int, int>>(&arena));
+ auto& field = *values.back();
+ for (int j = 0; j < kNumElems; ++j) {
+ field[j] = j;
+ }
+ }
+
+ struct MockNode : internal::NodeBase {
+ std::pair<int, int> v;
+ };
+ size_t expected =
+ values.size() * (MapTestPeer::NumBuckets(*values[0]) * sizeof(void*) +
+ values[0]->size() * sizeof(MockNode));
+ // Use a 2% slack for other overhead. If we were not reusing the blocks, the
+ // actual value would be ~2x the cost of the bucket array.
+ EXPECT_THAT(arena.SpaceUsed(), AllOf(Ge(expected), Le(1.02 * expected)));
+}
+
// We changed the internal implementation to use a smaller size type, but the
// public API will still use size_t to avoid changing the API. Test that.
TEST(MapTest, SizeTypeIsSizeT) {
diff --git a/src/google/protobuf/map_test.inc b/src/google/protobuf/map_test.inc
index c1b0029..cbd0f44 100644
--- a/src/google/protobuf/map_test.inc
+++ b/src/google/protobuf/map_test.inc
@@ -183,6 +183,11 @@
}
template <typename T>
+ static size_t NumBuckets(T& map) {
+ return map.num_buckets_;
+ }
+
+ template <typename T>
static size_t BucketNumber(T& map, typename T::key_type key) {
return map.BucketNumber(key);
}
@@ -199,6 +204,10 @@
}
return false;
}
+
+ static int CalculateHiCutoff(int num_buckets) {
+ return Map<int, int>::CalculateHiCutoff(num_buckets);
+ }
};
namespace {
@@ -1276,7 +1285,7 @@
}
TEST_F(MapImplTest, SpaceUsed) {
- constexpr size_t kMinCap = 8;
+ constexpr size_t kMinCap = 16 / sizeof(void*);
Map<int32_t, int32_t> m;
// An newly constructed map should have no space used.
@@ -1286,15 +1295,11 @@
std::pair<int32_t, int32_t> kv;
};
- size_t capacity = kMinCap;
for (int i = 0; i < 100; ++i) {
m[i];
- static constexpr double kMaxLoadFactor = .75;
- if (m.size() >= capacity * kMaxLoadFactor) {
- capacity *= 2;
- }
EXPECT_EQ(m.SpaceUsedExcludingSelfLong(),
- sizeof(void*) * capacity + m.size() * sizeof(IntIntNode));
+ sizeof(void*) * MapTestPeer::NumBuckets(m) +
+ m.size() * sizeof(IntIntNode));
}
// Test string, and non-scalar keys.
@@ -1360,11 +1365,10 @@
const auto& cm = m;
m.insert({"ABC", 1});
-
- const auto abc_it = m.begin();
-
m.insert({"DEF", 2});
+ const auto abc_it = m.find("ABC");
+
using testing::Pair;
using testing::UnorderedElementsAre;
diff --git a/src/google/protobuf/map_type_handler.h b/src/google/protobuf/map_type_handler.h
index 7475ab0..7429dae 100644
--- a/src/google/protobuf/map_type_handler.h
+++ b/src/google/protobuf/map_type_handler.h
@@ -93,16 +93,10 @@
uint8_t* ptr, io::EpsCopyOutputStream* stream);
// Functions to manipulate data on memory. ========================
- static inline const Type& GetExternalReference(const Type* value);
static inline void DeleteNoArena(const Type* x);
static constexpr TypeOnMemory Constinit();
static inline Type* EnsureMutable(Type** value, Arena* arena);
- // Return default instance if value is not initialized when calling const
- // reference accessor.
- static inline const Type& DefaultIfNotInitialized(const Type* value);
- // Check if all required fields have values set.
- static inline bool IsInitialized(Type* value);
};
#define MAP_HANDLER(FieldType) \
@@ -126,12 +120,7 @@
static inline uint8_t* Write(int field, const MapEntryAccessorType& value, \
uint8_t* ptr, \
io::EpsCopyOutputStream* stream); \
- static inline const MapEntryAccessorType& GetExternalReference( \
- const TypeOnMemory& value); \
static inline void DeleteNoArena(const TypeOnMemory& x); \
- static inline const MapEntryAccessorType& DefaultIfNotInitialized( \
- const TypeOnMemory& value); \
- static inline bool IsInitialized(const TypeOnMemory& value); \
static void DeleteNoArena(TypeOnMemory& value); \
static constexpr TypeOnMemory Constinit(); \
static inline MapEntryAccessorType* EnsureMutable(TypeOnMemory* value, \
@@ -421,13 +410,6 @@
// Definition for message handler
template <typename Type>
-inline const Type&
-MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::GetExternalReference(
- const Type* value) {
- return *value;
-}
-
-template <typename Type>
void MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::DeleteNoArena(
const Type* ptr) {
delete ptr;
@@ -448,30 +430,10 @@
return *value;
}
-template <typename Type>
-inline const Type&
-MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::DefaultIfNotInitialized(
- const Type* value) {
- return value != nullptr ? *value : *Type::internal_default_instance();
-}
-
-template <typename Type>
-inline bool MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::IsInitialized(
- Type* value) {
- return value ? value->IsInitialized() : false;
-}
-
// Definition for string/bytes handler
#define STRING_OR_BYTES_HANDLER_FUNCTIONS(FieldType) \
template <typename Type> \
- inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::MapEntryAccessorType& \
- MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::GetExternalReference(const TypeOnMemory& value) { \
- return value.Get(); \
- } \
- template <typename Type> \
void MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::DeleteNoArena( \
TypeOnMemory& value) { \
value.Destroy(); \
@@ -479,7 +441,7 @@
template <typename Type> \
constexpr auto \
MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Constinit() \
- ->TypeOnMemory { \
+ -> TypeOnMemory { \
return TypeOnMemory(&internal::fixed_address_empty_string, \
ConstantInitialized{}); \
} \
@@ -489,19 +451,6 @@
MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::EnsureMutable( \
TypeOnMemory* value, Arena* arena) { \
return value->Mutable(arena); \
- } \
- template <typename Type> \
- inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::MapEntryAccessorType& \
- MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::DefaultIfNotInitialized(const TypeOnMemory& value) { \
- return value.Get(); \
- } \
- template <typename Type> \
- inline bool \
- MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::IsInitialized( \
- const TypeOnMemory& /* value */) { \
- return true; \
}
STRING_OR_BYTES_HANDLER_FUNCTIONS(STRING)
STRING_OR_BYTES_HANDLER_FUNCTIONS(BYTES)
@@ -509,13 +458,6 @@
#define PRIMITIVE_HANDLER_FUNCTIONS(FieldType) \
template <typename Type> \
- inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::MapEntryAccessorType& \
- MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::GetExternalReference(const TypeOnMemory& value) { \
- return value; \
- } \
- template <typename Type> \
inline void MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
Type>::DeleteNoArena(TypeOnMemory& /* x */) {} \
template <typename Type> \
@@ -530,19 +472,6 @@
MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::EnsureMutable( \
TypeOnMemory* value, Arena* /* arena */) { \
return value; \
- } \
- template <typename Type> \
- inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::MapEntryAccessorType& \
- MapTypeHandler<WireFormatLite::TYPE_##FieldType, \
- Type>::DefaultIfNotInitialized(const TypeOnMemory& value) { \
- return value; \
- } \
- template <typename Type> \
- inline bool \
- MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::IsInitialized( \
- const TypeOnMemory& /* value */) { \
- return true; \
}
PRIMITIVE_HANDLER_FUNCTIONS(INT64)
PRIMITIVE_HANDLER_FUNCTIONS(UINT64)
diff --git a/src/google/protobuf/map_unittest.proto b/src/google/protobuf/map_unittest.proto
index 11be808..5a648d2 100644
--- a/src/google/protobuf/map_unittest.proto
+++ b/src/google/protobuf/map_unittest.proto
@@ -101,3 +101,7 @@
message TestRecursiveMapMessage {
map<string, TestRecursiveMapMessage> a = 1;
}
+
+message TestI32StrMap {
+ map<int32, string> m_32_str = 1;
+}
diff --git a/src/google/protobuf/message.cc b/src/google/protobuf/message.cc
index 200ba1e..16f0862 100644
--- a/src/google/protobuf/message.cc
+++ b/src/google/protobuf/message.cc
@@ -11,27 +11,32 @@
#include "google/protobuf/message.h"
-#include <iostream>
-#include <stack>
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+#include <new>
+#include <string>
-#include "absl/base/casts.h"
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
+#include "absl/hash/hash.h"
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/strings/str_join.h"
#include "absl/strings/string_view.h"
#include "absl/synchronization/mutex.h"
+#include "absl/types/optional.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
+#include "google/protobuf/dynamic_message.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/generated_message_tctable_impl.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/io/coded_stream.h"
-#include "google/protobuf/io/zero_copy_stream_impl.h"
#include "google/protobuf/map_field.h"
-#include "google/protobuf/map_field_inl.h"
+#include "google/protobuf/message_lite.h"
#include "google/protobuf/parse_context.h"
+#include "google/protobuf/port.h"
#include "google/protobuf/reflection_internal.h"
#include "google/protobuf/reflection_ops.h"
#include "google/protobuf/unknown_field_set.h"
@@ -58,20 +63,18 @@
using internal::WireFormat;
using internal::WireFormatLite;
-void Message::MergeImpl(Message& to, const Message& from) {
- ReflectionOps::Merge(from, &to);
+void Message::MergeImpl(MessageLite& to, const MessageLite& from) {
+ ReflectionOps::Merge(DownCast<const Message&>(from), DownCast<Message*>(&to));
}
void Message::MergeFrom(const Message& from) {
auto* class_to = GetClassData();
auto* class_from = from.GetClassData();
- auto* merge_to_from = class_to ? class_to->merge_to_from : nullptr;
if (class_to == nullptr || class_to != class_from) {
- merge_to_from = [](Message& to, const Message& from) {
- ReflectionOps::Merge(from, &to);
- };
+ ReflectionOps::Merge(from, this);
+ } else {
+ class_to->full().merge_to_from(*this, from);
}
- merge_to_from(*this, from);
}
void Message::CheckTypeAndMergeFrom(const MessageLite& other) {
@@ -89,7 +92,7 @@
ABSL_DCHECK(!internal::IsDescendant(*this, from))
<< "Source of CopyFrom cannot be a descendant of the target.";
Clear();
- class_to->merge_to_from(*this, from);
+ class_to->full().merge_to_from(*this, from);
} else {
const Descriptor* descriptor = GetDescriptor();
ABSL_CHECK_EQ(from.GetDescriptor(), descriptor)
@@ -189,9 +192,10 @@
return DownCast<const Message&>(msg).InitializationErrorString();
}
-constexpr MessageLite::DescriptorMethods Message::kDescriptorMethods = {
- GetTypeNameImpl,
- InitializationErrorStringImpl,
+PROTOBUF_CONSTINIT const MessageLite::DescriptorMethods
+ Message::kDescriptorMethods = {
+ GetTypeNameImpl,
+ InitializationErrorStringImpl,
};
namespace internal {
@@ -209,7 +213,7 @@
// =============================================================================
// MessageFactory
-MessageFactory::~MessageFactory() {}
+MessageFactory::~MessageFactory() = default;
namespace {
@@ -220,15 +224,21 @@
void RegisterFile(const google::protobuf::internal::DescriptorTable* table);
void RegisterType(const Descriptor* descriptor, const Message* prototype);
+ const Message* TryGetPrototype(const Descriptor* type);
+
// implements MessageFactory ---------------------------------------
const Message* GetPrototype(const Descriptor* type) override;
private:
- const Message* FindInTypeMap(const Descriptor* type)
+ GeneratedMessageFactory() {
+ dropped_defaults_factory_.SetDelegateToGeneratedFactory(true);
+ }
+
+ absl::optional<const Message*> FindInTypeMap(const Descriptor* type)
ABSL_SHARED_LOCKS_REQUIRED(mutex_)
{
auto it = type_map_.find(type);
- if (it == type_map_.end()) return nullptr;
+ if (it == type_map_.end()) return absl::nullopt;
return it->second;
}
@@ -272,6 +282,7 @@
absl::flat_hash_set<const google::protobuf::internal::DescriptorTable*,
DescriptorByNameHash, DescriptorByNameEq>
files_;
+ DynamicMessageFactory dropped_defaults_factory_;
absl::Mutex mutex_;
absl::flat_hash_map<const Descriptor*, const Message*> type_map_
@@ -309,10 +320,36 @@
const Message* GeneratedMessageFactory::GetPrototype(const Descriptor* type) {
+ const Message* result = TryGetPrototype(type);
+ if (result == nullptr &&
+ type->file()->pool() == DescriptorPool::generated_pool()) {
+ // We registered this descriptor with a null pointer.
+ // In this case we need to create the prototype from the dynamic factory.
+ // We _must_ do this outside the lock because the dynamic factory will call
+ // back into the generated factory for cross linking.
+ result = dropped_defaults_factory_.GetPrototype(type);
+
+ {
+ absl::WriterMutexLock lock(&mutex_);
+ // And update the main map to make the next lookup faster.
+ // We don't need to recheck here. Even if someone raced us here the result
+ // is the same, so we can just write it.
+ type_map_[type] = result;
+ }
+ }
+
+ return result;
+}
+
+const Message* GeneratedMessageFactory::TryGetPrototype(
+ const Descriptor* type) {
+ absl::optional<const Message*> result;
{
absl::ReaderMutexLock lock(&mutex_);
- const Message* result = FindInTypeMap(type);
- if (result != nullptr) return result;
+ result = FindInTypeMap(type);
+ if (result.has_value() && *result != nullptr) {
+ return *result;
+ }
}
// If the type is not in the generated pool, then we can't possibly handle
@@ -329,27 +366,30 @@
return nullptr;
}
- absl::WriterMutexLock lock(&mutex_);
+ {
+ absl::WriterMutexLock lock(&mutex_);
- // Check if another thread preempted us.
- const Message* result = FindInTypeMap(type);
- if (result == nullptr) {
- // Nope. OK, register everything.
- internal::RegisterFileLevelMetadata(registration_data);
- // Should be here now.
+ // Check if another thread preempted us.
result = FindInTypeMap(type);
+ if (!result.has_value()) {
+ // Nope. OK, register everything.
+ internal::RegisterFileLevelMetadata(registration_data);
+ // Should be here now.
+ result = FindInTypeMap(type);
+ ABSL_DCHECK(result.has_value());
+ }
}
- if (result == nullptr) {
- ABSL_DLOG(FATAL) << "Type appears to be in generated pool but wasn't "
- << "registered: " << type->full_name();
- }
-
- return result;
+ return *result;
}
} // namespace
+const Message* MessageFactory::TryGetGeneratedPrototype(
+ const Descriptor* type) {
+ return GeneratedMessageFactory::singleton()->TryGetPrototype(type);
+}
+
MessageFactory* MessageFactory::generated_factory() {
return GeneratedMessageFactory::singleton();
}
diff --git a/src/google/protobuf/message.h b/src/google/protobuf/message.h
index 8630cdc..d25c2d7 100644
--- a/src/google/protobuf/message.h
+++ b/src/google/protobuf/message.h
@@ -87,18 +87,16 @@
#ifndef GOOGLE_PROTOBUF_MESSAGE_H__
#define GOOGLE_PROTOBUF_MESSAGE_H__
-#include <iosfwd>
+#include <cstddef>
+#include <cstdint>
#include <string>
#include <type_traits>
#include <vector>
-#include "google/protobuf/stubs/common.h"
#include "absl/base/attributes.h"
#include "absl/base/call_once.h"
-#include "absl/base/casts.h"
-#include "absl/functional/function_ref.h"
+#include "google/protobuf/stubs/common.h"
#include "absl/log/absl_check.h"
-#include "absl/log/absl_log.h"
#include "absl/strings/cord.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/arena.h"
@@ -135,6 +133,7 @@
class MapValueRef;
class MapIterator;
class MapReflectionTester;
+class TextFormat;
namespace internal {
struct FuzzPeer;
@@ -147,6 +146,7 @@
} // namespace internal
class UnknownFieldSet; // unknown_field_set.h
namespace io {
+class EpsCopyOutputStream; // coded_stream.h
class ZeroCopyInputStream; // zero_copy_stream.h
class ZeroCopyOutputStream; // zero_copy_stream.h
class CodedInputStream; // coded_stream.h
@@ -232,7 +232,7 @@
// the internal library are allowed to create subclasses.
class PROTOBUF_EXPORT Message : public MessageLite {
public:
- constexpr Message() {}
+ constexpr Message() = default;
Message(const Message&) = delete;
Message& operator=(const Message&) = delete;
@@ -369,7 +369,7 @@
internal::CachedSize* cached_size) const;
// Reflection based version for reflection based types.
- static void MergeImpl(Message& to, const Message& from);
+ static void MergeImpl(MessageLite& to, const MessageLite& from);
static const DescriptorMethods kDescriptorMethods;
@@ -887,39 +887,6 @@
// Returns nullptr if no extension is known for this name or number.
const FieldDescriptor* FindKnownExtensionByNumber(int number) const;
- // Feature Flags -------------------------------------------------------------
-
- // Does this message support storing arbitrary integer values in enum fields?
- // If |true|, GetEnumValue/SetEnumValue and associated repeated-field versions
- // take arbitrary integer values, and the legacy GetEnum() getter will
- // dynamically create an EnumValueDescriptor for any integer value without
- // one. If |false|, setting an unknown enum value via the integer-based
- // setters results in undefined behavior (in practice, ABSL_DCHECK-fails).
- //
- // Generic code that uses reflection to handle messages with enum fields
- // should check this flag before using the integer-based setter, and either
- // downgrade to a compatible value or use the UnknownFieldSet if not. For
- // example:
- //
- // int new_value = GetValueFromApplicationLogic();
- // if (reflection->SupportsUnknownEnumValues()) {
- // reflection->SetEnumValue(message, field, new_value);
- // } else {
- // if (field_descriptor->enum_type()->
- // FindValueByNumber(new_value) != nullptr) {
- // reflection->SetEnumValue(message, field, new_value);
- // } else if (emit_unknown_enum_values) {
- // reflection->MutableUnknownFields(message)->AddVarint(
- // field->number(), new_value);
- // } else {
- // // convert value to a compatible/default value.
- // new_value = CompatibleDowngrade(new_value);
- // reflection->SetEnumValue(message, field, new_value);
- // }
- // }
- ABSL_DEPRECATED("Use EnumDescriptor::is_closed instead.")
- bool SupportsUnknownEnumValues() const;
-
// Returns the MessageFactory associated with this message. This can be
// useful for determining if a message is a generated message or not, for
// example:
@@ -1010,6 +977,7 @@
return schema_.IsSplit(field);
}
+ friend class google::protobuf::TextFormat;
friend class FastReflectionBase;
friend class FastReflectionMessageMutator;
friend bool internal::IsDescendant(Message& root, const Message& message);
@@ -1287,7 +1255,7 @@
// around GetPrototype for details
class PROTOBUF_EXPORT MessageFactory {
public:
- inline MessageFactory() {}
+ inline MessageFactory() = default;
MessageFactory(const MessageFactory&) = delete;
MessageFactory& operator=(const MessageFactory&) = delete;
virtual ~MessageFactory();
@@ -1345,6 +1313,10 @@
static void InternalRegisterGeneratedMessage(const Descriptor* descriptor,
const Message* prototype);
+
+ private:
+ friend class DynamicMessageFactory;
+ static const Message* TryGetGeneratedPrototype(const Descriptor* type);
};
#define DECLARE_GET_REPEATED_FIELD(TYPE) \
@@ -1387,6 +1359,7 @@
(void)unused;
#if PROTOBUF_RTTI
+ internal::StrongReference(T::default_instance());
return dynamic_cast<const T*>(from);
#else
bool ok = from != nullptr &&
@@ -1425,11 +1398,7 @@
// instance T and T is a type derived from base Message class.
template <typename T>
const T* DownCastToGenerated(const Message* from) {
- // Compile-time assert that T is a generated type that has a
- // default_instance() accessor, but avoid actually calling it.
- const T& (*get_default_instance)() = &T::default_instance;
- (void)get_default_instance;
-
+ internal::StrongReference(T::default_instance());
ABSL_DCHECK(DynamicCastToGenerated<T>(from) == from)
<< "Cannot downcast " << from->GetTypeName() << " to "
<< T::default_instance().GetTypeName();
diff --git a/src/google/protobuf/message_lite.cc b/src/google/protobuf/message_lite.cc
index 8b5e83c..468ffc5 100644
--- a/src/google/protobuf/message_lite.cc
+++ b/src/google/protobuf/message_lite.cc
@@ -48,9 +48,9 @@
auto* data = GetClassData();
ABSL_DCHECK(data != nullptr);
- if (data->descriptor_methods != nullptr) {
+ if (!data->is_lite) {
// For !LITE messages, we use the descriptor method function.
- return data->descriptor_methods->get_type_name(*this);
+ return data->full().descriptor_methods->get_type_name(*this);
}
// For LITE messages, the type name is a char[] just beyond ClassData.
@@ -71,9 +71,9 @@
auto* data = GetClassData();
ABSL_DCHECK(data != nullptr);
- if (data->descriptor_methods != nullptr) {
+ if (!data->is_lite) {
// For !LITE messages, we use the descriptor method function.
- return data->descriptor_methods->initialization_error_string(*this);
+ return data->full().descriptor_methods->initialization_error_string(*this);
}
return "(cannot determine missing fields for lite message)";
diff --git a/src/google/protobuf/message_lite.h b/src/google/protobuf/message_lite.h
index a785a10..c04cc48 100644
--- a/src/google/protobuf/message_lite.h
+++ b/src/google/protobuf/message_lite.h
@@ -517,34 +517,52 @@
inline explicit MessageLite(Arena* arena) : _internal_metadata_(arena) {}
// We use a secondary vtable for descriptor based methods. This way ClassData
- // does not growth with the number of descriptor methods. This avoids extra
+ // does not grow with the number of descriptor methods. This avoids extra
// costs in MessageLite.
struct DescriptorMethods {
std::string (*get_type_name)(const MessageLite&);
std::string (*initialization_error_string)(const MessageLite&);
};
+ struct ClassDataFull;
+ // Note: The order of arguments in the functions is chosen so that it has
+ // the same ABI as the member function that calls them. Eg the `this`
+ // pointer becomes the first argument in the free function.
struct ClassData {
- // Note: The order of arguments in the functions is chosen so that it has
- // the same ABI as the member function that calls them. Eg the `this`
- // pointer becomes the first argument in the free function.
- void (*merge_to_from)(Message& to, const Message& from_msg);
void (*on_demand_register_arena_dtor)(MessageLite& msg, Arena& arena);
- // LITE objects (ie !descriptor_methods) collocate their name as a
- // char[] just beyond the ClassData.
- const DescriptorMethods* descriptor_methods;
// Offset of the CachedSize member.
uint32_t cached_size_offset;
+ // LITE objects (ie !descriptor_methods) collocate their name as a
+ // char[] just beyond the ClassData.
+ bool is_lite;
- constexpr ClassData(void (*merge_to_from)(Message& to, const Message&),
- void (*on_demand_register_arena_dtor)(MessageLite&,
+ constexpr ClassData(void (*on_demand_register_arena_dtor)(MessageLite&,
Arena&),
- const DescriptorMethods* descriptor_methods,
- uint32_t cached_size_offset)
- : merge_to_from(merge_to_from),
- on_demand_register_arena_dtor(on_demand_register_arena_dtor),
- descriptor_methods(descriptor_methods),
- cached_size_offset(cached_size_offset) {}
+ uint32_t cached_size_offset, bool is_lite)
+ : on_demand_register_arena_dtor(on_demand_register_arena_dtor),
+ cached_size_offset(cached_size_offset),
+ is_lite(is_lite) {}
+
+ const ClassDataFull& full() const {
+ return *static_cast<const ClassDataFull*>(this);
+ }
+ };
+ template <size_t N>
+ struct ClassDataLite {
+ ClassData header;
+ const char type_name[N];
+ };
+ struct ClassDataFull : ClassData {
+ constexpr ClassDataFull(ClassData base,
+ void (*merge_to_from)(MessageLite& to,
+ const MessageLite& from_msg),
+ const DescriptorMethods* descriptor_methods)
+ : ClassData(base),
+ merge_to_from(merge_to_from),
+ descriptor_methods(descriptor_methods) {}
+
+ void (*merge_to_from)(MessageLite& to, const MessageLite& from_msg);
+ const DescriptorMethods* descriptor_methods;
};
// GetClassData() returns a pointer to a ClassData struct which
diff --git a/src/google/protobuf/message_unittest.inc b/src/google/protobuf/message_unittest.inc
index 0dae965..9ae5fae 100644
--- a/src/google/protobuf/message_unittest.inc
+++ b/src/google/protobuf/message_unittest.inc
@@ -101,6 +101,24 @@
}
+TEST(MESSAGE_TEST_NAME, RoundTrip) {
+ UNITTEST::TestAllTypes message;
+ TestUtil::SetAllFields(&message);
+ TestUtil::ExpectAllFieldsSet(message);
+
+ UNITTEST::TestAllTypes copied, merged, parsed;
+ copied = message;
+ TestUtil::ExpectAllFieldsSet(copied);
+
+ merged.MergeFrom(message);
+ TestUtil::ExpectAllFieldsSet(merged);
+
+ std::string data;
+ ASSERT_TRUE(message.SerializeToString(&data));
+ ASSERT_TRUE(parsed.ParseFromString(data));
+ TestUtil::ExpectAllFieldsSet(parsed);
+}
+
TEST(MESSAGE_TEST_NAME, SerializeToBrokenOstream) {
std::ofstream out;
UNITTEST::TestAllTypes message;
diff --git a/src/google/protobuf/parse_context.h b/src/google/protobuf/parse_context.h
index 776773c..9292d51 100644
--- a/src/google/protobuf/parse_context.h
+++ b/src/google/protobuf/parse_context.h
@@ -494,34 +494,18 @@
const char* ParseMessage(MessageLite* msg, const char* ptr);
- // This overload supports those few cases where ParseMessage is called
- // on a class that is not actually a proto message.
- // TODO: Eliminate this use case.
- template <typename T,
- typename std::enable_if<!std::is_base_of<MessageLite, T>::value,
- bool>::type = true>
- PROTOBUF_NODISCARD const char* ParseMessage(T* msg, const char* ptr);
-
// Read the length prefix, push the new limit, call the func(ptr), and then
- // pop the limit. Useful for situations that don't value an actual message,
- // like map entries.
+ // pop the limit. Useful for situations that don't have an actual message.
template <typename Func>
PROTOBUF_NODISCARD const char* ParseLengthDelimitedInlined(const char*,
const Func& func);
- template <typename TcParser, typename Table>
- PROTOBUF_NODISCARD PROTOBUF_ALWAYS_INLINE const char* ParseMessage(
- MessageLite* msg, const char* ptr, const Table* table) {
- LimitToken old;
- ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
- if (ptr == nullptr) return ptr;
- auto old_depth = depth_;
- ptr = TcParser::ParseLoop(msg, ptr, this, table);
- if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
- depth_++;
- if (!PopLimit(std::move(old))) return nullptr;
- return ptr;
- }
+ // Push the recursion depth, call the func(ptr), and then pop depth. Useful
+ // for situations that don't have an actual message.
+ template <typename Func>
+ PROTOBUF_NODISCARD const char* ParseGroupInlined(const char* ptr,
+ uint32_t start_tag,
+ const Func& func);
template <typename T>
PROTOBUF_NODISCARD PROTOBUF_NDEBUG_INLINE const char* ParseGroup(
@@ -541,24 +525,6 @@
return ptr;
}
- template <typename TcParser, typename Table>
- PROTOBUF_NODISCARD PROTOBUF_ALWAYS_INLINE const char* ParseGroup(
- MessageLite* msg, const char* ptr, uint32_t tag, const Table* table) {
- if (--depth_ < 0) return nullptr;
- group_depth_++;
- auto old_depth = depth_;
- auto old_group_depth = group_depth_;
- ptr = TcParser::ParseLoop(msg, ptr, this, table);
- if (ptr != nullptr) {
- ABSL_DCHECK_EQ(old_depth, depth_);
- ABSL_DCHECK_EQ(old_group_depth, group_depth_);
- }
- group_depth_--;
- depth_++;
- if (PROTOBUF_PREDICT_FALSE(!ConsumeEndGroup(tag))) return nullptr;
- return ptr;
- }
-
private:
// Out-of-line routine to save space in ParseContext::ParseMessage<T>
// LimitToken old;
@@ -881,6 +847,7 @@
}
#endif
+// The caller must ensure that p points to at least 10 valid bytes.
template <typename T>
PROTOBUF_NODISCARD const char* VarintParse(const char* p, T* out) {
#if defined(__aarch64__) && defined(ABSL_IS_LITTLE_ENDIAN)
@@ -1105,15 +1072,14 @@
return WireFormatLite::ZigZagDecode32(static_cast<uint32_t>(tmp));
}
-template <typename T, typename std::enable_if<
- !std::is_base_of<MessageLite, T>::value, bool>::type>
-PROTOBUF_NODISCARD const char* ParseContext::ParseMessage(T* msg,
- const char* ptr) {
+template <typename Func>
+PROTOBUF_NODISCARD PROTOBUF_ALWAYS_INLINE const char*
+ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
LimitToken old;
- ptr = ReadSizeAndPushLimitAndDepth(ptr, &old);
+ ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
if (ptr == nullptr) return ptr;
auto old_depth = depth_;
- ptr = msg->_InternalParse(ptr, this);
+ PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
depth_++;
if (!PopLimit(std::move(old))) return nullptr;
@@ -1122,13 +1088,20 @@
template <typename Func>
PROTOBUF_NODISCARD PROTOBUF_ALWAYS_INLINE const char*
-ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
- LimitToken old;
- ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
- if (ptr == nullptr) return ptr;
+ParseContext::ParseGroupInlined(const char* ptr, uint32_t start_tag,
+ const Func& func) {
+ if (--depth_ < 0) return nullptr;
+ group_depth_++;
+ auto old_depth = depth_;
+ auto old_group_depth = group_depth_;
PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
+ if (ptr != nullptr) {
+ ABSL_DCHECK_EQ(old_depth, depth_);
+ ABSL_DCHECK_EQ(old_group_depth, group_depth_);
+ }
+ group_depth_--;
depth_++;
- if (!PopLimit(std::move(old))) return nullptr;
+ if (PROTOBUF_PREDICT_FALSE(!ConsumeEndGroup(start_tag))) return nullptr;
return ptr;
}
diff --git a/src/google/protobuf/port.h b/src/google/protobuf/port.h
index 51e63e3..a5f3b98 100644
--- a/src/google/protobuf/port.h
+++ b/src/google/protobuf/port.h
@@ -22,6 +22,7 @@
#include <typeinfo>
+#include "absl/base/config.h"
#include "absl/meta/type_traits.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
@@ -37,6 +38,16 @@
namespace internal {
+template <typename T>
+void StrongPointer(T* var) {
+#if defined(__GNUC__)
+ asm("" : : "r"(var));
+#else
+ auto volatile unused = var;
+ (void)&unused; // Use address to avoid an extra load of "unused".
+#endif
+}
+
// See comments on `AllocateAtLeast` for information on size returning new.
struct SizedPtr {
@@ -201,6 +212,22 @@
#endif
}
+#if defined(NDEBUG) && ABSL_HAVE_BUILTIN(__builtin_unreachable)
+[[noreturn]] ABSL_ATTRIBUTE_COLD PROTOBUF_ALWAYS_INLINE inline void
+Unreachable() {
+ __builtin_unreachable();
+}
+#elif ABSL_HAVE_BUILTIN(__builtin_FILE) && ABSL_HAVE_BUILTIN(__builtin_LINE)
+[[noreturn]] ABSL_ATTRIBUTE_COLD inline void Unreachable(
+ const char* file = __builtin_FILE(), int line = __builtin_LINE()) {
+ protobuf_assumption_failed("Unreachable", file, line);
+}
+#else
+[[noreturn]] ABSL_ATTRIBUTE_COLD inline void Unreachable() {
+ protobuf_assumption_failed("Unreachable", "", 0);
+}
+#endif
+
} // namespace internal
} // namespace protobuf
} // namespace google
diff --git a/src/google/protobuf/port_def.inc b/src/google/protobuf/port_def.inc
index 1d68bd2..edf0fcc 100644
--- a/src/google/protobuf/port_def.inc
+++ b/src/google/protobuf/port_def.inc
@@ -67,21 +67,6 @@
// - MSVC: https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes-history
// https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-history
-// Portable fallback for Clang's __has_warning macro:
-#ifndef __has_warning
-#define __has_warning(x) 0
-#define PROTOBUF_has_warning_DEFINED_
-#endif
-
-#ifdef ADDRESS_SANITIZER
-#include <sanitizer/asan_interface.h>
-#define PROTOBUF_POISON_MEMORY_REGION(p, n) ASAN_POISON_MEMORY_REGION(p, n)
-#define PROTOBUF_UNPOISON_MEMORY_REGION(p, n) ASAN_UNPOISON_MEMORY_REGION(p, n)
-#else // ADDRESS_SANITIZER
-#define PROTOBUF_POISON_MEMORY_REGION(p, n)
-#define PROTOBUF_UNPOISON_MEMORY_REGION(p, n)
-#endif // ADDRESS_SANITIZER
-
// Portable PROTOBUF_BUILTIN_BSWAPxx definitions
// Code must check for availability, e.g.: `defined(PROTOBUF_BUILTIN_BSWAP32)`
#ifdef PROTOBUF_BUILTIN_BSWAP16
@@ -103,11 +88,6 @@
#define PROTOBUF_BUILTIN_BSWAP64(x) __builtin_bswap64(x)
#endif
-// Portable check for __builtin_mul_overflow.
-#if ABSL_HAVE_BUILTIN(__builtin_mul_overflow)
-#define PROTOBUF_HAS_BUILTIN_MUL_OVERFLOW 1
-#endif
-
// Portable check for gcc-style atomic built-ins
#if ABSL_HAVE_BUILTIN(__atomic_load_n)
#define PROTOBUF_BUILTIN_ATOMIC 1
@@ -179,10 +159,6 @@
#ifdef PROTOBUF_FUTURE_BREAKING_CHANGES
-// Used to remove the manipulation of cleared elements in RepeatedPtrField.
-// Owner: mkruskal@
-#define PROTOBUF_FUTURE_REMOVE_CLEARED_API 1
-
// Used for descriptor proto extension declarations.
// Owner: shaod@, gberg@
#define PROTOBUF_FUTURE_DESCRIPTOR_EXTENSION_DECL 1
@@ -191,30 +167,18 @@
// Owner: ezb@
#define PROTOBUF_FUTURE_REMOVE_CONST_REPEATEDFIELD_GETARENA_API 1
-// Used to make ExtensionRange into a fully-fledged descriptor class.
-// Owner: mkruskal@
-#define PROTOBUF_FUTURE_EXTENSION_RANGE_CLASS 1
-
// Used to lock down wrong ctype usages in proto file.
// Owner: jieluo@
#define PROTOBUF_FUTURE_REMOVE_WRONG_CTYPE 1
#endif
+// Defines the Protobuf C++ Version for checking version compatibility at
+// compilation time.
#ifdef PROTOBUF_VERSION
#error PROTOBUF_VERSION was previously defined
#endif
-#define PROTOBUF_VERSION 4025000
-
-#ifdef PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC
-#error PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC was previously defined
-#endif
-#define PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC 4025000
-
-#ifdef PROTOBUF_MIN_PROTOC_VERSION
-#error PROTOBUF_MIN_PROTOC_VERSION was previously defined
-#endif
-#define PROTOBUF_MIN_PROTOC_VERSION 4025000
+#define PROTOBUF_VERSION 4026000
#ifdef PROTOBUF_VERSION_SUFFIX
#error PROTOBUF_VERSION_SUFFIX was previously defined
@@ -328,10 +292,6 @@
#define PROTOBUF_IGNORE_DEPRECATION_STOP
#endif
-// The minimum library version which works with the current version of the
-// headers.
-#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 4025000
-
#ifdef PROTOBUF_RTTI
#error PROTOBUF_RTTI was previously defined
#endif
@@ -533,11 +493,6 @@
#define PROTOBUF_ALIGNAS(byte_alignment) alignas(byte_alignment)
#endif
-#ifdef PROTOBUF_FINAL
-#error PROTOBUF_FINAL was previously defined
-#endif
-#define PROTOBUF_FINAL final
-
#ifdef PROTOBUF_THREAD_LOCAL
#error PROTOBUF_THREAD_LOCAL was previously defined
#endif
@@ -600,21 +555,6 @@
#define PROTOBUF_ATTRIBUTE_NO_DESTROY
#endif
-// Force clang to always emit complete debug info for a type.
-// Clang uses constructor homing to determine when to emit debug info for a
-// type. If the constructor of a type is never used, which can happen in some
-// cases where member variables are constructed in place for optimization
-// purposes (see b/208803175 for an example), the type will have incomplete
-// debug info unless this attribute is used.
-#ifdef PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG
-#error PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG was previously defined
-#endif
-#if ABSL_HAVE_CPP_ATTRIBUTE(clang::standalone_debug)
-#define PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG [[clang::standalone_debug]]
-#else
-#define PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG
-#endif
-
// Protobuf extensions and reflection require registration of the protos linked
// in the binary. Not until everything is registered does the runtime have a
// complete view on all protos. When code is using reflection or extensions
@@ -692,8 +632,22 @@
# define PROTOBUF_TSAN 1
# endif
# endif
+# ifdef __SANITIZE_MEMORY__
+# if __SANITIZE_MEMORY__
+# define PROTOBUF_ASAN 1
+# endif
+# endif
#endif
+#ifdef PROTOBUF_ASAN
+#include <sanitizer/asan_interface.h>
+#define PROTOBUF_POISON_MEMORY_REGION(p, n) ASAN_POISON_MEMORY_REGION(p, n)
+#define PROTOBUF_UNPOISON_MEMORY_REGION(p, n) ASAN_UNPOISON_MEMORY_REGION(p, n)
+#else // PROTOBUF_ASAN
+#define PROTOBUF_POISON_MEMORY_REGION(p, n)
+#define PROTOBUF_UNPOISON_MEMORY_REGION(p, n)
+#endif // PROTOBUF_ASAN
+
#ifdef PROTOBUF_TSAN_READ
#error PROTOBUF_TSAN_READ was previously defined
#endif
@@ -789,6 +743,15 @@
#define PROTOBUF_BUILTIN_CONSTANT_P(x) false
#endif
+// Determines the platforms where descriptor weak messages can be used.
+#ifdef PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED
+#error PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED was previously defined
+#endif
+#if defined(__GNUC__) && defined(__clang__) && !defined(__APPLE__) && \
+ !defined(_MSC_VER)
+#define PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED
+#endif
+
// TODO: Enable the feature by default and remove this flag.
#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
@@ -797,6 +760,13 @@
// ThreadSafeArenaz is turned off completely in opensource builds.
+// noreturn is defined as a macro in C's stdnoreturn.h
+#ifdef noreturn
+#define PROTOBUF_DID_UNDEF_noreturn
+#pragma push_macro("noreturn")
+#undef noreturn
+#endif
+
// autoheader defines this in some circumstances
#ifdef PACKAGE
#define PROTOBUF_DID_UNDEF_PACKAGE
@@ -1025,8 +995,9 @@
namespace google {
namespace protobuf {
namespace internal {
-PROTOBUF_EXPORT void protobuf_assumption_failed(const char *pred,
- const char *file, int line);
+[[noreturn]] PROTOBUF_EXPORT void protobuf_assumption_failed(const char *pred,
+ const char *file,
+ int line);
} // namespace internal
} // namespace protobuf
} // namespace google
@@ -1060,10 +1031,3 @@
#endif // !NDEBUG
#endif // has_builtin(__builtin_assume)
-// We don't want code outside port_def doing complex testing, so
-// remove our portable condition test macros to nudge folks away from
-// using it themselves.
-#ifdef PROTOBUF_has_warning_DEFINED_
-# undef __has_warning
-# undef PROTOBUF_has_warning_DEFINED_
-#endif
diff --git a/src/google/protobuf/port_test.cc b/src/google/protobuf/port_test.cc
index d1174c3..a8c6402 100644
--- a/src/google/protobuf/port_test.cc
+++ b/src/google/protobuf/port_test.cc
@@ -5,10 +5,13 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
//
+#include "google/protobuf/port.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <gtest/gtest.h>
+#include "absl/base/config.h"
// Must be included last
#include "google/protobuf/port_def.inc"
@@ -28,6 +31,21 @@
#endif
}
+TEST(PortTest, UnreachableTrapsOnDebugMode) {
+#ifdef GTEST_HAS_DEATH_TEST
+#if defined(NDEBUG)
+ // In NDEBUG we crash with a UD instruction, so we don't get the "Assumption
+ // failed" error.
+ GTEST_SKIP() << "Can't test __builtin_unreachable()";
+#elif ABSL_HAVE_BUILTIN(__builtin_FILE)
+ EXPECT_DEATH(Unreachable(),
+ "port_test\\.cc:.*Assumption failed: 'Unreachable'");
+#else
+ EXPECT_DEATH(Unreachable(), "Assumption failed: 'Unreachable'");
+#endif
+#endif
+}
+
} // namespace internal
} // namespace protobuf
} // namespace google
diff --git a/src/google/protobuf/port_undef.inc b/src/google/protobuf/port_undef.inc
index 3f20dfb..a107fb3 100644
--- a/src/google/protobuf/port_undef.inc
+++ b/src/google/protobuf/port_undef.inc
@@ -19,7 +19,6 @@
#undef PROTOBUF_BUILTIN_BSWAP16
#undef PROTOBUF_BUILTIN_BSWAP32
#undef PROTOBUF_BUILTIN_BSWAP64
-#undef PROTOBUF_HAS_BUILTIN_MUL_OVERFLOW
#undef PROTOBUF_BUILTIN_ATOMIC
#undef PROTOBUF_GNUC_MIN
#undef PROTOBUF_CLANG_MIN
@@ -40,8 +39,6 @@
#undef PROTOBUF_MINIMUM_EDITION
#undef PROTOBUF_MAXIMUM_EDITION
#undef PROTOBUF_FIELD_OFFSET
-#undef PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC
-#undef PROTOBUF_MIN_PROTOC_VERSION
#undef PROTOBUF_PREDICT_TRUE
#undef PROTOBUF_PREDICT_FALSE
#undef PROTOBUF_EXPORT
@@ -60,7 +57,6 @@
#undef PROTOBUF_EXPORT_TEMPLATE_DECLARE
#undef PROTOBUF_EXPORT_TEMPLATE_DEFINE
#undef PROTOBUF_ALIGNAS
-#undef PROTOBUF_FINAL
#undef PROTOBUF_THREAD_LOCAL
#undef PROTOBUF_CONSTINIT
#undef PROTOBUF_CONSTEXPR
@@ -68,7 +64,6 @@
#undef PROTOBUF_ATTRIBUTE_WEAK
#undef PROTOBUF_HAVE_ATTRIBUTE_WEAK
#undef PROTOBUF_ATTRIBUTE_NO_DESTROY
-#undef PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG
#undef PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
#undef PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
#undef PROTOBUF_PRAGMA_INIT_SEG
@@ -80,6 +75,7 @@
#undef PROTOBUF_TSAN_WRITE
#undef PROTOBUF_USE_TABLE_PARSER_ON_REFLECTION
#undef PROTOBUF_BUILTIN_CONSTANT_P
+#undef PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED
#undef PROTOBUF_PREFETCH_PARSE_TABLE
#undef PROTOBUF_TC_PARAM_DECL
#undef PROTOBUF_DEBUG
@@ -88,12 +84,16 @@
#ifdef PROTOBUF_FUTURE_BREAKING_CHANGES
#undef PROTOBUF_FUTURE_BREAKING_CHANGES
-#undef PROTOBUF_FUTURE_REMOVE_CLEARED_API
#undef PROTOBUF_FUTURE_DESCRIPTOR_EXTENSION_DECL
#endif
// Restore macros that may have been #undef'd in port_def.inc.
+#ifdef PROTOBUF_DID_UNDEF_noreturn
+#pragma pop_macro("noreturn")
+#undef PROTOBUF_DID_UNDEF_noreturn
+#endif
+
#ifdef PROTOBUF_DID_UNDEF_PACKAGE
#pragma pop_macro("PACKAGE")
#undef PROTOBUF_DID_UNDEF_PACKAGE
diff --git a/src/google/protobuf/proto3_arena_unittest.cc b/src/google/protobuf/proto3_arena_unittest.cc
index 7a46ab6..8708815 100644
--- a/src/google/protobuf/proto3_arena_unittest.cc
+++ b/src/google/protobuf/proto3_arena_unittest.cc
@@ -12,7 +12,6 @@
#include <gtest/gtest.h>
#include "absl/strings/match.h"
#include "google/protobuf/arena.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/test_util.h"
#include "google/protobuf/text_format.h"
#include "google/protobuf/unittest.pb.h"
@@ -152,7 +151,7 @@
// Tests message created by Arena::Create.
auto* arena_message3 = Arena::Create<TestAllTypes>(&arena);
- EXPECT_EQ(nullptr, arena_message3->GetArena());
+ EXPECT_EQ(&arena, arena_message3->GetArena());
}
TEST(Proto3ArenaTest, GetArenaWithUnknown) {
@@ -262,15 +261,13 @@
for (int i = 0; i < d->field_count(); i++) {
const FieldDescriptor* f = d->field(i);
if (absl::StartsWith(f->name(), "singular")) {
- EXPECT_FALSE(FieldDescriptorLegacy(f).has_optional_keyword())
- << f->full_name();
EXPECT_FALSE(f->has_presence()) << f->full_name();
EXPECT_FALSE(f->containing_oneof()) << f->full_name();
+ EXPECT_FALSE(f->real_containing_oneof()) << f->full_name();
} else {
- EXPECT_TRUE(FieldDescriptorLegacy(f).has_optional_keyword())
- << f->full_name();
EXPECT_TRUE(f->has_presence()) << f->full_name();
EXPECT_TRUE(f->containing_oneof()) << f->full_name();
+ EXPECT_FALSE(f->real_containing_oneof()) << f->full_name();
}
}
}
@@ -283,8 +280,6 @@
"protobuf_unittest.Proto3OptionalExtensions.ext_with_optional");
ABSL_CHECK(no_optional);
ABSL_CHECK(with_optional);
- EXPECT_FALSE(FieldDescriptorLegacy(no_optional).has_optional_keyword());
- EXPECT_TRUE(FieldDescriptorLegacy(with_optional).has_optional_keyword());
const Descriptor* d = protobuf_unittest::Proto3OptionalExtensions::descriptor();
EXPECT_TRUE(d->options().HasExtension(
@@ -332,7 +327,8 @@
const google::protobuf::OneofDescriptor* o = d->FindOneofByName("_optional_int32");
ABSL_CHECK(f);
ABSL_CHECK(o);
- EXPECT_TRUE(OneofDescriptorLegacy(o).is_synthetic());
+ EXPECT_EQ(f->containing_oneof(), o);
+ EXPECT_EQ(f->real_containing_oneof(), nullptr);
EXPECT_FALSE(r->HasField(msg, f));
EXPECT_FALSE(r->HasOneof(msg, o));
diff --git a/src/google/protobuf/reflection_ops.cc b/src/google/protobuf/reflection_ops.cc
index 03b0d38..233d258 100644
--- a/src/google/protobuf/reflection_ops.cc
+++ b/src/google/protobuf/reflection_ops.cc
@@ -262,7 +262,13 @@
std::vector<const FieldDescriptor*> fields;
// Should be safe to skip stripped fields because required fields are not
// stripped.
- reflection->ListFields(message, &fields);
+ if (descriptor->options().map_entry()) {
+ // MapEntry objects always check the value regardless of has bit.
+ // We don't need to bother with the key.
+ fields = {descriptor->map_value()};
+ } else {
+ reflection->ListFields(message, &fields);
+ }
for (const FieldDescriptor* field : fields) {
if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
@@ -327,10 +333,10 @@
continue;
}
// Discard the unknown fields in maps that contain message values.
- if (field->is_map() && IsMapValueMessageTyped(field)) {
- const MapFieldBase* map_field =
- reflection->MutableMapData(message, field);
- if (map_field->IsMapValid()) {
+ const MapFieldBase* map_field =
+ field->is_map() ? reflection->MutableMapData(message, field) : nullptr;
+ if (map_field != nullptr && map_field->IsMapValid()) {
+ if (IsMapValueMessageTyped(field)) {
MapIterator iter(message, field);
MapIterator end(message, field);
for (map_field->MapBegin(&iter), map_field->MapEnd(&end); iter != end;
diff --git a/src/google/protobuf/reflection_tester.h b/src/google/protobuf/reflection_tester.h
index b07e45a..4d25848 100644
--- a/src/google/protobuf/reflection_tester.h
+++ b/src/google/protobuf/reflection_tester.h
@@ -8,6 +8,7 @@
#ifndef GOOGLE_PROTOBUF_REFLECTION_TESTER_H__
#define GOOGLE_PROTOBUF_REFLECTION_TESTER_H__
+#include "google/protobuf/map_field.h"
#include "google/protobuf/message.h"
// Must be included last.
@@ -45,6 +46,15 @@
MapIterator MapEnd(Message* message, const std::string& field_name);
int MapSize(const Message& message, const std::string& field_name);
+ static MapValueConstRef LookupMapValue(const Reflection& reflection,
+ const Message& message,
+ const FieldDescriptor& descriptor,
+ const MapKey& map_key) {
+ MapValueConstRef map_val_const;
+ reflection.LookupMapValue(message, &descriptor, map_key, &map_val_const);
+ return map_val_const;
+ }
+
static std::string long_string() {
return "This is a very long string that goes in the heap";
}
diff --git a/src/google/protobuf/repeated_field.h b/src/google/protobuf/repeated_field.h
index 0647790..5351846 100644
--- a/src/google/protobuf/repeated_field.h
+++ b/src/google/protobuf/repeated_field.h
@@ -162,7 +162,8 @@
RepeatedField& operator=(const RepeatedField& other)
ABSL_ATTRIBUTE_LIFETIME_BOUND;
- RepeatedField(RepeatedField&& other) noexcept;
+ RepeatedField(RepeatedField&& rhs) noexcept
+ : RepeatedField(nullptr, std::move(rhs)) {}
RepeatedField& operator=(RepeatedField&& other) noexcept
ABSL_ATTRIBUTE_LIFETIME_BOUND;
@@ -329,6 +330,7 @@
static PROTOBUF_CONSTEXPR const size_t kRepHeaderSize = sizeof(Rep);
RepeatedField(Arena* arena, const RepeatedField& rhs);
+ RepeatedField(Arena* arena, RepeatedField&& rhs);
// Swaps entire contents with "other". Should be called only if the caller can
@@ -515,18 +517,17 @@
}
template <typename Element>
-inline RepeatedField<Element>::RepeatedField(RepeatedField&& other) noexcept
- : RepeatedField() {
+inline RepeatedField<Element>::RepeatedField(Arena* arena, RepeatedField&& rhs)
+ : RepeatedField(arena) {
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
- CopyFrom(other);
+ CopyFrom(rhs);
#else // PROTOBUF_FORCE_COPY_IN_MOVE
- // We don't just call Swap(&other) here because it would perform 3 copies if
- // other is on an arena. This field can't be on an arena because arena
- // construction always uses the Arena* accepting constructor.
- if (other.GetArena()) {
- CopyFrom(other);
+ // We don't just call Swap(&rhs) here because it would perform 3 copies if rhs
+ // is on a different arena.
+ if (arena != rhs.GetArena()) {
+ CopyFrom(rhs);
} else {
- InternalSwap(&other);
+ InternalSwap(&rhs);
}
#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
}
@@ -1034,14 +1035,18 @@
// the compiler isn't allowed to inline them.
template <typename Element>
class RepeatedIterator {
+ private:
+ using traits =
+ std::iterator_traits<typename std::remove_const<Element>::type*>;
+
public:
- using iterator_category = std::random_access_iterator_tag;
- // Note: remove_const is necessary for std::partial_sum, which uses value_type
- // to determine the summation variable type.
- using value_type = typename std::remove_const<Element>::type;
- using difference_type = std::ptrdiff_t;
+ // Note: value_type is never cv-qualified.
+ using value_type = typename traits::value_type;
+ using difference_type = typename traits::difference_type;
using pointer = Element*;
using reference = Element&;
+ using iterator_category = typename traits::iterator_category;
+ using iterator_concept = typename IteratorConceptSupport<traits>::tag;
constexpr RepeatedIterator() noexcept : it_(nullptr) {}
@@ -1141,10 +1146,10 @@
// Allow construction from RepeatedField.
friend class RepeatedField<value_type>;
- explicit RepeatedIterator(Element* it) noexcept : it_(it) {}
+ explicit RepeatedIterator(pointer it) noexcept : it_(it) {}
// The internal iterator.
- Element* it_;
+ pointer it_;
};
// A back inserter for RepeatedField objects.
diff --git a/src/google/protobuf/repeated_field_reflection_unittest.cc b/src/google/protobuf/repeated_field_reflection_unittest.cc
index 716df41..d24efa7 100644
--- a/src/google/protobuf/repeated_field_reflection_unittest.cc
+++ b/src/google/protobuf/repeated_field_reflection_unittest.cc
@@ -10,684 +10,15 @@
// Test reflection methods for aggregate access to Repeated[Ptr]Fields.
// This test proto2 methods on a proto2 layout.
-#include <gtest/gtest.h>
-#include "absl/base/casts.h"
-#include "absl/strings/cord.h"
-#include "google/protobuf/dynamic_message.h"
-#include "google/protobuf/port.h"
-#include "google/protobuf/reflection.h"
-#include "google/protobuf/test_util.h"
-#include "google/protobuf/unittest.pb.h"
+#include "google/protobuf/unittest.pb.h" // IWYU pragma: keep, used in UNITTEST
-namespace google {
-namespace protobuf {
-namespace {
+#define REFLECTION_TEST RepeatedFieldReflectionTest
+#define UNITTEST_PACKAGE_NAME "protobuf_unittest"
+#define UNITTEST ::protobuf_unittest
+#define UNITTEST_IMPORT ::protobuf_unittest_import
-using internal::DownCast;
-using unittest::ForeignMessage;
-using unittest::TestAllExtensions;
-using unittest::TestAllTypes;
-
-static int Func(int i, int j) { return i * j; }
-
-static std::string StrFunc(int i, int j) { return absl::StrCat(Func(i, 4)); }
-
-TEST(RepeatedFieldReflectionTest, RegularFields) {
- TestAllTypes message;
- const Reflection* refl = message.GetReflection();
- const Descriptor* desc = message.GetDescriptor();
-
- for (int i = 0; i < 10; ++i) {
- message.add_repeated_int32(Func(i, 1));
- message.add_repeated_double(Func(i, 2));
- message.add_repeated_string(StrFunc(i, 5));
- message.add_repeated_foreign_message()->set_c(Func(i, 6));
- }
-
- // Get FieldDescriptors for all the fields of interest.
- const FieldDescriptor* fd_repeated_int32 =
- desc->FindFieldByName("repeated_int32");
- const FieldDescriptor* fd_repeated_double =
- desc->FindFieldByName("repeated_double");
- const FieldDescriptor* fd_repeated_string =
- desc->FindFieldByName("repeated_string");
- const FieldDescriptor* fd_repeated_foreign_message =
- desc->FindFieldByName("repeated_foreign_message");
-
- // Get RepeatedField objects for all fields of interest.
- const RepeatedField<int32_t>& rf_int32 =
- refl->GetRepeatedField<int32_t>(message, fd_repeated_int32);
- const RepeatedField<double>& rf_double =
- refl->GetRepeatedField<double>(message, fd_repeated_double);
-
- // Get mutable RepeatedField objects for all fields of interest.
- RepeatedField<int32_t>* mrf_int32 =
- refl->MutableRepeatedField<int32_t>(&message, fd_repeated_int32);
- RepeatedField<double>* mrf_double =
- refl->MutableRepeatedField<double>(&message, fd_repeated_double);
-
- // Get RepeatedPtrField objects for all fields of interest.
- const RepeatedPtrField<std::string>& rpf_string =
- refl->GetRepeatedPtrField<std::string>(message, fd_repeated_string);
- const RepeatedPtrField<ForeignMessage>& rpf_foreign_message =
- refl->GetRepeatedPtrField<ForeignMessage>(message,
- fd_repeated_foreign_message);
- const RepeatedPtrField<Message>& rpf_message =
- refl->GetRepeatedPtrField<Message>(message, fd_repeated_foreign_message);
-
- // Get mutable RepeatedPtrField objects for all fields of interest.
- RepeatedPtrField<std::string>* mrpf_string =
- refl->MutableRepeatedPtrField<std::string>(&message, fd_repeated_string);
- RepeatedPtrField<ForeignMessage>* mrpf_foreign_message =
- refl->MutableRepeatedPtrField<ForeignMessage>(
- &message, fd_repeated_foreign_message);
- RepeatedPtrField<Message>* mrpf_message =
- refl->MutableRepeatedPtrField<Message>(&message,
- fd_repeated_foreign_message);
-
- // Make sure we can do gets and sets through the Repeated[Ptr]Field objects.
- for (int i = 0; i < 10; ++i) {
- // Check gets through const objects.
- EXPECT_EQ(rf_int32.Get(i), Func(i, 1));
- EXPECT_EQ(rf_double.Get(i), Func(i, 2));
- EXPECT_EQ(rpf_string.Get(i), StrFunc(i, 5));
- EXPECT_EQ(rpf_foreign_message.Get(i).c(), Func(i, 6));
- EXPECT_EQ(DownCast<const ForeignMessage*>(&rpf_message.Get(i))->c(),
- Func(i, 6));
-
- // Check gets through mutable objects.
- EXPECT_EQ(mrf_int32->Get(i), Func(i, 1));
- EXPECT_EQ(mrf_double->Get(i), Func(i, 2));
- EXPECT_EQ(mrpf_string->Get(i), StrFunc(i, 5));
- EXPECT_EQ(mrpf_foreign_message->Get(i).c(), Func(i, 6));
- EXPECT_EQ(DownCast<const ForeignMessage*>(&mrpf_message->Get(i))->c(),
- Func(i, 6));
-
- // Check sets through mutable objects.
- mrf_int32->Set(i, Func(i, -1));
- mrf_double->Set(i, Func(i, -2));
- mrpf_string->Mutable(i)->assign(StrFunc(i, -5));
- mrpf_foreign_message->Mutable(i)->set_c(Func(i, -6));
- EXPECT_EQ(message.repeated_int32(i), Func(i, -1));
- EXPECT_EQ(message.repeated_double(i), Func(i, -2));
- EXPECT_EQ(message.repeated_string(i), StrFunc(i, -5));
- EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, -6));
- DownCast<ForeignMessage*>(mrpf_message->Mutable(i))->set_c(Func(i, 7));
- EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, 7));
- }
-
-#if GTEST_HAS_DEATH_TEST
- // Make sure types are checked correctly at runtime.
- const FieldDescriptor* fd_optional_int32 =
- desc->FindFieldByName("optional_int32");
- EXPECT_DEATH(refl->GetRepeatedField<int32_t>(message, fd_optional_int32),
- "requires a repeated field");
- EXPECT_DEATH(refl->GetRepeatedField<double>(message, fd_repeated_int32),
- "not the right type");
- EXPECT_DEATH(refl->GetRepeatedPtrField<TestAllTypes>(
- message, fd_repeated_foreign_message),
- "wrong submessage type");
-#endif // GTEST_HAS_DEATH_TEST
-}
-
-
-TEST(RepeatedFieldReflectionTest, ExtensionFields) {
- TestAllExtensions extended_message;
- const Reflection* refl = extended_message.GetReflection();
- const Descriptor* desc = extended_message.GetDescriptor();
-
- for (int i = 0; i < 10; ++i) {
- extended_message.AddExtension(unittest::repeated_int64_extension,
- Func(i, 1));
- }
-
- const FieldDescriptor* fd_repeated_int64_extension =
- desc->file()->FindExtensionByName("repeated_int64_extension");
- ABSL_CHECK(fd_repeated_int64_extension != nullptr);
-
- const RepeatedField<int64_t>& rf_int64_extension =
- refl->GetRepeatedField<int64_t>(extended_message,
- fd_repeated_int64_extension);
-
- RepeatedField<int64_t>* mrf_int64_extension =
- refl->MutableRepeatedField<int64_t>(&extended_message,
- fd_repeated_int64_extension);
-
- for (int i = 0; i < 10; ++i) {
- EXPECT_EQ(Func(i, 1), rf_int64_extension.Get(i));
- mrf_int64_extension->Set(i, Func(i, -1));
- EXPECT_EQ(Func(i, -1), extended_message.GetExtension(
- unittest::repeated_int64_extension, i));
- }
-}
-
-template <typename Ref, typename MessageType, typename ValueType>
-void TestRepeatedFieldRefIteratorForPrimitive(
- const Ref& handle, const MessageType& message,
- ValueType (MessageType::*GetFunc)(int) const) {
- int index = 0;
- for (typename Ref::const_iterator it = handle.begin(); it != handle.end();
- ++it) {
- EXPECT_EQ((message.*GetFunc)(index), *it);
- ++index;
- }
- EXPECT_EQ(handle.size(), index);
-}
-
-template <typename MessageType, typename ValueType>
-void TestRepeatedFieldRefIteratorForString(
- const RepeatedFieldRef<std::string>& handle, const MessageType& message,
- ValueType (MessageType::*GetFunc)(int) const) {
- int index = 0;
- for (typename RepeatedFieldRef<std::string>::const_iterator it =
- handle.begin();
- it != handle.end(); ++it) {
- // Test both operator* and operator->
- EXPECT_EQ((message.*GetFunc)(index), *it);
- EXPECT_EQ((message.*GetFunc)(index).size(), it->size());
- ++index;
- }
- EXPECT_EQ(handle.size(), index);
-}
-
-TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForRegularFields) {
- TestAllTypes message;
- const Reflection* refl = message.GetReflection();
- const Descriptor* desc = message.GetDescriptor();
-
- for (int i = 0; i < 10; ++i) {
- message.add_repeated_int32(Func(i, 1));
- message.add_repeated_double(Func(i, 2));
- message.add_repeated_string(StrFunc(i, 5));
- message.add_repeated_foreign_message()->set_c(Func(i, 6));
- }
-
- // Get FieldDescriptors for all the fields of interest.
- const FieldDescriptor* fd_repeated_int32 =
- desc->FindFieldByName("repeated_int32");
- const FieldDescriptor* fd_repeated_double =
- desc->FindFieldByName("repeated_double");
- const FieldDescriptor* fd_repeated_string =
- desc->FindFieldByName("repeated_string");
- const FieldDescriptor* fd_repeated_foreign_message =
- desc->FindFieldByName("repeated_foreign_message");
-
- // Get RepeatedFieldRef objects for all fields of interest.
- const RepeatedFieldRef<int32_t> rf_int32 =
- refl->GetRepeatedFieldRef<int32_t>(message, fd_repeated_int32);
- const RepeatedFieldRef<double> rf_double =
- refl->GetRepeatedFieldRef<double>(message, fd_repeated_double);
- const RepeatedFieldRef<std::string> rf_string =
- refl->GetRepeatedFieldRef<std::string>(message, fd_repeated_string);
- const RepeatedFieldRef<ForeignMessage> rf_foreign_message =
- refl->GetRepeatedFieldRef<ForeignMessage>(message,
- fd_repeated_foreign_message);
- const RepeatedFieldRef<Message> rf_message =
- refl->GetRepeatedFieldRef<Message>(message, fd_repeated_foreign_message);
-
- // Get MutableRepeatedFieldRef objects for all fields of interest.
- const MutableRepeatedFieldRef<int32_t> mrf_int32 =
- refl->GetMutableRepeatedFieldRef<int32_t>(&message, fd_repeated_int32);
- const MutableRepeatedFieldRef<double> mrf_double =
- refl->GetMutableRepeatedFieldRef<double>(&message, fd_repeated_double);
- const MutableRepeatedFieldRef<std::string> mrf_string =
- refl->GetMutableRepeatedFieldRef<std::string>(&message,
- fd_repeated_string);
- const MutableRepeatedFieldRef<ForeignMessage> mrf_foreign_message =
- refl->GetMutableRepeatedFieldRef<ForeignMessage>(
- &message, fd_repeated_foreign_message);
- const MutableRepeatedFieldRef<Message> mrf_message =
- refl->GetMutableRepeatedFieldRef<Message>(&message,
- fd_repeated_foreign_message);
-
- EXPECT_EQ(message.repeated_int32_size(), rf_int32.size());
- EXPECT_EQ(message.repeated_int32_size(), mrf_int32.size());
- EXPECT_EQ(message.repeated_double_size(), rf_double.size());
- EXPECT_EQ(message.repeated_double_size(), mrf_double.size());
- EXPECT_EQ(message.repeated_string_size(), rf_string.size());
- EXPECT_EQ(message.repeated_string_size(), mrf_string.size());
- EXPECT_EQ(message.repeated_foreign_message_size(), rf_foreign_message.size());
- EXPECT_EQ(message.repeated_foreign_message_size(),
- mrf_foreign_message.size());
- EXPECT_EQ(message.repeated_foreign_message_size(), rf_message.size());
- EXPECT_EQ(message.repeated_foreign_message_size(), mrf_message.size());
-
- EXPECT_FALSE(rf_int32.empty());
- EXPECT_FALSE(mrf_int32.empty());
- EXPECT_FALSE(rf_double.empty());
- EXPECT_FALSE(mrf_double.empty());
- EXPECT_FALSE(rf_string.empty());
- EXPECT_FALSE(mrf_string.empty());
- EXPECT_FALSE(rf_foreign_message.empty());
- EXPECT_FALSE(mrf_foreign_message.empty());
- EXPECT_FALSE(rf_message.empty());
- EXPECT_FALSE(mrf_message.empty());
-
- // Make sure we can do gets and sets through the RepeatedFieldRef objects.
- for (int i = 0; i < 10; ++i) {
- // Check gets through const objects.
- EXPECT_EQ(rf_int32.Get(i), Func(i, 1));
- EXPECT_EQ(rf_double.Get(i), Func(i, 2));
- EXPECT_EQ(rf_string.Get(i), StrFunc(i, 5));
- ForeignMessage scratch_space;
- EXPECT_EQ(rf_foreign_message.Get(i, &scratch_space).c(), Func(i, 6));
- EXPECT_EQ(
- DownCast<const ForeignMessage&>(rf_message.Get(i, &scratch_space)).c(),
- Func(i, 6));
-
- // Check gets through mutable objects.
- EXPECT_EQ(mrf_int32.Get(i), Func(i, 1));
- EXPECT_EQ(mrf_double.Get(i), Func(i, 2));
- EXPECT_EQ(mrf_string.Get(i), StrFunc(i, 5));
- EXPECT_EQ(mrf_foreign_message.Get(i, &scratch_space).c(), Func(i, 6));
- EXPECT_EQ(
- DownCast<const ForeignMessage&>(mrf_message.Get(i, &scratch_space)).c(),
- Func(i, 6));
-
- // Check sets through mutable objects.
- mrf_int32.Set(i, Func(i, -1));
- mrf_double.Set(i, Func(i, -2));
- mrf_string.Set(i, StrFunc(i, -5));
- ForeignMessage foreign_message;
- foreign_message.set_c(Func(i, -6));
- mrf_foreign_message.Set(i, foreign_message);
- EXPECT_EQ(message.repeated_int32(i), Func(i, -1));
- EXPECT_EQ(message.repeated_double(i), Func(i, -2));
- EXPECT_EQ(message.repeated_string(i), StrFunc(i, -5));
- EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, -6));
- foreign_message.set_c(Func(i, 7));
- mrf_message.Set(i, foreign_message);
- EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, 7));
- }
-
- // Test iterators.
- TestRepeatedFieldRefIteratorForPrimitive(rf_int32, message,
- &TestAllTypes::repeated_int32);
- TestRepeatedFieldRefIteratorForPrimitive(rf_double, message,
- &TestAllTypes::repeated_double);
- TestRepeatedFieldRefIteratorForString(rf_string, message,
- &TestAllTypes::repeated_string);
-
- // Test iterators for message fields.
- typedef RepeatedFieldRef<ForeignMessage>::iterator MessageIterator;
- int index = 0;
- for (MessageIterator it = rf_foreign_message.begin();
- it != rf_foreign_message.end(); ++it) {
- EXPECT_EQ(message.repeated_foreign_message(index).c(), it->c());
- ++index;
- }
- EXPECT_EQ(10, index);
-
- // Test iterator operators that are not usually used in regular for-loops.
- // Including: post increment, assign, ==.
- MessageIterator old_it = rf_foreign_message.begin();
- MessageIterator new_it = old_it++;
- EXPECT_FALSE(old_it == new_it);
- // Check that old_it++ increments old_it once.
- for (index = 1; old_it != rf_foreign_message.end(); ++old_it, ++index) {
- EXPECT_EQ(message.repeated_foreign_message(index).c(), old_it->c());
- }
- EXPECT_EQ(10, index);
- // Test assign operator.
- old_it = new_it;
- for (index = 0; old_it != rf_foreign_message.end(); ++old_it, ++index) {
- EXPECT_EQ(message.repeated_foreign_message(index).c(), old_it->c());
- }
- EXPECT_EQ(10, index);
- // Check that the returned value of old_it++ is the one before increment.
- for (index = 0; new_it != rf_foreign_message.end(); ++new_it, ++index) {
- EXPECT_EQ(message.repeated_foreign_message(index).c(), new_it->c());
- }
- EXPECT_EQ(10, index);
-
- // Test MutableRepeatedFieldRef::Reserve()
- mrf_int32.Reserve(mrf_int32.size() + 1);
- mrf_double.Reserve(mrf_double.size() + 1);
- mrf_string.Reserve(mrf_string.size() + 1);
- mrf_foreign_message.Reserve(mrf_foreign_message.size() + 1);
-
- // Test MutableRepeatedFieldRef::Add()
- mrf_int32.Add(1234);
- mrf_double.Add(1234.0);
- mrf_string.Add("1234");
- ForeignMessage foreign_message;
- foreign_message.set_c(1234);
- mrf_foreign_message.Add(foreign_message);
- EXPECT_EQ(1234, message.repeated_int32(10));
- EXPECT_EQ(1234.0, message.repeated_double(10));
- EXPECT_EQ("1234", message.repeated_string(10));
- EXPECT_EQ(1234, message.repeated_foreign_message(10).c());
-
- // Test MutableRepeatedFieldRef::RemoveLast()
- mrf_int32.RemoveLast();
- mrf_double.RemoveLast();
- mrf_string.RemoveLast();
- mrf_foreign_message.RemoveLast();
- EXPECT_EQ(10, message.repeated_int32_size());
- EXPECT_EQ(10, message.repeated_double_size());
- EXPECT_EQ(10, message.repeated_string_size());
- EXPECT_EQ(10, message.repeated_foreign_message_size());
-
- // Test MutableRepeatedFieldRef::SwapElements()
- mrf_int32.SwapElements(0, 9);
- mrf_double.SwapElements(0, 9);
- mrf_string.SwapElements(0, 9);
- mrf_foreign_message.SwapElements(0, 9);
- EXPECT_EQ(Func(9, -1), message.repeated_int32(0));
- EXPECT_EQ(Func(0, -1), message.repeated_int32(9));
- EXPECT_EQ(Func(9, -2), message.repeated_double(0));
- EXPECT_EQ(Func(0, -2), message.repeated_double(9));
- EXPECT_EQ(StrFunc(9, -5), message.repeated_string(0));
- EXPECT_EQ(StrFunc(0, -5), message.repeated_string(9));
- EXPECT_EQ(Func(9, 7), message.repeated_foreign_message(0).c());
- EXPECT_EQ(Func(0, 7), message.repeated_foreign_message(9).c());
-
- // Test MutableRepeatedFieldRef::Clear()
- mrf_int32.Clear();
- mrf_double.Clear();
- mrf_string.Clear();
- mrf_foreign_message.Clear();
- EXPECT_EQ(0, message.repeated_int32_size());
- EXPECT_EQ(0, message.repeated_double_size());
- EXPECT_EQ(0, message.repeated_string_size());
- EXPECT_EQ(0, message.repeated_foreign_message_size());
-
- // Test (Mutable)RepeatedFieldRef::empty()
- EXPECT_TRUE(rf_int32.empty());
- EXPECT_TRUE(mrf_int32.empty());
- EXPECT_TRUE(rf_double.empty());
- EXPECT_TRUE(mrf_double.empty());
- EXPECT_TRUE(rf_string.empty());
- EXPECT_TRUE(mrf_string.empty());
- EXPECT_TRUE(rf_foreign_message.empty());
- EXPECT_TRUE(mrf_foreign_message.empty());
- EXPECT_TRUE(rf_message.empty());
- EXPECT_TRUE(mrf_message.empty());
-
-#if GTEST_HAS_DEATH_TEST
-
- // Make sure types are checked correctly at runtime.
- const FieldDescriptor* fd_optional_int32 =
- desc->FindFieldByName("optional_int32");
- EXPECT_DEATH(refl->GetRepeatedFieldRef<int32_t>(message, fd_optional_int32),
- "");
- EXPECT_DEATH(refl->GetRepeatedFieldRef<double>(message, fd_repeated_int32),
- "");
- EXPECT_DEATH(refl->GetRepeatedFieldRef<TestAllTypes>(
- message, fd_repeated_foreign_message),
- "");
-
-#endif // GTEST_HAS_DEATH_TEST
-}
-
-TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForEnums) {
- TestAllTypes message;
- const Reflection* refl = message.GetReflection();
- const Descriptor* desc = message.GetDescriptor();
-
- for (int i = 0; i < 10; ++i) {
- message.add_repeated_nested_enum(TestAllTypes::BAR);
- }
-
- const FieldDescriptor* fd_repeated_nested_enum =
- desc->FindFieldByName("repeated_nested_enum");
- const RepeatedFieldRef<TestAllTypes::NestedEnum> enum_ref =
- refl->GetRepeatedFieldRef<TestAllTypes::NestedEnum>(
- message, fd_repeated_nested_enum);
- const MutableRepeatedFieldRef<TestAllTypes::NestedEnum> mutable_enum_ref =
- refl->GetMutableRepeatedFieldRef<TestAllTypes::NestedEnum>(
- &message, fd_repeated_nested_enum);
- const RepeatedFieldRef<int32_t> int32_ref =
- refl->GetRepeatedFieldRef<int32_t>(message, fd_repeated_nested_enum);
- const MutableRepeatedFieldRef<int32_t> mutable_int32_ref =
- refl->GetMutableRepeatedFieldRef<int32_t>(&message,
- fd_repeated_nested_enum);
-
- EXPECT_EQ(message.repeated_nested_enum_size(), enum_ref.size());
- EXPECT_EQ(message.repeated_nested_enum_size(), mutable_enum_ref.size());
- EXPECT_EQ(message.repeated_nested_enum_size(), int32_ref.size());
- EXPECT_EQ(message.repeated_nested_enum_size(), mutable_int32_ref.size());
-
- EXPECT_FALSE(enum_ref.empty());
- EXPECT_FALSE(mutable_enum_ref.empty());
- EXPECT_FALSE(int32_ref.empty());
- EXPECT_FALSE(mutable_int32_ref.empty());
-
- for (int i = 0; i < 10; ++i) {
- EXPECT_EQ(TestAllTypes::BAR, enum_ref.Get(i));
- EXPECT_EQ(TestAllTypes::BAR, mutable_enum_ref.Get(i));
- mutable_enum_ref.Set(i, TestAllTypes::BAZ);
- EXPECT_EQ(TestAllTypes::BAZ, enum_ref.Get(i));
- EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(i));
-
- message.set_repeated_nested_enum(i, TestAllTypes::BAR);
- EXPECT_EQ(TestAllTypes::BAR, int32_ref.Get(i));
- EXPECT_EQ(TestAllTypes::BAR, mutable_int32_ref.Get(i));
- mutable_int32_ref.Set(i, TestAllTypes::BAZ);
- EXPECT_EQ(TestAllTypes::BAZ, int32_ref.Get(i));
- EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(i));
- }
-
- TestRepeatedFieldRefIteratorForPrimitive(enum_ref, message,
- &TestAllTypes::repeated_nested_enum);
- TestRepeatedFieldRefIteratorForPrimitive(int32_ref, message,
- &TestAllTypes::repeated_nested_enum);
-
- // Test Add()
- mutable_enum_ref.Add(TestAllTypes::FOO);
- EXPECT_EQ(TestAllTypes::FOO, message.repeated_nested_enum(10));
- mutable_int32_ref.Add(TestAllTypes::BAR);
- EXPECT_EQ(TestAllTypes::BAR, message.repeated_nested_enum(11));
-
- // Test RemoveLast()
- mutable_enum_ref.RemoveLast();
- EXPECT_EQ(11, message.repeated_nested_enum_size());
- mutable_int32_ref.RemoveLast();
- EXPECT_EQ(10, message.repeated_nested_enum_size());
-
- // Test SwapElements()
- mutable_enum_ref.Set(0, TestAllTypes::BAR);
- mutable_enum_ref.Set(9, TestAllTypes::BAZ);
- mutable_enum_ref.SwapElements(0, 9);
- EXPECT_EQ(TestAllTypes::BAZ, enum_ref.Get(0));
- EXPECT_EQ(TestAllTypes::BAR, enum_ref.Get(9));
- mutable_int32_ref.SwapElements(0, 9);
- EXPECT_EQ(TestAllTypes::BAR, enum_ref.Get(0));
- EXPECT_EQ(TestAllTypes::BAZ, enum_ref.Get(9));
-
- // Test Clear()
- mutable_enum_ref.Clear();
- EXPECT_EQ(0, message.repeated_nested_enum_size());
- mutable_enum_ref.Add(TestAllTypes::FOO);
- EXPECT_EQ(1, message.repeated_nested_enum_size());
- mutable_int32_ref.Clear();
- EXPECT_EQ(0, message.repeated_nested_enum_size());
-
- // Test empty()
- EXPECT_TRUE(enum_ref.empty());
- EXPECT_TRUE(mutable_enum_ref.empty());
- EXPECT_TRUE(int32_ref.empty());
- EXPECT_TRUE(mutable_int32_ref.empty());
-}
-
-TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForExtensionFields) {
- TestAllExtensions extended_message;
- const Reflection* refl = extended_message.GetReflection();
- const Descriptor* desc = extended_message.GetDescriptor();
-
- for (int i = 0; i < 10; ++i) {
- extended_message.AddExtension(unittest::repeated_int64_extension,
- Func(i, 1));
- }
-
- const FieldDescriptor* fd_repeated_int64_extension =
- desc->file()->FindExtensionByName("repeated_int64_extension");
- ABSL_CHECK(fd_repeated_int64_extension != nullptr);
-
- const RepeatedFieldRef<int64_t> rf_int64_extension =
- refl->GetRepeatedFieldRef<int64_t>(extended_message,
- fd_repeated_int64_extension);
-
- const MutableRepeatedFieldRef<int64_t> mrf_int64_extension =
- refl->GetMutableRepeatedFieldRef<int64_t>(&extended_message,
- fd_repeated_int64_extension);
-
- for (int i = 0; i < 10; ++i) {
- EXPECT_EQ(Func(i, 1), rf_int64_extension.Get(i));
- mrf_int64_extension.Set(i, Func(i, -1));
- EXPECT_EQ(Func(i, -1), extended_message.GetExtension(
- unittest::repeated_int64_extension, i));
- }
-}
-
-
-TEST(RepeatedFieldReflectionTest, RepeatedFieldRefMergeFromAndSwap) {
- // Set-up message content.
- TestAllTypes m0, m1, m2;
- for (int i = 0; i < 10; ++i) {
- m0.add_repeated_int32(Func(i, 1));
- m0.add_repeated_double(Func(i, 2));
- m0.add_repeated_string(StrFunc(i, 5));
- m0.add_repeated_foreign_message()->set_c(Func(i, 6));
- m0.add_repeated_nested_enum(TestAllTypes::FOO);
- m1.add_repeated_int32(Func(i, 11));
- m1.add_repeated_double(Func(i, 12));
- m1.add_repeated_string(StrFunc(i, 15));
- m1.add_repeated_foreign_message()->set_c(Func(i, 16));
- m1.add_repeated_nested_enum(TestAllTypes::BAR);
- m2.add_repeated_int32(Func(i, 21));
- m2.add_repeated_double(Func(i, 22));
- m2.add_repeated_string(StrFunc(i, 25));
- m2.add_repeated_foreign_message()->set_c(Func(i, 26));
- m2.add_repeated_nested_enum(TestAllTypes::BAZ);
- }
-
- const Reflection* refl = m0.GetReflection();
- const Descriptor* desc = m0.GetDescriptor();
-
- // Get FieldDescriptors for all the fields of interest.
- const FieldDescriptor* fd_repeated_int32 =
- desc->FindFieldByName("repeated_int32");
- const FieldDescriptor* fd_repeated_double =
- desc->FindFieldByName("repeated_double");
- const FieldDescriptor* fd_repeated_string =
- desc->FindFieldByName("repeated_string");
- const FieldDescriptor* fd_repeated_foreign_message =
- desc->FindFieldByName("repeated_foreign_message");
- const FieldDescriptor* fd_repeated_nested_enum =
- desc->FindFieldByName("repeated_nested_enum");
-
- // Get MutableRepeatedFieldRef objects for all fields of interest.
- const MutableRepeatedFieldRef<int32_t> mrf_int32 =
- refl->GetMutableRepeatedFieldRef<int32_t>(&m0, fd_repeated_int32);
- const MutableRepeatedFieldRef<double> mrf_double =
- refl->GetMutableRepeatedFieldRef<double>(&m0, fd_repeated_double);
- const MutableRepeatedFieldRef<std::string> mrf_string =
- refl->GetMutableRepeatedFieldRef<std::string>(&m0, fd_repeated_string);
- const MutableRepeatedFieldRef<ForeignMessage> mrf_foreign_message =
- refl->GetMutableRepeatedFieldRef<ForeignMessage>(
- &m0, fd_repeated_foreign_message);
- const MutableRepeatedFieldRef<TestAllTypes::NestedEnum> mrf_nested_enum =
- refl->GetMutableRepeatedFieldRef<TestAllTypes::NestedEnum>(
- &m0, fd_repeated_nested_enum);
-
- // Test MutableRepeatedRef::CopyFrom
- mrf_int32.CopyFrom(refl->GetRepeatedFieldRef<int32_t>(m1, fd_repeated_int32));
- mrf_double.CopyFrom(
- refl->GetRepeatedFieldRef<double>(m1, fd_repeated_double));
- mrf_string.CopyFrom(
- refl->GetRepeatedFieldRef<std::string>(m1, fd_repeated_string));
- mrf_foreign_message.CopyFrom(refl->GetRepeatedFieldRef<ForeignMessage>(
- m1, fd_repeated_foreign_message));
- mrf_nested_enum.CopyFrom(refl->GetRepeatedFieldRef<TestAllTypes::NestedEnum>(
- m1, fd_repeated_nested_enum));
- for (int i = 0; i < 10; ++i) {
- EXPECT_EQ(Func(i, 11), m0.repeated_int32(i));
- EXPECT_EQ(Func(i, 12), m0.repeated_double(i));
- EXPECT_EQ(StrFunc(i, 15), m0.repeated_string(i));
- EXPECT_EQ(Func(i, 16), m0.repeated_foreign_message(i).c());
- EXPECT_EQ(TestAllTypes::BAR, m0.repeated_nested_enum(i));
- }
-
- // Test MutableRepeatedRef::MergeFrom
- mrf_int32.MergeFrom(
- refl->GetRepeatedFieldRef<int32_t>(m2, fd_repeated_int32));
- mrf_double.MergeFrom(
- refl->GetRepeatedFieldRef<double>(m2, fd_repeated_double));
- mrf_string.MergeFrom(
- refl->GetRepeatedFieldRef<std::string>(m2, fd_repeated_string));
- mrf_foreign_message.MergeFrom(refl->GetRepeatedFieldRef<ForeignMessage>(
- m2, fd_repeated_foreign_message));
- mrf_nested_enum.MergeFrom(refl->GetRepeatedFieldRef<TestAllTypes::NestedEnum>(
- m2, fd_repeated_nested_enum));
- for (int i = 0; i < 10; ++i) {
- EXPECT_EQ(Func(i, 21), m0.repeated_int32(i + 10));
- EXPECT_EQ(Func(i, 22), m0.repeated_double(i + 10));
- EXPECT_EQ(StrFunc(i, 25), m0.repeated_string(i + 10));
- EXPECT_EQ(Func(i, 26), m0.repeated_foreign_message(i + 10).c());
- EXPECT_EQ(TestAllTypes::BAZ, m0.repeated_nested_enum(i + 10));
- }
-
- // Test MutableRepeatedRef::Swap
- // Swap between m0 and m2.
- mrf_int32.Swap(
- refl->GetMutableRepeatedFieldRef<int32_t>(&m2, fd_repeated_int32));
- mrf_double.Swap(
- refl->GetMutableRepeatedFieldRef<double>(&m2, fd_repeated_double));
- mrf_string.Swap(
- refl->GetMutableRepeatedFieldRef<std::string>(&m2, fd_repeated_string));
- mrf_foreign_message.Swap(refl->GetMutableRepeatedFieldRef<ForeignMessage>(
- &m2, fd_repeated_foreign_message));
- mrf_nested_enum.Swap(
- refl->GetMutableRepeatedFieldRef<TestAllTypes::NestedEnum>(
- &m2, fd_repeated_nested_enum));
- for (int i = 0; i < 10; ++i) {
- // Check the content of m0.
- EXPECT_EQ(Func(i, 21), m0.repeated_int32(i));
- EXPECT_EQ(Func(i, 22), m0.repeated_double(i));
- EXPECT_EQ(StrFunc(i, 25), m0.repeated_string(i));
- EXPECT_EQ(Func(i, 26), m0.repeated_foreign_message(i).c());
- EXPECT_EQ(TestAllTypes::BAZ, m0.repeated_nested_enum(i));
-
- // Check the content of m2.
- EXPECT_EQ(Func(i, 11), m2.repeated_int32(i));
- EXPECT_EQ(Func(i, 12), m2.repeated_double(i));
- EXPECT_EQ(StrFunc(i, 15), m2.repeated_string(i));
- EXPECT_EQ(Func(i, 16), m2.repeated_foreign_message(i).c());
- EXPECT_EQ(TestAllTypes::BAR, m2.repeated_nested_enum(i));
- EXPECT_EQ(Func(i, 21), m2.repeated_int32(i + 10));
- EXPECT_EQ(Func(i, 22), m2.repeated_double(i + 10));
- EXPECT_EQ(StrFunc(i, 25), m2.repeated_string(i + 10));
- EXPECT_EQ(Func(i, 26), m2.repeated_foreign_message(i + 10).c());
- EXPECT_EQ(TestAllTypes::BAZ, m2.repeated_nested_enum(i + 10));
- }
-}
-
-// Test that GetRepeatedFieldRef/MutableRepeatedFieldRef works with
-// DynamicMessage.
-TEST(RepeatedFieldReflectionTest, RepeatedFieldRefDynamicMessage) {
- // DynamicMessage shares the same memory layout as generated message
- // and use the same GeneratedMessageReflection code for reflection.
- // All code paths should already be covered by the other tests for
- // generated messages. Here we just test one field.
-
- const Descriptor* desc = TestAllTypes::descriptor();
- const FieldDescriptor* fd_repeated_int32 =
- desc->FindFieldByName("repeated_int32");
-
- DynamicMessageFactory factory;
- std::unique_ptr<Message> dynamic_message(factory.GetPrototype(desc)->New());
- const Reflection* refl = dynamic_message->GetReflection();
-
- MutableRepeatedFieldRef<int32_t> rf_int32 =
- refl->GetMutableRepeatedFieldRef<int32_t>(dynamic_message.get(),
- fd_repeated_int32);
- rf_int32.Add(1234);
- EXPECT_EQ(1, refl->FieldSize(*dynamic_message, fd_repeated_int32));
- EXPECT_EQ(1234,
- refl->GetRepeatedInt32(*dynamic_message, fd_repeated_int32, 0));
-}
-
-} // namespace
-} // namespace protobuf
-} // namespace google
+// Must include after the above macros.
+// clang-format off
+#include "google/protobuf/test_util.inc"
+#include "google/protobuf/repeated_field_reflection_unittest.inc"
+// clang-format on
diff --git a/src/google/protobuf/repeated_field_reflection_unittest.inc b/src/google/protobuf/repeated_field_reflection_unittest.inc
new file mode 100644
index 0000000..97d5c41
--- /dev/null
+++ b/src/google/protobuf/repeated_field_reflection_unittest.inc
@@ -0,0 +1,692 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+// Author: tgs@google.com (Tom Szymanski)
+//
+// Test reflection methods for aggregate access to Repeated[Ptr]Fields.
+// This test proto2 methods on a proto2 layout.
+
+#include <gtest/gtest.h>
+#include "absl/base/casts.h"
+#include "absl/strings/cord.h"
+#include "google/protobuf/dynamic_message.h"
+#include "google/protobuf/port.h"
+#include "google/protobuf/reflection.h"
+
+namespace google {
+namespace protobuf {
+namespace {
+
+
+using internal::DownCast;
+using UNITTEST::ForeignMessage;
+using UNITTEST::TestAllExtensions;
+using UNITTEST::TestAllTypes;
+
+static int Func(int i, int j) { return i * j; }
+
+static std::string StrFunc(int i, int j) { return absl::StrCat(Func(i, 4)); }
+
+TEST(REFLECTION_TEST, RegularFields) {
+ TestAllTypes message;
+ const Reflection* refl = message.GetReflection();
+ const Descriptor* desc = message.GetDescriptor();
+
+ for (int i = 0; i < 10; ++i) {
+ message.add_repeated_int32(Func(i, 1));
+ message.add_repeated_double(Func(i, 2));
+ message.add_repeated_string(StrFunc(i, 5));
+ message.add_repeated_foreign_message()->set_c(Func(i, 6));
+ }
+
+ // Get FieldDescriptors for all the fields of interest.
+ const FieldDescriptor* fd_repeated_int32 =
+ desc->FindFieldByName("repeated_int32");
+ const FieldDescriptor* fd_repeated_double =
+ desc->FindFieldByName("repeated_double");
+ const FieldDescriptor* fd_repeated_string =
+ desc->FindFieldByName("repeated_string");
+ const FieldDescriptor* fd_repeated_foreign_message =
+ desc->FindFieldByName("repeated_foreign_message");
+
+ // Get RepeatedField objects for all fields of interest.
+ const RepeatedField<int32_t>& rf_int32 =
+ refl->GetRepeatedField<int32_t>(message, fd_repeated_int32);
+ const RepeatedField<double>& rf_double =
+ refl->GetRepeatedField<double>(message, fd_repeated_double);
+
+ // Get mutable RepeatedField objects for all fields of interest.
+ RepeatedField<int32_t>* mrf_int32 =
+ refl->MutableRepeatedField<int32_t>(&message, fd_repeated_int32);
+ RepeatedField<double>* mrf_double =
+ refl->MutableRepeatedField<double>(&message, fd_repeated_double);
+
+ // Get RepeatedPtrField objects for all fields of interest.
+ const RepeatedPtrField<std::string>& rpf_string =
+ refl->GetRepeatedPtrField<std::string>(message, fd_repeated_string);
+ const RepeatedPtrField<ForeignMessage>& rpf_foreign_message =
+ refl->GetRepeatedPtrField<ForeignMessage>(message,
+ fd_repeated_foreign_message);
+ const RepeatedPtrField<Message>& rpf_message =
+ refl->GetRepeatedPtrField<Message>(message, fd_repeated_foreign_message);
+
+ // Get mutable RepeatedPtrField objects for all fields of interest.
+ RepeatedPtrField<std::string>* mrpf_string =
+ refl->MutableRepeatedPtrField<std::string>(&message, fd_repeated_string);
+ RepeatedPtrField<ForeignMessage>* mrpf_foreign_message =
+ refl->MutableRepeatedPtrField<ForeignMessage>(
+ &message, fd_repeated_foreign_message);
+ RepeatedPtrField<Message>* mrpf_message =
+ refl->MutableRepeatedPtrField<Message>(&message,
+ fd_repeated_foreign_message);
+
+ // Make sure we can do gets and sets through the Repeated[Ptr]Field objects.
+ for (int i = 0; i < 10; ++i) {
+ // Check gets through const objects.
+ EXPECT_EQ(rf_int32.Get(i), Func(i, 1));
+ EXPECT_EQ(rf_double.Get(i), Func(i, 2));
+ EXPECT_EQ(rpf_string.Get(i), StrFunc(i, 5));
+ EXPECT_EQ(rpf_foreign_message.Get(i).c(), Func(i, 6));
+ EXPECT_EQ(DownCast<const ForeignMessage*>(&rpf_message.Get(i))->c(),
+ Func(i, 6));
+
+ // Check gets through mutable objects.
+ EXPECT_EQ(mrf_int32->Get(i), Func(i, 1));
+ EXPECT_EQ(mrf_double->Get(i), Func(i, 2));
+ EXPECT_EQ(mrpf_string->Get(i), StrFunc(i, 5));
+ EXPECT_EQ(mrpf_foreign_message->Get(i).c(), Func(i, 6));
+ EXPECT_EQ(DownCast<const ForeignMessage*>(&mrpf_message->Get(i))->c(),
+ Func(i, 6));
+
+ // Check sets through mutable objects.
+ mrf_int32->Set(i, Func(i, -1));
+ mrf_double->Set(i, Func(i, -2));
+ mrpf_string->Mutable(i)->assign(StrFunc(i, -5));
+ mrpf_foreign_message->Mutable(i)->set_c(Func(i, -6));
+ EXPECT_EQ(message.repeated_int32(i), Func(i, -1));
+ EXPECT_EQ(message.repeated_double(i), Func(i, -2));
+ EXPECT_EQ(message.repeated_string(i), StrFunc(i, -5));
+ EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, -6));
+ DownCast<ForeignMessage*>(mrpf_message->Mutable(i))->set_c(Func(i, 7));
+ EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, 7));
+ }
+
+#if GTEST_HAS_DEATH_TEST
+ // Make sure types are checked correctly at runtime.
+ const FieldDescriptor* fd_optional_int32 =
+ desc->FindFieldByName("optional_int32");
+ EXPECT_DEATH(refl->GetRepeatedField<int32_t>(message, fd_optional_int32),
+ "requires a repeated field");
+ EXPECT_DEATH(refl->GetRepeatedField<double>(message, fd_repeated_int32),
+ "not the right type");
+ EXPECT_DEATH(refl->GetRepeatedPtrField<TestAllTypes>(
+ message, fd_repeated_foreign_message),
+ "wrong submessage type");
+#endif // GTEST_HAS_DEATH_TEST
+}
+
+
+TEST(REFLECTION_TEST, ExtensionFields) {
+ TestAllExtensions extended_message;
+ const Reflection* refl = extended_message.GetReflection();
+ const Descriptor* desc = extended_message.GetDescriptor();
+
+ for (int i = 0; i < 10; ++i) {
+ extended_message.AddExtension(UNITTEST::repeated_int64_extension,
+ Func(i, 1));
+ }
+
+ const FieldDescriptor* fd_repeated_int64_extension =
+ desc->file()->FindExtensionByName("repeated_int64_extension");
+ ABSL_CHECK(fd_repeated_int64_extension != nullptr);
+
+ const RepeatedField<int64_t>& rf_int64_extension =
+ refl->GetRepeatedField<int64_t>(extended_message,
+ fd_repeated_int64_extension);
+
+ RepeatedField<int64_t>* mrf_int64_extension =
+ refl->MutableRepeatedField<int64_t>(&extended_message,
+ fd_repeated_int64_extension);
+
+ for (int i = 0; i < 10; ++i) {
+ EXPECT_EQ(Func(i, 1), rf_int64_extension.Get(i));
+ mrf_int64_extension->Set(i, Func(i, -1));
+ EXPECT_EQ(Func(i, -1), extended_message.GetExtension(
+ UNITTEST::repeated_int64_extension, i));
+ }
+}
+
+template <typename Ref, typename MessageType, typename ValueType>
+void TestRepeatedFieldRefIteratorForPrimitive(
+ const Ref& handle, const MessageType& message,
+ ValueType (MessageType::*GetFunc)(int) const) {
+ int index = 0;
+ for (typename Ref::const_iterator it = handle.begin(); it != handle.end();
+ ++it) {
+ EXPECT_EQ((message.*GetFunc)(index), *it);
+ ++index;
+ }
+ EXPECT_EQ(handle.size(), index);
+}
+
+template <typename MessageType, typename ValueType>
+void TestRepeatedFieldRefIteratorForString(
+ const RepeatedFieldRef<std::string>& handle, const MessageType& message,
+ ValueType (MessageType::*GetFunc)(int) const) {
+ int index = 0;
+ for (typename RepeatedFieldRef<std::string>::const_iterator it =
+ handle.begin();
+ it != handle.end(); ++it) {
+ // Test both operator* and operator->
+ EXPECT_EQ((message.*GetFunc)(index), *it);
+ EXPECT_EQ((message.*GetFunc)(index).size(), it->size());
+ ++index;
+ }
+ EXPECT_EQ(handle.size(), index);
+}
+
+TEST(REFLECTION_TEST, RepeatedFieldRefForRegularFields) {
+ TestAllTypes message;
+ const Reflection* refl = message.GetReflection();
+ const Descriptor* desc = message.GetDescriptor();
+
+ for (int i = 0; i < 10; ++i) {
+ message.add_repeated_int32(Func(i, 1));
+ message.add_repeated_double(Func(i, 2));
+ message.add_repeated_string(StrFunc(i, 5));
+ message.add_repeated_foreign_message()->set_c(Func(i, 6));
+ }
+
+ // Get FieldDescriptors for all the fields of interest.
+ const FieldDescriptor* fd_repeated_int32 =
+ desc->FindFieldByName("repeated_int32");
+ const FieldDescriptor* fd_repeated_double =
+ desc->FindFieldByName("repeated_double");
+ const FieldDescriptor* fd_repeated_string =
+ desc->FindFieldByName("repeated_string");
+ const FieldDescriptor* fd_repeated_foreign_message =
+ desc->FindFieldByName("repeated_foreign_message");
+
+ // Get RepeatedFieldRef objects for all fields of interest.
+ const RepeatedFieldRef<int32_t> rf_int32 =
+ refl->GetRepeatedFieldRef<int32_t>(message, fd_repeated_int32);
+ const RepeatedFieldRef<double> rf_double =
+ refl->GetRepeatedFieldRef<double>(message, fd_repeated_double);
+ const RepeatedFieldRef<std::string> rf_string =
+ refl->GetRepeatedFieldRef<std::string>(message, fd_repeated_string);
+ const RepeatedFieldRef<ForeignMessage> rf_foreign_message =
+ refl->GetRepeatedFieldRef<ForeignMessage>(message,
+ fd_repeated_foreign_message);
+ const RepeatedFieldRef<Message> rf_message =
+ refl->GetRepeatedFieldRef<Message>(message, fd_repeated_foreign_message);
+
+ // Get MutableRepeatedFieldRef objects for all fields of interest.
+ const MutableRepeatedFieldRef<int32_t> mrf_int32 =
+ refl->GetMutableRepeatedFieldRef<int32_t>(&message, fd_repeated_int32);
+ const MutableRepeatedFieldRef<double> mrf_double =
+ refl->GetMutableRepeatedFieldRef<double>(&message, fd_repeated_double);
+ const MutableRepeatedFieldRef<std::string> mrf_string =
+ refl->GetMutableRepeatedFieldRef<std::string>(&message,
+ fd_repeated_string);
+ const MutableRepeatedFieldRef<ForeignMessage> mrf_foreign_message =
+ refl->GetMutableRepeatedFieldRef<ForeignMessage>(
+ &message, fd_repeated_foreign_message);
+ const MutableRepeatedFieldRef<Message> mrf_message =
+ refl->GetMutableRepeatedFieldRef<Message>(&message,
+ fd_repeated_foreign_message);
+
+ EXPECT_EQ(message.repeated_int32_size(), rf_int32.size());
+ EXPECT_EQ(message.repeated_int32_size(), mrf_int32.size());
+ EXPECT_EQ(message.repeated_double_size(), rf_double.size());
+ EXPECT_EQ(message.repeated_double_size(), mrf_double.size());
+ EXPECT_EQ(message.repeated_string_size(), rf_string.size());
+ EXPECT_EQ(message.repeated_string_size(), mrf_string.size());
+ EXPECT_EQ(message.repeated_foreign_message_size(), rf_foreign_message.size());
+ EXPECT_EQ(message.repeated_foreign_message_size(),
+ mrf_foreign_message.size());
+ EXPECT_EQ(message.repeated_foreign_message_size(), rf_message.size());
+ EXPECT_EQ(message.repeated_foreign_message_size(), mrf_message.size());
+
+ EXPECT_FALSE(rf_int32.empty());
+ EXPECT_FALSE(mrf_int32.empty());
+ EXPECT_FALSE(rf_double.empty());
+ EXPECT_FALSE(mrf_double.empty());
+ EXPECT_FALSE(rf_string.empty());
+ EXPECT_FALSE(mrf_string.empty());
+ EXPECT_FALSE(rf_foreign_message.empty());
+ EXPECT_FALSE(mrf_foreign_message.empty());
+ EXPECT_FALSE(rf_message.empty());
+ EXPECT_FALSE(mrf_message.empty());
+
+ // Make sure we can do gets and sets through the RepeatedFieldRef objects.
+ for (int i = 0; i < 10; ++i) {
+ // Check gets through const objects.
+ EXPECT_EQ(rf_int32.Get(i), Func(i, 1));
+ EXPECT_EQ(rf_double.Get(i), Func(i, 2));
+ EXPECT_EQ(rf_string.Get(i), StrFunc(i, 5));
+ ForeignMessage scratch_space;
+ EXPECT_EQ(rf_foreign_message.Get(i, &scratch_space).c(), Func(i, 6));
+ EXPECT_EQ(
+ DownCast<const ForeignMessage&>(rf_message.Get(i, &scratch_space)).c(),
+ Func(i, 6));
+
+ // Check gets through mutable objects.
+ EXPECT_EQ(mrf_int32.Get(i), Func(i, 1));
+ EXPECT_EQ(mrf_double.Get(i), Func(i, 2));
+ EXPECT_EQ(mrf_string.Get(i), StrFunc(i, 5));
+ EXPECT_EQ(mrf_foreign_message.Get(i, &scratch_space).c(), Func(i, 6));
+ EXPECT_EQ(
+ DownCast<const ForeignMessage&>(mrf_message.Get(i, &scratch_space)).c(),
+ Func(i, 6));
+
+ // Check sets through mutable objects.
+ mrf_int32.Set(i, Func(i, -1));
+ mrf_double.Set(i, Func(i, -2));
+ mrf_string.Set(i, StrFunc(i, -5));
+ ForeignMessage foreign_message;
+ foreign_message.set_c(Func(i, -6));
+ mrf_foreign_message.Set(i, foreign_message);
+ EXPECT_EQ(message.repeated_int32(i), Func(i, -1));
+ EXPECT_EQ(message.repeated_double(i), Func(i, -2));
+ EXPECT_EQ(message.repeated_string(i), StrFunc(i, -5));
+ EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, -6));
+ foreign_message.set_c(Func(i, 7));
+ mrf_message.Set(i, foreign_message);
+ EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, 7));
+ }
+
+ // Test iterators.
+ TestRepeatedFieldRefIteratorForPrimitive(rf_int32, message,
+ &TestAllTypes::repeated_int32);
+ TestRepeatedFieldRefIteratorForPrimitive(rf_double, message,
+ &TestAllTypes::repeated_double);
+ TestRepeatedFieldRefIteratorForString(rf_string, message,
+ &TestAllTypes::repeated_string);
+
+ // Test iterators for message fields.
+ typedef RepeatedFieldRef<ForeignMessage>::iterator MessageIterator;
+ int index = 0;
+ for (MessageIterator it = rf_foreign_message.begin();
+ it != rf_foreign_message.end(); ++it) {
+ EXPECT_EQ(message.repeated_foreign_message(index).c(), it->c());
+ ++index;
+ }
+ EXPECT_EQ(10, index);
+
+ // Test iterator operators that are not usually used in regular for-loops.
+ // Including: post increment, assign, ==.
+ MessageIterator old_it = rf_foreign_message.begin();
+ MessageIterator new_it = old_it++;
+ EXPECT_FALSE(old_it == new_it);
+ // Check that old_it++ increments old_it once.
+ for (index = 1; old_it != rf_foreign_message.end(); ++old_it, ++index) {
+ EXPECT_EQ(message.repeated_foreign_message(index).c(), old_it->c());
+ }
+ EXPECT_EQ(10, index);
+ // Test assign operator.
+ old_it = new_it;
+ for (index = 0; old_it != rf_foreign_message.end(); ++old_it, ++index) {
+ EXPECT_EQ(message.repeated_foreign_message(index).c(), old_it->c());
+ }
+ EXPECT_EQ(10, index);
+ // Check that the returned value of old_it++ is the one before increment.
+ for (index = 0; new_it != rf_foreign_message.end(); ++new_it, ++index) {
+ EXPECT_EQ(message.repeated_foreign_message(index).c(), new_it->c());
+ }
+ EXPECT_EQ(10, index);
+
+ // Test MutableRepeatedFieldRef::Reserve()
+ mrf_int32.Reserve(mrf_int32.size() + 1);
+ mrf_double.Reserve(mrf_double.size() + 1);
+ mrf_string.Reserve(mrf_string.size() + 1);
+ mrf_foreign_message.Reserve(mrf_foreign_message.size() + 1);
+
+ // Test MutableRepeatedFieldRef::Add()
+ mrf_int32.Add(1234);
+ mrf_double.Add(1234.0);
+ mrf_string.Add("1234");
+ ForeignMessage foreign_message;
+ foreign_message.set_c(1234);
+ mrf_foreign_message.Add(foreign_message);
+ EXPECT_EQ(1234, message.repeated_int32(10));
+ EXPECT_EQ(1234.0, message.repeated_double(10));
+ EXPECT_EQ("1234", message.repeated_string(10));
+ EXPECT_EQ(1234, message.repeated_foreign_message(10).c());
+
+ // Test MutableRepeatedFieldRef::RemoveLast()
+ mrf_int32.RemoveLast();
+ mrf_double.RemoveLast();
+ mrf_string.RemoveLast();
+ mrf_foreign_message.RemoveLast();
+ EXPECT_EQ(10, message.repeated_int32_size());
+ EXPECT_EQ(10, message.repeated_double_size());
+ EXPECT_EQ(10, message.repeated_string_size());
+ EXPECT_EQ(10, message.repeated_foreign_message_size());
+
+ // Test MutableRepeatedFieldRef::SwapElements()
+ mrf_int32.SwapElements(0, 9);
+ mrf_double.SwapElements(0, 9);
+ mrf_string.SwapElements(0, 9);
+ mrf_foreign_message.SwapElements(0, 9);
+ EXPECT_EQ(Func(9, -1), message.repeated_int32(0));
+ EXPECT_EQ(Func(0, -1), message.repeated_int32(9));
+ EXPECT_EQ(Func(9, -2), message.repeated_double(0));
+ EXPECT_EQ(Func(0, -2), message.repeated_double(9));
+ EXPECT_EQ(StrFunc(9, -5), message.repeated_string(0));
+ EXPECT_EQ(StrFunc(0, -5), message.repeated_string(9));
+ EXPECT_EQ(Func(9, 7), message.repeated_foreign_message(0).c());
+ EXPECT_EQ(Func(0, 7), message.repeated_foreign_message(9).c());
+
+ // Test MutableRepeatedFieldRef::Clear()
+ mrf_int32.Clear();
+ mrf_double.Clear();
+ mrf_string.Clear();
+ mrf_foreign_message.Clear();
+ EXPECT_EQ(0, message.repeated_int32_size());
+ EXPECT_EQ(0, message.repeated_double_size());
+ EXPECT_EQ(0, message.repeated_string_size());
+ EXPECT_EQ(0, message.repeated_foreign_message_size());
+
+ // Test (Mutable)RepeatedFieldRef::empty()
+ EXPECT_TRUE(rf_int32.empty());
+ EXPECT_TRUE(mrf_int32.empty());
+ EXPECT_TRUE(rf_double.empty());
+ EXPECT_TRUE(mrf_double.empty());
+ EXPECT_TRUE(rf_string.empty());
+ EXPECT_TRUE(mrf_string.empty());
+ EXPECT_TRUE(rf_foreign_message.empty());
+ EXPECT_TRUE(mrf_foreign_message.empty());
+ EXPECT_TRUE(rf_message.empty());
+ EXPECT_TRUE(mrf_message.empty());
+
+#if GTEST_HAS_DEATH_TEST
+
+ // Make sure types are checked correctly at runtime.
+ const FieldDescriptor* fd_optional_int32 =
+ desc->FindFieldByName("optional_int32");
+ EXPECT_DEATH(refl->GetRepeatedFieldRef<int32_t>(message, fd_optional_int32),
+ "");
+ EXPECT_DEATH(refl->GetRepeatedFieldRef<double>(message, fd_repeated_int32),
+ "");
+ EXPECT_DEATH(refl->GetRepeatedFieldRef<TestAllTypes>(
+ message, fd_repeated_foreign_message),
+ "");
+
+#endif // GTEST_HAS_DEATH_TEST
+}
+
+TEST(REFLECTION_TEST, RepeatedFieldRefForEnums) {
+ TestAllTypes message;
+ const Reflection* refl = message.GetReflection();
+ const Descriptor* desc = message.GetDescriptor();
+
+ for (int i = 0; i < 10; ++i) {
+ message.add_repeated_nested_enum(TestAllTypes::BAR);
+ }
+
+ const FieldDescriptor* fd_repeated_nested_enum =
+ desc->FindFieldByName("repeated_nested_enum");
+ const RepeatedFieldRef<TestAllTypes::NestedEnum> enum_ref =
+ refl->GetRepeatedFieldRef<TestAllTypes::NestedEnum>(
+ message, fd_repeated_nested_enum);
+ const MutableRepeatedFieldRef<TestAllTypes::NestedEnum> mutable_enum_ref =
+ refl->GetMutableRepeatedFieldRef<TestAllTypes::NestedEnum>(
+ &message, fd_repeated_nested_enum);
+ const RepeatedFieldRef<int32_t> int32_ref =
+ refl->GetRepeatedFieldRef<int32_t>(message, fd_repeated_nested_enum);
+ const MutableRepeatedFieldRef<int32_t> mutable_int32_ref =
+ refl->GetMutableRepeatedFieldRef<int32_t>(&message,
+ fd_repeated_nested_enum);
+
+ EXPECT_EQ(message.repeated_nested_enum_size(), enum_ref.size());
+ EXPECT_EQ(message.repeated_nested_enum_size(), mutable_enum_ref.size());
+ EXPECT_EQ(message.repeated_nested_enum_size(), int32_ref.size());
+ EXPECT_EQ(message.repeated_nested_enum_size(), mutable_int32_ref.size());
+
+ EXPECT_FALSE(enum_ref.empty());
+ EXPECT_FALSE(mutable_enum_ref.empty());
+ EXPECT_FALSE(int32_ref.empty());
+ EXPECT_FALSE(mutable_int32_ref.empty());
+
+ for (int i = 0; i < 10; ++i) {
+ EXPECT_EQ(TestAllTypes::BAR, enum_ref.Get(i));
+ EXPECT_EQ(TestAllTypes::BAR, mutable_enum_ref.Get(i));
+ mutable_enum_ref.Set(i, TestAllTypes::BAZ);
+ EXPECT_EQ(TestAllTypes::BAZ, enum_ref.Get(i));
+ EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(i));
+
+ message.set_repeated_nested_enum(i, TestAllTypes::BAR);
+ EXPECT_EQ(TestAllTypes::BAR, int32_ref.Get(i));
+ EXPECT_EQ(TestAllTypes::BAR, mutable_int32_ref.Get(i));
+ mutable_int32_ref.Set(i, TestAllTypes::BAZ);
+ EXPECT_EQ(TestAllTypes::BAZ, int32_ref.Get(i));
+ EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(i));
+ }
+
+ TestRepeatedFieldRefIteratorForPrimitive(enum_ref, message,
+ &TestAllTypes::repeated_nested_enum);
+ TestRepeatedFieldRefIteratorForPrimitive(int32_ref, message,
+ &TestAllTypes::repeated_nested_enum);
+
+ // Test Add()
+ mutable_enum_ref.Add(TestAllTypes::FOO);
+ EXPECT_EQ(TestAllTypes::FOO, message.repeated_nested_enum(10));
+ mutable_int32_ref.Add(TestAllTypes::BAR);
+ EXPECT_EQ(TestAllTypes::BAR, message.repeated_nested_enum(11));
+
+ // Test RemoveLast()
+ mutable_enum_ref.RemoveLast();
+ EXPECT_EQ(11, message.repeated_nested_enum_size());
+ mutable_int32_ref.RemoveLast();
+ EXPECT_EQ(10, message.repeated_nested_enum_size());
+
+ // Test SwapElements()
+ mutable_enum_ref.Set(0, TestAllTypes::BAR);
+ mutable_enum_ref.Set(9, TestAllTypes::BAZ);
+ mutable_enum_ref.SwapElements(0, 9);
+ EXPECT_EQ(TestAllTypes::BAZ, enum_ref.Get(0));
+ EXPECT_EQ(TestAllTypes::BAR, enum_ref.Get(9));
+ mutable_int32_ref.SwapElements(0, 9);
+ EXPECT_EQ(TestAllTypes::BAR, enum_ref.Get(0));
+ EXPECT_EQ(TestAllTypes::BAZ, enum_ref.Get(9));
+
+ // Test Clear()
+ mutable_enum_ref.Clear();
+ EXPECT_EQ(0, message.repeated_nested_enum_size());
+ mutable_enum_ref.Add(TestAllTypes::FOO);
+ EXPECT_EQ(1, message.repeated_nested_enum_size());
+ mutable_int32_ref.Clear();
+ EXPECT_EQ(0, message.repeated_nested_enum_size());
+
+ // Test empty()
+ EXPECT_TRUE(enum_ref.empty());
+ EXPECT_TRUE(mutable_enum_ref.empty());
+ EXPECT_TRUE(int32_ref.empty());
+ EXPECT_TRUE(mutable_int32_ref.empty());
+}
+
+TEST(REFLECTION_TEST, RepeatedFieldRefForExtensionFields) {
+ TestAllExtensions extended_message;
+ const Reflection* refl = extended_message.GetReflection();
+ const Descriptor* desc = extended_message.GetDescriptor();
+
+ for (int i = 0; i < 10; ++i) {
+ extended_message.AddExtension(UNITTEST::repeated_int64_extension,
+ Func(i, 1));
+ }
+
+ const FieldDescriptor* fd_repeated_int64_extension =
+ desc->file()->FindExtensionByName("repeated_int64_extension");
+ ABSL_CHECK(fd_repeated_int64_extension != nullptr);
+
+ const RepeatedFieldRef<int64_t> rf_int64_extension =
+ refl->GetRepeatedFieldRef<int64_t>(extended_message,
+ fd_repeated_int64_extension);
+
+ const MutableRepeatedFieldRef<int64_t> mrf_int64_extension =
+ refl->GetMutableRepeatedFieldRef<int64_t>(&extended_message,
+ fd_repeated_int64_extension);
+
+ for (int i = 0; i < 10; ++i) {
+ EXPECT_EQ(Func(i, 1), rf_int64_extension.Get(i));
+ mrf_int64_extension.Set(i, Func(i, -1));
+ EXPECT_EQ(Func(i, -1), extended_message.GetExtension(
+ UNITTEST::repeated_int64_extension, i));
+ }
+}
+
+
+TEST(REFLECTION_TEST, RepeatedFieldRefMergeFromAndSwap) {
+ // Set-up message content.
+ TestAllTypes m0, m1, m2;
+ for (int i = 0; i < 10; ++i) {
+ m0.add_repeated_int32(Func(i, 1));
+ m0.add_repeated_double(Func(i, 2));
+ m0.add_repeated_string(StrFunc(i, 5));
+ m0.add_repeated_foreign_message()->set_c(Func(i, 6));
+ m0.add_repeated_nested_enum(TestAllTypes::FOO);
+ m1.add_repeated_int32(Func(i, 11));
+ m1.add_repeated_double(Func(i, 12));
+ m1.add_repeated_string(StrFunc(i, 15));
+ m1.add_repeated_foreign_message()->set_c(Func(i, 16));
+ m1.add_repeated_nested_enum(TestAllTypes::BAR);
+ m2.add_repeated_int32(Func(i, 21));
+ m2.add_repeated_double(Func(i, 22));
+ m2.add_repeated_string(StrFunc(i, 25));
+ m2.add_repeated_foreign_message()->set_c(Func(i, 26));
+ m2.add_repeated_nested_enum(TestAllTypes::BAZ);
+ }
+
+ const Reflection* refl = m0.GetReflection();
+ const Descriptor* desc = m0.GetDescriptor();
+
+ // Get FieldDescriptors for all the fields of interest.
+ const FieldDescriptor* fd_repeated_int32 =
+ desc->FindFieldByName("repeated_int32");
+ const FieldDescriptor* fd_repeated_double =
+ desc->FindFieldByName("repeated_double");
+ const FieldDescriptor* fd_repeated_string =
+ desc->FindFieldByName("repeated_string");
+ const FieldDescriptor* fd_repeated_foreign_message =
+ desc->FindFieldByName("repeated_foreign_message");
+ const FieldDescriptor* fd_repeated_nested_enum =
+ desc->FindFieldByName("repeated_nested_enum");
+
+ // Get MutableRepeatedFieldRef objects for all fields of interest.
+ const MutableRepeatedFieldRef<int32_t> mrf_int32 =
+ refl->GetMutableRepeatedFieldRef<int32_t>(&m0, fd_repeated_int32);
+ const MutableRepeatedFieldRef<double> mrf_double =
+ refl->GetMutableRepeatedFieldRef<double>(&m0, fd_repeated_double);
+ const MutableRepeatedFieldRef<std::string> mrf_string =
+ refl->GetMutableRepeatedFieldRef<std::string>(&m0, fd_repeated_string);
+ const MutableRepeatedFieldRef<ForeignMessage> mrf_foreign_message =
+ refl->GetMutableRepeatedFieldRef<ForeignMessage>(
+ &m0, fd_repeated_foreign_message);
+ const MutableRepeatedFieldRef<TestAllTypes::NestedEnum> mrf_nested_enum =
+ refl->GetMutableRepeatedFieldRef<TestAllTypes::NestedEnum>(
+ &m0, fd_repeated_nested_enum);
+
+ // Test MutableRepeatedRef::CopyFrom
+ mrf_int32.CopyFrom(refl->GetRepeatedFieldRef<int32_t>(m1, fd_repeated_int32));
+ mrf_double.CopyFrom(
+ refl->GetRepeatedFieldRef<double>(m1, fd_repeated_double));
+ mrf_string.CopyFrom(
+ refl->GetRepeatedFieldRef<std::string>(m1, fd_repeated_string));
+ mrf_foreign_message.CopyFrom(refl->GetRepeatedFieldRef<ForeignMessage>(
+ m1, fd_repeated_foreign_message));
+ mrf_nested_enum.CopyFrom(refl->GetRepeatedFieldRef<TestAllTypes::NestedEnum>(
+ m1, fd_repeated_nested_enum));
+ for (int i = 0; i < 10; ++i) {
+ EXPECT_EQ(Func(i, 11), m0.repeated_int32(i));
+ EXPECT_EQ(Func(i, 12), m0.repeated_double(i));
+ EXPECT_EQ(StrFunc(i, 15), m0.repeated_string(i));
+ EXPECT_EQ(Func(i, 16), m0.repeated_foreign_message(i).c());
+ EXPECT_EQ(TestAllTypes::BAR, m0.repeated_nested_enum(i));
+ }
+
+ // Test MutableRepeatedRef::MergeFrom
+ mrf_int32.MergeFrom(
+ refl->GetRepeatedFieldRef<int32_t>(m2, fd_repeated_int32));
+ mrf_double.MergeFrom(
+ refl->GetRepeatedFieldRef<double>(m2, fd_repeated_double));
+ mrf_string.MergeFrom(
+ refl->GetRepeatedFieldRef<std::string>(m2, fd_repeated_string));
+ mrf_foreign_message.MergeFrom(refl->GetRepeatedFieldRef<ForeignMessage>(
+ m2, fd_repeated_foreign_message));
+ mrf_nested_enum.MergeFrom(refl->GetRepeatedFieldRef<TestAllTypes::NestedEnum>(
+ m2, fd_repeated_nested_enum));
+ for (int i = 0; i < 10; ++i) {
+ EXPECT_EQ(Func(i, 21), m0.repeated_int32(i + 10));
+ EXPECT_EQ(Func(i, 22), m0.repeated_double(i + 10));
+ EXPECT_EQ(StrFunc(i, 25), m0.repeated_string(i + 10));
+ EXPECT_EQ(Func(i, 26), m0.repeated_foreign_message(i + 10).c());
+ EXPECT_EQ(TestAllTypes::BAZ, m0.repeated_nested_enum(i + 10));
+ }
+
+ // Test MutableRepeatedRef::Swap
+ // Swap between m0 and m2.
+ mrf_int32.Swap(
+ refl->GetMutableRepeatedFieldRef<int32_t>(&m2, fd_repeated_int32));
+ mrf_double.Swap(
+ refl->GetMutableRepeatedFieldRef<double>(&m2, fd_repeated_double));
+ mrf_string.Swap(
+ refl->GetMutableRepeatedFieldRef<std::string>(&m2, fd_repeated_string));
+ mrf_foreign_message.Swap(refl->GetMutableRepeatedFieldRef<ForeignMessage>(
+ &m2, fd_repeated_foreign_message));
+ mrf_nested_enum.Swap(
+ refl->GetMutableRepeatedFieldRef<TestAllTypes::NestedEnum>(
+ &m2, fd_repeated_nested_enum));
+ for (int i = 0; i < 10; ++i) {
+ // Check the content of m0.
+ EXPECT_EQ(Func(i, 21), m0.repeated_int32(i));
+ EXPECT_EQ(Func(i, 22), m0.repeated_double(i));
+ EXPECT_EQ(StrFunc(i, 25), m0.repeated_string(i));
+ EXPECT_EQ(Func(i, 26), m0.repeated_foreign_message(i).c());
+ EXPECT_EQ(TestAllTypes::BAZ, m0.repeated_nested_enum(i));
+
+ // Check the content of m2.
+ EXPECT_EQ(Func(i, 11), m2.repeated_int32(i));
+ EXPECT_EQ(Func(i, 12), m2.repeated_double(i));
+ EXPECT_EQ(StrFunc(i, 15), m2.repeated_string(i));
+ EXPECT_EQ(Func(i, 16), m2.repeated_foreign_message(i).c());
+ EXPECT_EQ(TestAllTypes::BAR, m2.repeated_nested_enum(i));
+ EXPECT_EQ(Func(i, 21), m2.repeated_int32(i + 10));
+ EXPECT_EQ(Func(i, 22), m2.repeated_double(i + 10));
+ EXPECT_EQ(StrFunc(i, 25), m2.repeated_string(i + 10));
+ EXPECT_EQ(Func(i, 26), m2.repeated_foreign_message(i + 10).c());
+ EXPECT_EQ(TestAllTypes::BAZ, m2.repeated_nested_enum(i + 10));
+ }
+}
+
+// Test that GetRepeatedFieldRef/MutableRepeatedFieldRef works with
+// DynamicMessage.
+TEST(REFLECTION_TEST, RepeatedFieldRefDynamicMessage) {
+ // DynamicMessage shares the same memory layout as generated message
+ // and use the same GeneratedMessageReflection code for reflection.
+ // All code paths should already be covered by the other tests for
+ // generated messages. Here we just test one field.
+
+ const Descriptor* desc = TestAllTypes::descriptor();
+ const FieldDescriptor* fd_repeated_int32 =
+ desc->FindFieldByName("repeated_int32");
+
+ DynamicMessageFactory factory;
+ std::unique_ptr<Message> dynamic_message(factory.GetPrototype(desc)->New());
+ const Reflection* refl = dynamic_message->GetReflection();
+
+ MutableRepeatedFieldRef<int32_t> rf_int32 =
+ refl->GetMutableRepeatedFieldRef<int32_t>(dynamic_message.get(),
+ fd_repeated_int32);
+ rf_int32.Add(1234);
+ EXPECT_EQ(1, refl->FieldSize(*dynamic_message, fd_repeated_int32));
+ EXPECT_EQ(1234,
+ refl->GetRepeatedInt32(*dynamic_message, fd_repeated_int32, 0));
+}
+
+} // namespace
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/repeated_field_unittest.cc b/src/google/protobuf/repeated_field_unittest.cc
index 814f0c8..7dac43d 100644
--- a/src/google/protobuf/repeated_field_unittest.cc
+++ b/src/google/protobuf/repeated_field_unittest.cc
@@ -33,6 +33,7 @@
#include <gtest/gtest.h>
#include "absl/log/absl_check.h"
#include "absl/numeric/bits.h"
+#include "absl/random/random.h"
#include "absl/strings/cord.h"
#include "absl/strings/str_cat.h"
#include "absl/types/span.h"
@@ -59,6 +60,74 @@
using ::testing::Ge;
using ::testing::Le;
+TEST(RepeatedFieldIterator, Traits) {
+ using It = RepeatedField<absl::Cord>::iterator;
+ EXPECT_TRUE((std::is_same<It::value_type, absl::Cord>::value));
+ EXPECT_TRUE((std::is_same<It::reference, absl::Cord&>::value));
+ EXPECT_TRUE((std::is_same<It::pointer, absl::Cord*>::value));
+ EXPECT_TRUE((std::is_same<It::difference_type, std::ptrdiff_t>::value));
+ EXPECT_TRUE((std::is_same<It::iterator_category,
+ std::random_access_iterator_tag>::value));
+#if __cplusplus >= 202002L
+ EXPECT_TRUE((
+ std::is_same<It::iterator_concept, std::contiguous_iterator_tag>::value));
+#else
+ EXPECT_TRUE((std::is_same<It::iterator_concept,
+ std::random_access_iterator_tag>::value));
+#endif
+}
+
+TEST(ConstRepeatedFieldIterator, Traits) {
+ using It = RepeatedField<absl::Cord>::const_iterator;
+ EXPECT_TRUE((std::is_same<It::value_type, absl::Cord>::value));
+ EXPECT_TRUE((std::is_same<It::reference, const absl::Cord&>::value));
+ EXPECT_TRUE((std::is_same<It::pointer, const absl::Cord*>::value));
+ EXPECT_TRUE((std::is_same<It::difference_type, std::ptrdiff_t>::value));
+ EXPECT_TRUE((std::is_same<It::iterator_category,
+ std::random_access_iterator_tag>::value));
+#if __cplusplus >= 202002L
+ EXPECT_TRUE((
+ std::is_same<It::iterator_concept, std::contiguous_iterator_tag>::value));
+#else
+ EXPECT_TRUE((std::is_same<It::iterator_concept,
+ std::random_access_iterator_tag>::value));
+#endif
+}
+
+TEST(RepeatedPtrOverPtrsIterator, Traits) {
+ using It = RepeatedPtrField<std::string>::pointer_iterator;
+ EXPECT_TRUE((std::is_same<It::value_type, std::string*>::value));
+ EXPECT_TRUE((std::is_same<It::reference, std::string*&>::value));
+ EXPECT_TRUE((std::is_same<It::pointer, std::string**>::value));
+ EXPECT_TRUE((std::is_same<It::difference_type, std::ptrdiff_t>::value));
+ EXPECT_TRUE((std::is_same<It::iterator_category,
+ std::random_access_iterator_tag>::value));
+#if __cplusplus >= 202002L
+ EXPECT_TRUE((
+ std::is_same<It::iterator_concept, std::contiguous_iterator_tag>::value));
+#else
+ EXPECT_TRUE((std::is_same<It::iterator_concept,
+ std::random_access_iterator_tag>::value));
+#endif
+}
+
+TEST(ConstRepeatedPtrOverPtrsIterator, Traits) {
+ using It = RepeatedPtrField<std::string>::const_pointer_iterator;
+ EXPECT_TRUE((std::is_same<It::value_type, const std::string*>::value));
+ EXPECT_TRUE((std::is_same<It::reference, const std::string* const&>::value));
+ EXPECT_TRUE((std::is_same<It::pointer, const std::string* const*>::value));
+ EXPECT_TRUE((std::is_same<It::difference_type, std::ptrdiff_t>::value));
+ EXPECT_TRUE((std::is_same<It::iterator_category,
+ std::random_access_iterator_tag>::value));
+#if __cplusplus >= 202002L
+ EXPECT_TRUE((
+ std::is_same<It::iterator_concept, std::contiguous_iterator_tag>::value));
+#else
+ EXPECT_TRUE((std::is_same<It::iterator_concept,
+ std::random_access_iterator_tag>::value));
+#endif
+}
+
TEST(RepeatedField, ConstInit) {
PROTOBUF_CONSTINIT static RepeatedField<int> field{}; // NOLINT
EXPECT_TRUE(field.empty());
@@ -450,7 +519,7 @@
}
TEST(RepeatedField, ReserveHuge) {
-#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || defined(ABSL_HAVE_MEMORY_SANITIZER)
+#if defined(PROTOBUF_ASAN) || defined(PROTOBUF_MSAN)
GTEST_SKIP() << "Disabled because sanitizer is active";
#endif
// Largest value that does not clamp to the large limit:
@@ -966,7 +1035,7 @@
EXPECT_FALSE(internal::IsMovable<NonMovable>::value);
}
-TEST(RepeatedField, MoveAdd) {
+TEST(RepeatedPtrField, MoveAdd) {
RepeatedPtrField<TestAllTypes> field;
TestAllTypes test_all_types;
auto* optional_nested_message =
@@ -1172,17 +1241,17 @@
}
}
-#if defined(GTEST_HAS_DEATH_TEST) && (defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
- defined(ABSL_HAVE_MEMORY_SANITIZER))
+#if defined(GTEST_HAS_DEATH_TEST) && \
+ (defined(PROTOBUF_ASAN) || defined(PROTOBUF_MSAN))
// This function verifies that the code dies under ASAN or MSAN trying to both
// read and write the reserved element directly beyond the last element.
void VerifyDeathOnWriteAndReadAccessBeyondEnd(RepeatedField<int64_t>& field) {
auto* end = field.Mutable(field.size() - 1) + 1;
-#if defined(ABSL_HAVE_ADDRESS_SANITIZER)
+#if defined(PROTOBUF_ASAN)
EXPECT_DEATH(*end = 1, "container-overflow");
EXPECT_DEATH(EXPECT_NE(*end, 1), "container-overflow");
-#elif defined(ABSL_HAVE_MEMORY_SANITIZER)
+#elif defined(PROTOBUF_MSAN)
EXPECT_DEATH(EXPECT_NE(*end, 1), "use-of-uninitialized-value");
#endif
@@ -1606,19 +1675,6 @@
field.Clear();
EXPECT_EQ(field.ClearedCount(), 2);
-#ifndef PROTOBUF_FUTURE_REMOVE_CLEARED_API
- EXPECT_EQ(field.ReleaseCleared(), original); // Take ownership again.
- EXPECT_EQ(field.ClearedCount(), 1);
- EXPECT_NE(field.Add(), original);
- EXPECT_EQ(field.ClearedCount(), 0);
- EXPECT_NE(field.Add(), original);
- EXPECT_EQ(field.ClearedCount(), 0);
-
- field.AddCleared(original); // Give ownership back, but as a cleared object.
- EXPECT_EQ(field.ClearedCount(), 1);
- EXPECT_EQ(field.Add(), original);
- EXPECT_EQ(field.ClearedCount(), 0);
-#endif // !PROTOBUF_FUTURE_REMOVE_CLEARED_API
PROTOBUF_IGNORE_DEPRECATION_STOP
}
@@ -1855,9 +1911,12 @@
// Verify the string is where we think it is.
EXPECT_EQ(&*array->begin(), &str);
EXPECT_EQ(array->pointer_begin()[0], &str);
+ auto is_inlined = [array]() {
+ return std::less_equal<void*>{}(array, &*array->pointer_begin()) &&
+ std::less<void*>{}(&*array->pointer_begin(), array + 1);
+ };
// The T** in pointer_begin points into the sso in the object.
- EXPECT_TRUE(std::less_equal<void*>{}(array, &*array->pointer_begin()));
- EXPECT_TRUE(std::less_equal<void*>{}(&*array->pointer_begin(), array + 1));
+ EXPECT_TRUE(is_inlined());
// Adding a second object stops sso.
std::string str2;
@@ -1869,8 +1928,7 @@
// We used some arena space now.
EXPECT_LT(usage_before, arena.SpaceUsed());
// And the pointer_begin is not in the sso anymore.
- EXPECT_FALSE(std::less_equal<void*>{}(array, &*array->pointer_begin()) &&
- std::less_equal<void*>{}(&*array->pointer_begin(), array + 1));
+ EXPECT_FALSE(is_inlined());
}
TEST(RepeatedPtrField, CopyAssign) {
diff --git a/src/google/protobuf/repeated_ptr_field.cc b/src/google/protobuf/repeated_ptr_field.cc
index 2a98da2..c716be5 100644
--- a/src/google/protobuf/repeated_ptr_field.cc
+++ b/src/google/protobuf/repeated_ptr_field.cc
@@ -9,6 +9,8 @@
// Based on original Protocol Buffers design by
// Sanjay Ghemawat, Jeff Dean, and others.
+#include "google/protobuf/repeated_ptr_field.h"
+
#include <algorithm>
#include <cstddef>
#include <cstdint>
@@ -19,7 +21,6 @@
#include "absl/base/prefetch.h"
#include "absl/log/absl_check.h"
#include "google/protobuf/arena.h"
-#include "google/protobuf/implicit_weak_message.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/port.h"
#include "google/protobuf/repeated_field.h"
@@ -60,11 +61,8 @@
new_rep->elements[0] = tagged_rep_or_elem_;
} else {
Rep* old_rep = rep();
- if (old_rep->allocated_size > 0) {
- memcpy(new_rep->elements, old_rep->elements,
- old_rep->allocated_size * ptr_size);
- }
- new_rep->allocated_size = old_rep->allocated_size;
+ memcpy(new_rep, old_rep,
+ old_rep->allocated_size * ptr_size + kRepHeaderSize);
size_t old_size = capacity * ptr_size + kRepHeaderSize;
if (arena == nullptr) {
@@ -88,20 +86,7 @@
}
void RepeatedPtrFieldBase::DestroyProtos() {
- ABSL_DCHECK(tagged_rep_or_elem_);
- ABSL_DCHECK(arena_ == nullptr);
- if (using_sso()) {
- delete static_cast<MessageLite*>(tagged_rep_or_elem_);
- } else {
- Rep* r = rep();
- int n = r->allocated_size;
- void* const* elements = r->elements;
- for (int i = 0; i < n; i++) {
- delete static_cast<MessageLite*>(elements[i]);
- }
- const size_t size = Capacity() * sizeof(elements[0]) + kRepHeaderSize;
- internal::SizedDelete(r, size);
- }
+ PROTOBUF_ALWAYS_INLINE_CALL Destroy<GenericTypeHandler<MessageLite>>();
// TODO: Eliminate this store when invoked from the destructor,
// since it is dead.
@@ -109,40 +94,49 @@
}
template <typename F>
-auto* RepeatedPtrFieldBase::AddInternal(F factory) {
- using Result = decltype(factory(GetArena()));
+void* RepeatedPtrFieldBase::AddInternal(F factory) {
+ Arena* const arena = GetArena();
+ absl::PrefetchToLocalCache(tagged_rep_or_elem_);
if (tagged_rep_or_elem_ == nullptr) {
ExchangeCurrentSize(1);
- tagged_rep_or_elem_ = factory(GetArena());
- return static_cast<Result>(tagged_rep_or_elem_);
+ tagged_rep_or_elem_ = factory(arena);
+ return tagged_rep_or_elem_;
}
if (using_sso()) {
- if (ExchangeCurrentSize(1) == 0) {
- return static_cast<Result>(tagged_rep_or_elem_);
+ if (current_size_ == 0) {
+ ExchangeCurrentSize(1);
+ return tagged_rep_or_elem_;
}
- } else {
- absl::PrefetchToLocalCache(rep());
- }
- if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
- InternalExtend(1);
- } else {
+ void*& result = *InternalExtend(1);
+ result = factory(arena);
Rep* r = rep();
- if (current_size_ != r->allocated_size) {
- return static_cast<Result>(
- r->elements[ExchangeCurrentSize(current_size_ + 1)]);
- }
+ r->allocated_size = 2;
+ ExchangeCurrentSize(2);
+ return result;
}
Rep* r = rep();
+ if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
+ InternalExtend(1);
+ r = rep();
+ } else {
+ if (current_size_ != r->allocated_size) {
+ return r->elements[ExchangeCurrentSize(current_size_ + 1)];
+ }
+ }
++r->allocated_size;
void*& result = r->elements[ExchangeCurrentSize(current_size_ + 1)];
- result = factory(GetArena());
- return static_cast<Result>(result);
+ result = factory(arena);
+ return result;
}
-void* RepeatedPtrFieldBase::AddOutOfLineHelper(ElementFactory factory) {
+void* RepeatedPtrFieldBase::AddMessageLite(ElementFactory factory) {
return AddInternal(factory);
}
+void* RepeatedPtrFieldBase::AddString() {
+ return AddInternal([](Arena* arena) { return NewStringElement(arena); });
+}
+
void RepeatedPtrFieldBase::CloseGap(int start, int num) {
if (using_sso()) {
if (start == 0 && num == 1) {
@@ -159,7 +153,8 @@
}
MessageLite* RepeatedPtrFieldBase::AddMessage(const MessageLite* prototype) {
- return AddInternal([prototype](Arena* a) { return prototype->New(a); });
+ return static_cast<MessageLite*>(
+ AddInternal([prototype](Arena* a) { return prototype->New(a); }));
}
void InternalOutOfLineDeleteMessageLite(MessageLite* message) {
diff --git a/src/google/protobuf/repeated_ptr_field.h b/src/google/protobuf/repeated_ptr_field.h
index 11ddd15..2fb4615 100644
--- a/src/google/protobuf/repeated_ptr_field.h
+++ b/src/google/protobuf/repeated_ptr_field.h
@@ -33,6 +33,7 @@
#include "absl/base/attributes.h"
#include "absl/log/absl_check.h"
+#include "absl/meta/type_traits.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/internal_visibility.h"
#include "google/protobuf/message_lite.h"
@@ -80,48 +81,6 @@
std::swap_ranges(a, a + N, b);
}
-// type-traits helper for RepeatedPtrFieldBase: we only want to invoke
-// arena-related "copy if on different arena" behavior if the necessary methods
-// exist on the contained type. In particular, we rely on MergeFrom() existing
-// as a general proxy for the fact that a copy will work, and we also provide a
-// specific override for std::string*.
-template <typename T>
-struct TypeImplementsMergeBehaviorProbeForMergeFrom {
- typedef char HasMerge;
- typedef long HasNoMerge;
-
- // We accept either of:
- // - void MergeFrom(const T& other)
- // - bool MergeFrom(const T& other)
- //
- // We mangle these names a bit to avoid compatibility issues in 'unclean'
- // include environments that may have, e.g., "#define test ..." (yes, this
- // exists).
- template <typename U, typename RetType, RetType (U::*)(const U& arg)>
- struct CheckType;
- template <typename U>
- static HasMerge Check(CheckType<U, void, &U::MergeFrom>*);
- template <typename U>
- static HasMerge Check(CheckType<U, bool, &U::MergeFrom>*);
- template <typename U>
- static HasNoMerge Check(...);
-
- // Resolves to either std::true_type or std::false_type.
- typedef std::integral_constant<bool,
- (sizeof(Check<T>(0)) == sizeof(HasMerge))>
- type;
-};
-
-template <typename T, typename = void>
-struct TypeImplementsMergeBehavior
- : TypeImplementsMergeBehaviorProbeForMergeFrom<T> {};
-
-
-template <>
-struct TypeImplementsMergeBehavior<std::string> {
- typedef std::true_type type;
-};
-
template <typename T>
struct IsMovable
: std::integral_constant<bool, std::is_move_constructible<T>::value &&
@@ -224,7 +183,10 @@
template <typename Handler>
Value<Handler>* Add() {
- return cast<Handler>(AddOutOfLineHelper(Handler::GetNewFunc()));
+ if (std::is_same<Value<Handler>, std::string>{}) {
+ return cast<Handler>(AddString());
+ }
+ return cast<Handler>(AddMessageLite(Handler::GetNewFunc()));
}
template <
@@ -242,19 +204,18 @@
element_at(ExchangeCurrentSize(current_size_ + 1)) = result;
}
- template <typename TypeHandler>
- void Delete(int index) {
- ABSL_DCHECK_GE(index, 0);
- ABSL_DCHECK_LT(index, current_size_);
- using H = CommonHandler<TypeHandler>;
- Delete<H>(element_at(index), arena_);
- }
-
// Must be called from destructor.
+ //
+ // Pre-condition: NeedsDestroy() returns true.
template <typename TypeHandler>
void Destroy() {
+ ABSL_DCHECK(NeedsDestroy());
+
+ // TODO: arena check is redundant once all `RepeatedPtrField`s
+ // with non-null arena are owned by the arena.
+ if (PROTOBUF_PREDICT_FALSE(arena_ != nullptr)) return;
+
using H = CommonHandler<TypeHandler>;
- if (arena_ != nullptr) return;
int n = allocated_size();
void** elems = elements();
for (int i = 0; i < n; i++) {
@@ -266,10 +227,12 @@
}
}
- bool NeedsDestroy() const {
- return tagged_rep_or_elem_ != nullptr && arena_ == nullptr;
+ inline bool NeedsDestroy() const {
+ // Either there is an allocated element in SSO buffer or there is an
+ // allocated Rep.
+ return tagged_rep_or_elem_ != nullptr;
}
- void DestroyProtos(); // implemented in the cc file
+ void DestroyProtos();
public:
// The next few methods are public so that they can be called from generated
@@ -303,6 +266,12 @@
template <typename T>
void MergeFrom(const RepeatedPtrFieldBase& from) {
static_assert(std::is_base_of<MessageLite, T>::value, "");
+#ifdef __cpp_if_constexpr
+ if constexpr (!std::is_base_of<Message, T>::value) {
+ // For LITE objects we use the generic MergeFrom to save on binary size.
+ return MergeFrom<MessageLite>(from);
+ }
+#endif
MergeFromConcreteMessage(from, Arena::CopyConstruct<T>);
}
@@ -314,21 +283,26 @@
reinterpret_cast<char*>(this), reinterpret_cast<char*>(rhs));
}
- // Prepares the container for adding elements via `AddAllocatedForParse`.
- // It ensures we have no preallocated elements in the array.
- // Returns true if the invariants hold and `AddAllocatedForParse` can be
- // used.
+ // Returns true if there are no preallocated elements in the array.
bool PrepareForParse() { return allocated_size() == current_size_; }
// Similar to `AddAllocated` but faster.
- // Can only be invoked after a call to `PrepareForParse` that returned `true`,
- // or other calls to `AddAllocatedForParse`.
- template <typename TypeHandler>
- void AddAllocatedForParse(Value<TypeHandler>* value) {
- ABSL_DCHECK_EQ(current_size_, allocated_size());
- MaybeExtend();
- element_at(current_size_++) = value;
- if (!using_sso()) ++rep()->allocated_size;
+ //
+ // Pre-condition: PrepareForParse() is true.
+ void AddAllocatedForParse(void* value) {
+ ABSL_DCHECK(PrepareForParse());
+ if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
+ *InternalExtend(1) = value;
+ ++rep()->allocated_size;
+ } else {
+ if (using_sso()) {
+ tagged_rep_or_elem_ = value;
+ } else {
+ rep()->elements[current_size_] = value;
+ ++rep()->allocated_size;
+ }
+ }
+ ExchangeCurrentSize(current_size_ + 1);
}
protected:
@@ -427,9 +401,24 @@
template <typename TypeHandler>
void AddAllocated(Value<TypeHandler>* value) {
- typename TypeImplementsMergeBehavior<Value<TypeHandler>>::type t;
ABSL_DCHECK_NE(value, nullptr);
- AddAllocatedInternal<TypeHandler>(value, t);
+ Arena* element_arena = TypeHandler::GetArena(value);
+ Arena* arena = GetArena();
+ if (arena != element_arena || AllocatedSizeAtCapacity()) {
+ AddAllocatedSlowWithCopy<TypeHandler>(value, element_arena, arena);
+ return;
+ }
+ // Fast path: underlying arena representation (tagged pointer) is equal to
+ // our arena pointer, and we can add to array without resizing it (at
+ // least one slot that is not allocated).
+ void** elems = elements();
+ if (current_size_ < allocated_size()) {
+ // Make space at [current] by moving first allocated element to end of
+ // allocated list.
+ elems[allocated_size()] = elems[current_size_];
+ }
+ elems[ExchangeCurrentSize(current_size_ + 1)] = value;
+ if (!using_sso()) ++rep()->allocated_size;
}
template <typename TypeHandler>
@@ -462,8 +451,17 @@
template <typename TypeHandler>
PROTOBUF_NODISCARD Value<TypeHandler>* ReleaseLast() {
- typename TypeImplementsMergeBehavior<Value<TypeHandler>>::type t;
- return ReleaseLastInternal<TypeHandler>(t);
+ Value<TypeHandler>* result = UnsafeArenaReleaseLast<TypeHandler>();
+ // Now perform a copy if we're on an arena.
+ Arena* arena = GetArena();
+
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+ auto* new_result = copy<TypeHandler>(result);
+ if (arena == nullptr) delete result;
+#else // PROTOBUF_FORCE_COPY_IN_RELEASE
+ auto* new_result = (arena == nullptr) ? result : copy<TypeHandler>(result);
+#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
+ return new_result;
}
// Releases and returns the last element, but does not do out-of-arena copy.
@@ -489,128 +487,26 @@
int ClearedCount() const { return allocated_size() - current_size_; }
- template <typename TypeHandler>
- void AddCleared(Value<TypeHandler>* value) {
- ABSL_DCHECK(GetArena() == nullptr) << "AddCleared() can only be used on a "
- "RepeatedPtrField not on an arena.";
- ABSL_DCHECK(TypeHandler::GetArena(value) == nullptr)
- << "AddCleared() can only accept values not on an arena.";
- MaybeExtend();
- if (using_sso()) {
- tagged_rep_or_elem_ = value;
- } else {
- element_at(rep()->allocated_size++) = value;
- }
- }
-
- template <typename TypeHandler>
- PROTOBUF_NODISCARD Value<TypeHandler>* ReleaseCleared() {
- ABSL_DCHECK(GetArena() == nullptr)
- << "ReleaseCleared() can only be used on a RepeatedPtrField not on "
- << "an arena.";
- ABSL_DCHECK(tagged_rep_or_elem_ != nullptr);
- ABSL_DCHECK_GT(allocated_size(), current_size_);
- if (using_sso()) {
- auto* result = cast<TypeHandler>(tagged_rep_or_elem_);
- tagged_rep_or_elem_ = nullptr;
- return result;
- } else {
- return cast<TypeHandler>(element_at(--rep()->allocated_size));
- }
- }
-
- // AddAllocated version that implements arena-safe copying behavior.
- template <typename TypeHandler>
- void AddAllocatedInternal(Value<TypeHandler>* value, std::true_type) {
- Arena* element_arena = TypeHandler::GetArena(value);
- Arena* arena = GetArena();
- if (arena != element_arena || AllocatedSizeAtCapacity()) {
- AddAllocatedSlowWithCopy<TypeHandler>(value, element_arena, arena);
- return;
- }
- // Fast path: underlying arena representation (tagged pointer) is equal to
- // our arena pointer, and we can add to array without resizing it (at
- // least one slot that is not allocated).
- void** elems = elements();
- if (current_size_ < allocated_size()) {
- // Make space at [current] by moving first allocated element to end of
- // allocated list.
- elems[allocated_size()] = elems[current_size_];
- }
- elems[ExchangeCurrentSize(current_size_ + 1)] = value;
- if (!using_sso()) ++rep()->allocated_size;
- }
-
- // AddAllocated version that does not implement arena-safe copying behavior.
- template <typename TypeHandler>
- void AddAllocatedInternal(Value<TypeHandler>* value, std::false_type) {
- if (AllocatedSizeAtCapacity()) {
- UnsafeArenaAddAllocated<TypeHandler>(value);
- return;
- }
- // Fast path: underlying arena representation (tagged pointer) is equal to
- // our arena pointer, and we can add to array without resizing it (at
- // least one slot that is not allocated).
- void** elems = elements();
- if (current_size_ < allocated_size()) {
- // Make space at [current] by moving first allocated element to end of
- // allocated list.
- elems[allocated_size()] = elems[current_size_];
- }
- elems[ExchangeCurrentSize(current_size_ + 1)] = value;
- if (!using_sso()) ++rep()->allocated_size;
- }
-
// Slowpath handles all cases, copying if necessary.
template <typename TypeHandler>
PROTOBUF_NOINLINE void AddAllocatedSlowWithCopy(
// Pass value_arena and my_arena to avoid duplicate virtual call (value)
// or load (mine).
Value<TypeHandler>* value, Arena* value_arena, Arena* my_arena) {
+ using H = CommonHandler<TypeHandler>;
// Ensure that either the value is in the same arena, or if not, we do the
// appropriate thing: Own() it (if it's on heap and we're in an arena) or
// copy it to our arena/heap (otherwise).
if (my_arena != nullptr && value_arena == nullptr) {
my_arena->Own(value);
} else if (my_arena != value_arena) {
+ ABSL_DCHECK(value_arena != nullptr);
auto* new_value = TypeHandler::NewFromPrototype(value, my_arena);
- using H = CommonHandler<TypeHandler>;
H::Merge(*value, new_value);
- H::Delete(value, value_arena);
value = new_value;
}
- UnsafeArenaAddAllocated<TypeHandler>(value);
- }
-
- template <typename TypeHandler>
- Value<TypeHandler>* ReleaseLastInternal(std::true_type) {
- // ReleaseLast() for types that implement merge/copy behavior.
- // First, release an element.
- Value<TypeHandler>* result = UnsafeArenaReleaseLast<TypeHandler>();
- // Now perform a copy if we're on an arena.
- Arena* arena = GetArena();
-
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
- auto* new_result = copy<TypeHandler>(result);
- if (arena == nullptr) delete result;
-#else // PROTOBUF_FORCE_COPY_IN_RELEASE
- auto* new_result = (arena == nullptr) ? result : copy<TypeHandler>(result);
-#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
- return new_result;
- }
-
- template <typename TypeHandler>
- Value<TypeHandler>* ReleaseLastInternal(std::false_type) {
- // ReleaseLast() for types that *do not* implement merge/copy behavior --
- // this is the same as UnsafeArenaReleaseLast(). Note that we
- // ABSL_DCHECK-fail if we're on an arena, since the user really should
- // implement the copy operation in this case.
- ABSL_DCHECK(GetArena() == nullptr)
- << "ReleaseLast() called on a RepeatedPtrField that is on an arena, "
- << "with a type that does not implement MergeFrom. This is unsafe; "
- << "please implement MergeFrom for your type.";
- return UnsafeArenaReleaseLast<TypeHandler>();
+ UnsafeArenaAddAllocated<H>(value);
}
template <typename TypeHandler>
@@ -630,7 +526,9 @@
}
this->CopyFrom<TypeHandler>(*other);
other->InternalSwap(&temp);
- temp.Destroy<TypeHandler>(); // Frees rep_ if `other` had no arena.
+ if (temp.NeedsDestroy()) {
+ temp.Destroy<TypeHandler>();
+ }
}
// Gets the Arena on which this RepeatedPtrField stores its elements.
@@ -822,8 +720,9 @@
return InternalExtend(n - Capacity());
}
- // Internal helper for Add that keeps definition out-of-line.
- void* AddOutOfLineHelper(ElementFactory factory);
+ // Internal helpers for Add that keep definition out-of-line.
+ void* AddMessageLite(ElementFactory factory);
+ void* AddString();
// Common implementation used by various Add* methods. `factory` is an object
// used to construct a new element unless there are spare cleared elements
@@ -831,10 +730,9 @@
//
// Note: avoid inlining this function in methods such as `Add()` as this would
// drastically increase binary size due to template instantiation and implicit
- // inlining. Instead, use wrapper functions with out-of-line definition
- // similar to `AddOutOfLineHelper`.
- template <typename F>
- auto* AddInternal(F factory);
+ // inlining.
+ template <typename Factory>
+ void* AddInternal(Factory factory);
// A few notes on internal representation:
//
@@ -1045,12 +943,13 @@
Element, decltype(*std::declval<Iter>())>::value>::type>
RepeatedPtrField(Iter begin, Iter end);
- RepeatedPtrField(const RepeatedPtrField& other)
- : RepeatedPtrField(nullptr, other) {}
+ RepeatedPtrField(const RepeatedPtrField& rhs)
+ : RepeatedPtrField(nullptr, rhs) {}
RepeatedPtrField& operator=(const RepeatedPtrField& other)
ABSL_ATTRIBUTE_LIFETIME_BOUND;
- RepeatedPtrField(RepeatedPtrField&& other) noexcept;
+ RepeatedPtrField(RepeatedPtrField&& rhs) noexcept
+ : RepeatedPtrField(nullptr, std::move(rhs)) {}
RepeatedPtrField& operator=(RepeatedPtrField&& other) noexcept
ABSL_ATTRIBUTE_LIFETIME_BOUND;
@@ -1257,26 +1156,6 @@
ABSL_DEPRECATED("This will be removed in a future release")
int ClearedCount() const;
-#ifndef PROTOBUF_FUTURE_REMOVE_CLEARED_API
- // Adds an element to the pool of cleared objects, passing ownership to
- // the RepeatedPtrField. The element must be cleared prior to calling
- // this method.
- //
- // This method cannot be called when either the repeated field or |value| is
- // on an arena; both cases will trigger a ABSL_DCHECK-failure.
- ABSL_DEPRECATED("This will be removed in a future release")
- void AddCleared(Element* value);
- // Removes and returns a single element from the cleared pool, passing
- // ownership to the caller. The element is guaranteed to be cleared.
- // Requires: ClearedCount() > 0
- //
- // This method cannot be called when the repeated field is on an arena; doing
- // so will trigger a ABSL_DCHECK-failure.
- PROTOBUF_NODISCARD
- ABSL_DEPRECATED("This will be removed in a future release")
- pointer ReleaseCleared();
-#endif // !PROTOBUF_FUTURE_REMOVE_CLEARED_API
-
// Removes the element referenced by position.
//
// Returns an iterator to the element immediately following the removed
@@ -1324,19 +1203,11 @@
using TypeHandler = internal::GenericTypeHandler<Element>;
RepeatedPtrField(Arena* arena, const RepeatedPtrField& rhs);
+ RepeatedPtrField(Arena* arena, RepeatedPtrField&& rhs);
- // Implementations for ExtractSubrange(). The copying behavior must be
- // included only if the type supports the necessary operations (e.g.,
- // MergeFrom()), so we must resolve this at compile time. ExtractSubrange()
- // uses SFINAE to choose one of the below implementations.
- void ExtractSubrangeInternal(int start, int num, Element** elements,
- std::true_type);
- void ExtractSubrangeInternal(int start, int num, Element** elements,
- std::false_type);
-
void AddAllocatedForParse(Element* p) {
- return RepeatedPtrFieldBase::AddAllocatedForParse<TypeHandler>(p);
+ return RepeatedPtrFieldBase::AddAllocatedForParse(p);
}
};
@@ -1374,12 +1245,13 @@
template <typename Element>
RepeatedPtrField<Element>::~RepeatedPtrField() {
StaticValidityCheck();
+ if (!NeedsDestroy()) return;
#ifdef __cpp_if_constexpr
if constexpr (std::is_base_of<MessageLite, Element>::value) {
#else
if (std::is_base_of<MessageLite, Element>::value) {
#endif
- if (NeedsDestroy()) DestroyProtos();
+ DestroyProtos();
} else {
Destroy<TypeHandler>();
}
@@ -1393,19 +1265,18 @@
}
template <typename Element>
-inline RepeatedPtrField<Element>::RepeatedPtrField(
- RepeatedPtrField&& other) noexcept
- : RepeatedPtrField() {
+inline RepeatedPtrField<Element>::RepeatedPtrField(Arena* arena,
+ RepeatedPtrField&& rhs)
+ : RepeatedPtrField(arena) {
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
- CopyFrom(other);
+ CopyFrom(rhs);
#else // PROTOBUF_FORCE_COPY_IN_MOVE
- // We don't just call Swap(&other) here because it would perform 3 copies if
- // other is on an arena. This field can't be on an arena because arena
- // construction always uses the Arena* accepting constructor.
- if (other.GetArena()) {
- CopyFrom(other);
+ // We don't just call Swap(&rhs) here because it would perform 3 copies if rhs
+ // is on a different arena.
+ if (arena != rhs.GetArena()) {
+ CopyFrom(rhs);
} else {
- InternalSwap(&other);
+ InternalSwap(&rhs);
}
#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
}
@@ -1511,16 +1382,6 @@
template <typename Element>
inline void RepeatedPtrField<Element>::ExtractSubrange(int start, int num,
Element** elements) {
- typename internal::TypeImplementsMergeBehavior<
- typename TypeHandler::Type>::type t;
- ExtractSubrangeInternal(start, num, elements, t);
-}
-
-// ExtractSubrange() implementation for types that implement merge/copy
-// behavior.
-template <typename Element>
-inline void RepeatedPtrField<Element>::ExtractSubrangeInternal(
- int start, int num, Element** elements, std::true_type) {
ABSL_DCHECK_GE(start, 0);
ABSL_DCHECK_GE(num, 0);
ABSL_DCHECK_LE(start + num, size());
@@ -1558,21 +1419,6 @@
CloseGap(start, num);
}
-// ExtractSubrange() implementation for types that do not implement merge/copy
-// behavior.
-template <typename Element>
-inline void RepeatedPtrField<Element>::ExtractSubrangeInternal(
- int start, int num, Element** elements, std::false_type) {
- // This case is identical to UnsafeArenaExtractSubrange(). However, since
- // ExtractSubrange() must return heap-allocated objects by contract, and we
- // cannot fulfill this contract if we are an on arena, we must ABSL_DCHECK()
- // that we are not on an arena.
- ABSL_DCHECK(GetArena() == nullptr)
- << "ExtractSubrange() when arena is non-nullptr is only supported when "
- << "the Element type supplies a MergeFrom() operation to make copies.";
- UnsafeArenaExtractSubrange(start, num, elements);
-}
-
template <typename Element>
inline void RepeatedPtrField<Element>::UnsafeArenaExtractSubrange(
int start, int num, Element** elements) {
@@ -1709,18 +1555,6 @@
return RepeatedPtrFieldBase::ClearedCount();
}
-#ifndef PROTOBUF_FUTURE_REMOVE_CLEARED_API
-template <typename Element>
-inline void RepeatedPtrField<Element>::AddCleared(Element* value) {
- return RepeatedPtrFieldBase::AddCleared<TypeHandler>(value);
-}
-
-template <typename Element>
-inline Element* RepeatedPtrField<Element>::ReleaseCleared() {
- return RepeatedPtrFieldBase::ReleaseCleared<TypeHandler>();
-}
-#endif // !PROTOBUF_FUTURE_REMOVE_CLEARED_API
-
template <typename Element>
inline void RepeatedPtrField<Element>::Reserve(int new_size) {
return RepeatedPtrFieldBase::Reserve(new_size);
@@ -1843,6 +1677,17 @@
void* const* it_;
};
+template <typename Traits, typename = void>
+struct IteratorConceptSupport {
+ using tag = typename Traits::iterator_category;
+};
+
+template <typename Traits>
+struct IteratorConceptSupport<Traits,
+ absl::void_t<typename Traits::iterator_concept>> {
+ using tag = typename Traits::iterator_concept;
+};
+
// Provides an iterator that operates on pointers to the underlying objects
// rather than the objects themselves as RepeatedPtrIterator does.
// Consider using this when working with stl algorithms that change
@@ -1852,13 +1697,19 @@
// iterator, or "const void* const" for a constant iterator.
template <typename Element, typename VoidPtr>
class RepeatedPtrOverPtrsIterator {
+ private:
+ using traits =
+ std::iterator_traits<typename std::remove_const<Element>::type*>;
+
public:
- using iterator = RepeatedPtrOverPtrsIterator<Element, VoidPtr>;
- using iterator_category = std::random_access_iterator_tag;
- using value_type = typename std::remove_const<Element>::type;
- using difference_type = std::ptrdiff_t;
+ using value_type = typename traits::value_type;
+ using difference_type = typename traits::difference_type;
using pointer = Element*;
using reference = Element&;
+ using iterator_category = typename traits::iterator_category;
+ using iterator_concept = typename IteratorConceptSupport<traits>::tag;
+
+ using iterator = RepeatedPtrOverPtrsIterator<Element, VoidPtr>;
RepeatedPtrOverPtrsIterator() : it_(nullptr) {}
explicit RepeatedPtrOverPtrsIterator(VoidPtr* it) : it_(it) {}
diff --git a/src/google/protobuf/retention_test.cc b/src/google/protobuf/retention_test.cc
index 32b502d..8b77769 100644
--- a/src/google/protobuf/retention_test.cc
+++ b/src/google/protobuf/retention_test.cc
@@ -13,6 +13,7 @@
#include "google/protobuf/descriptor.pb.h"
#include <gtest/gtest.h>
+#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
#include "google/protobuf/compiler/parser.h"
#include "google/protobuf/dynamic_message.h"
@@ -160,6 +161,12 @@
.GetExtension(protobuf_unittest::method_option));
}
+class SimpleErrorCollector : public io::ErrorCollector {
+ public:
+ SimpleErrorCollector() = default;
+ void RecordError(int line, io::ColumnNumber column,
+ absl::string_view message) override{};
+};
TEST(RetentionTest, StripSourceRetentionOptionsWithSourceCodeInfo) {
// The tests above make assertions against the generated code, but this test
@@ -202,7 +209,7 @@
FileDescriptorSet::descriptor()->file()->name());
io::ArrayInputStream input_stream(proto_file.data(),
static_cast<int>(proto_file.size()));
- io::ErrorCollector error_collector;
+ SimpleErrorCollector error_collector;
io::Tokenizer tokenizer(&input_stream, &error_collector);
compiler::Parser parser;
FileDescriptorProto file_descriptor;
@@ -242,7 +249,7 @@
FileDescriptorSet::descriptor()->file()->name());
io::ArrayInputStream input_stream(proto_file.data(),
static_cast<int>(proto_file.size()));
- io::ErrorCollector error_collector;
+ SimpleErrorCollector error_collector;
io::Tokenizer tokenizer(&input_stream, &error_collector);
compiler::Parser parser;
FileDescriptorProto file_descriptor;
@@ -282,7 +289,7 @@
FileDescriptorSet::descriptor()->file()->name());
io::ArrayInputStream input_stream(proto_file.data(),
static_cast<int>(proto_file.size()));
- io::ErrorCollector error_collector;
+ SimpleErrorCollector error_collector;
io::Tokenizer tokenizer(&input_stream, &error_collector);
compiler::Parser parser;
FileDescriptorProto file_descriptor_proto;
@@ -331,7 +338,7 @@
FileDescriptorSet::descriptor()->file()->name());
io::ArrayInputStream input_stream(proto_file.data(),
static_cast<int>(proto_file.size()));
- io::ErrorCollector error_collector;
+ SimpleErrorCollector error_collector;
io::Tokenizer tokenizer(&input_stream, &error_collector);
compiler::Parser parser;
FileDescriptorProto file_descriptor_proto;
@@ -387,7 +394,7 @@
FileDescriptorSet::descriptor()->file()->name());
io::ArrayInputStream input_stream(proto_file.data(),
static_cast<int>(proto_file.size()));
- io::ErrorCollector error_collector;
+ SimpleErrorCollector error_collector;
io::Tokenizer tokenizer(&input_stream, &error_collector);
compiler::Parser parser;
FileDescriptorProto file_descriptor_proto;
diff --git a/src/google/protobuf/source_context.pb.cc b/src/google/protobuf/source_context.pb.cc
index d49b059..18898f0 100644
--- a/src/google/protobuf/source_context.pb.cc
+++ b/src/google/protobuf/source_context.pb.cc
@@ -115,9 +115,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fsource_5fcontext_2eproto(&descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -171,12 +168,15 @@
const ::google::protobuf::MessageLite::ClassData*
SourceContext::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- SourceContext::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(SourceContext, _impl_._cached_size_),
+ false,
+ },
+ &SourceContext::MergeImpl,
+ &SourceContext::kDescriptorMethods,
};
return &_data_;
}
@@ -276,7 +276,7 @@
}
-void SourceContext::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void SourceContext::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<SourceContext*>(&to_msg);
auto& from = static_cast<const SourceContext&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.SourceContext)
@@ -310,9 +310,9 @@
}
::google::protobuf::Metadata SourceContext::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_getter, &descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fsource_5fcontext_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fsource_5fcontext_2eproto[0]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -322,4 +322,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/source_context.pb.h b/src/google/protobuf/source_context.pb.h
index 651eefc..be61ddf 100644
--- a/src/google/protobuf/source_context.pb.h
+++ b/src/google/protobuf/source_context.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -71,21 +65,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT SourceContext final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.SourceContext) */ {
+class PROTOBUF_EXPORT SourceContext final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.SourceContext) */ {
public:
inline SourceContext() : SourceContext(nullptr) {}
~SourceContext() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR SourceContext(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR SourceContext(
+ ::google::protobuf::internal::ConstantInitialized);
- inline SourceContext(const SourceContext& from)
- : SourceContext(nullptr, from) {}
- SourceContext(SourceContext&& from) noexcept
- : SourceContext() {
- *this = ::std::move(from);
- }
-
+ inline SourceContext(const SourceContext& from) : SourceContext(nullptr, from) {}
+ inline SourceContext(SourceContext&& from) noexcept
+ : SourceContext(nullptr, std::move(from)) {}
inline SourceContext& operator=(const SourceContext& from) {
CopyFrom(from);
return *this;
@@ -93,9 +84,9 @@
inline SourceContext& operator=(SourceContext&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -127,22 +118,17 @@
}
static inline const SourceContext* internal_default_instance() {
return reinterpret_cast<const SourceContext*>(
- &_SourceContext_default_instance_);
+ &_SourceContext_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(SourceContext& a, SourceContext& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(SourceContext& a, SourceContext& b) { a.Swap(&b); }
inline void Swap(SourceContext* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -162,11 +148,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const SourceContext& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const SourceContext& from) {
- SourceContext::MergeImpl(*this, from);
- }
+ void MergeFrom(const SourceContext& from) { SourceContext::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -174,31 +162,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(SourceContext* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.SourceContext";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.SourceContext"; }
+
+ protected:
explicit SourceContext(::google::protobuf::Arena* arena);
SourceContext(::google::protobuf::Arena* arena, const SourceContext& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ SourceContext(::google::protobuf::Arena* arena, SourceContext&& from) noexcept
+ : SourceContext(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kFileNameFieldNumber = 1,
};
@@ -221,7 +211,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.SourceContext)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -233,14 +222,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ArenaStringPtr file_name_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
@@ -279,7 +267,6 @@
inline PROTOBUF_ALWAYS_INLINE void SourceContext::set_file_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.file_name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.SourceContext.file_name)
}
@@ -294,12 +281,10 @@
}
inline void SourceContext::_internal_set_file_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.file_name_.Set(value, GetArena());
}
inline std::string* SourceContext::_internal_mutable_file_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.file_name_.Mutable( GetArena());
}
inline std::string* SourceContext::release_file_name() {
diff --git a/src/google/protobuf/struct.pb.cc b/src/google/protobuf/struct.pb.cc
index eaaa6e9..8fbfe1a 100644
--- a/src/google/protobuf/struct.pb.cc
+++ b/src/google/protobuf/struct.pb.cc
@@ -215,9 +215,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fstruct_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fstruct_2eproto(&descriptor_table_google_2fprotobuf_2fstruct_2eproto);
namespace google {
namespace protobuf {
const ::google::protobuf::EnumDescriptor* NullValue_descriptor() {
@@ -235,9 +232,9 @@
Struct_FieldsEntry_DoNotUse::Struct_FieldsEntry_DoNotUse(::google::protobuf::Arena* arena)
: SuperType(arena) {}
::google::protobuf::Metadata Struct_FieldsEntry_DoNotUse::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fstruct_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fstruct_2eproto[0]);
}
// ===================================================================
@@ -289,12 +286,15 @@
const ::google::protobuf::MessageLite::ClassData*
Struct::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Struct::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Struct, _impl_._cached_size_),
+ false,
+ },
+ &Struct::MergeImpl,
+ &Struct::kDescriptorMethods,
};
return &_data_;
}
@@ -416,7 +416,7 @@
}
-void Struct::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Struct::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Struct*>(&to_msg);
auto& from = static_cast<const Struct&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Struct)
@@ -446,9 +446,9 @@
}
::google::protobuf::Metadata Struct::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fstruct_2eproto[1]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fstruct_2eproto[1]);
}
// ===================================================================
@@ -456,16 +456,8 @@
public:
static constexpr ::int32_t kOneofCaseOffset =
PROTOBUF_FIELD_OFFSET(::google::protobuf::Value, _impl_._oneof_case_);
- static const ::google::protobuf::Struct& struct_value(const Value* msg);
- static const ::google::protobuf::ListValue& list_value(const Value* msg);
};
-const ::google::protobuf::Struct& Value::_Internal::struct_value(const Value* msg) {
- return *msg->_impl_.kind_.struct_value_;
-}
-const ::google::protobuf::ListValue& Value::_Internal::list_value(const Value* msg) {
- return *msg->_impl_.kind_.list_value_;
-}
void Value::set_allocated_struct_value(::google::protobuf::Struct* struct_value) {
::google::protobuf::Arena* message_arena = GetArena();
clear_kind();
@@ -603,12 +595,15 @@
const ::google::protobuf::MessageLite::ClassData*
Value::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Value::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Value, _impl_._cached_size_),
+ false,
+ },
+ &Value::MergeImpl,
+ &Value::kDescriptorMethods,
};
return &_data_;
}
@@ -715,14 +710,12 @@
}
case kStructValue: {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 5, _Internal::struct_value(this),
- _Internal::struct_value(this).GetCachedSize(), target, stream);
+ 5, *_impl_.kind_.struct_value_, _impl_.kind_.struct_value_->GetCachedSize(), target, stream);
break;
}
case kListValue: {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 6, _Internal::list_value(this),
- _Internal::list_value(this).GetCachedSize(), target, stream);
+ 6, *_impl_.kind_.list_value_, _impl_.kind_.list_value_->GetCachedSize(), target, stream);
break;
}
default:
@@ -788,43 +781,65 @@
}
-void Value::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Value::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Value*>(&to_msg);
auto& from = static_cast<const Value&>(from_msg);
+ ::google::protobuf::Arena* arena = _this->GetArena();
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Value)
ABSL_DCHECK_NE(&from, _this);
::uint32_t cached_has_bits = 0;
(void) cached_has_bits;
- switch (from.kind_case()) {
- case kNullValue: {
- _this->_internal_set_null_value(from._internal_null_value());
- break;
+ if (const uint32_t oneof_from_case = from._impl_._oneof_case_[0]) {
+ const uint32_t oneof_to_case = _this->_impl_._oneof_case_[0];
+ const bool oneof_needs_init = oneof_to_case != oneof_from_case;
+ if (oneof_needs_init) {
+ if (oneof_to_case != 0) {
+ _this->clear_kind();
+ }
+ _this->_impl_._oneof_case_[0] = oneof_from_case;
}
- case kNumberValue: {
- _this->_internal_set_number_value(from._internal_number_value());
- break;
- }
- case kStringValue: {
- _this->_internal_set_string_value(from._internal_string_value());
- break;
- }
- case kBoolValue: {
- _this->_internal_set_bool_value(from._internal_bool_value());
- break;
- }
- case kStructValue: {
- _this->_internal_mutable_struct_value()->::google::protobuf::Struct::MergeFrom(
- from._internal_struct_value());
- break;
- }
- case kListValue: {
- _this->_internal_mutable_list_value()->::google::protobuf::ListValue::MergeFrom(
- from._internal_list_value());
- break;
- }
- case KIND_NOT_SET: {
- break;
+
+ switch (oneof_from_case) {
+ case kNullValue: {
+ _this->_impl_.kind_.null_value_ = from._impl_.kind_.null_value_;
+ break;
+ }
+ case kNumberValue: {
+ _this->_impl_.kind_.number_value_ = from._impl_.kind_.number_value_;
+ break;
+ }
+ case kStringValue: {
+ if (oneof_needs_init) {
+ _this->_impl_.kind_.string_value_.InitDefault();
+ }
+ _this->_impl_.kind_.string_value_.Set(from._internal_string_value(), arena);
+ break;
+ }
+ case kBoolValue: {
+ _this->_impl_.kind_.bool_value_ = from._impl_.kind_.bool_value_;
+ break;
+ }
+ case kStructValue: {
+ if (oneof_needs_init) {
+ _this->_impl_.kind_.struct_value_ =
+ ::google::protobuf::Message::CopyConstruct<::google::protobuf::Struct>(arena, *from._impl_.kind_.struct_value_);
+ } else {
+ _this->_impl_.kind_.struct_value_->MergeFrom(from._internal_struct_value());
+ }
+ break;
+ }
+ case kListValue: {
+ if (oneof_needs_init) {
+ _this->_impl_.kind_.list_value_ =
+ ::google::protobuf::Message::CopyConstruct<::google::protobuf::ListValue>(arena, *from._impl_.kind_.list_value_);
+ } else {
+ _this->_impl_.kind_.list_value_->MergeFrom(from._internal_list_value());
+ }
+ break;
+ }
+ case KIND_NOT_SET:
+ break;
}
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
@@ -849,9 +864,9 @@
}
::google::protobuf::Metadata Value::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fstruct_2eproto[2]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fstruct_2eproto[2]);
}
// ===================================================================
@@ -903,12 +918,15 @@
const ::google::protobuf::MessageLite::ClassData*
ListValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- ListValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(ListValue, _impl_._cached_size_),
+ false,
+ },
+ &ListValue::MergeImpl,
+ &ListValue::kDescriptorMethods,
};
return &_data_;
}
@@ -1005,7 +1023,7 @@
}
-void ListValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void ListValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<ListValue*>(&to_msg);
auto& from = static_cast<const ListValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.ListValue)
@@ -1036,9 +1054,9 @@
}
::google::protobuf::Metadata ListValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter, &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fstruct_2eproto[3]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fstruct_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fstruct_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fstruct_2eproto[3]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -1048,4 +1066,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fstruct_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/struct.pb.h b/src/google/protobuf/struct.pb.h
index 676ba52..0ac4a35 100644
--- a/src/google/protobuf/struct.pb.h
+++ b/src/google/protobuf/struct.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -116,21 +110,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT ListValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ListValue) */ {
+class PROTOBUF_EXPORT ListValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.ListValue) */ {
public:
inline ListValue() : ListValue(nullptr) {}
~ListValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR ListValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR ListValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline ListValue(const ListValue& from)
- : ListValue(nullptr, from) {}
- ListValue(ListValue&& from) noexcept
- : ListValue() {
- *this = ::std::move(from);
- }
-
+ inline ListValue(const ListValue& from) : ListValue(nullptr, from) {}
+ inline ListValue(ListValue&& from) noexcept
+ : ListValue(nullptr, std::move(from)) {}
inline ListValue& operator=(const ListValue& from) {
CopyFrom(from);
return *this;
@@ -138,9 +129,9 @@
inline ListValue& operator=(ListValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -172,22 +163,17 @@
}
static inline const ListValue* internal_default_instance() {
return reinterpret_cast<const ListValue*>(
- &_ListValue_default_instance_);
+ &_ListValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 3;
-
- friend void swap(ListValue& a, ListValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 3;
+ friend void swap(ListValue& a, ListValue& b) { a.Swap(&b); }
inline void Swap(ListValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -207,11 +193,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const ListValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const ListValue& from) {
- ListValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const ListValue& from) { ListValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -219,31 +207,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(ListValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.ListValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.ListValue"; }
+
+ protected:
explicit ListValue(::google::protobuf::Arena* arena);
ListValue(::google::protobuf::Arena* arena, const ListValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ ListValue(::google::protobuf::Arena* arena, ListValue&& from) noexcept
+ : ListValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValuesFieldNumber = 1,
};
@@ -255,20 +245,18 @@
public:
void clear_values() ;
::google::protobuf::Value* mutable_values(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Value >*
- mutable_values();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Value>* mutable_values();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Value>& _internal_values() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Value>* _internal_mutable_values();
public:
const ::google::protobuf::Value& values(int index) const;
::google::protobuf::Value* add_values();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Value >&
- values() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Value>& values() const;
// @@protoc_insertion_point(class_scope:google.protobuf.ListValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 1,
@@ -280,37 +268,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::Value > values_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fstruct_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Struct final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Struct) */ {
+class PROTOBUF_EXPORT Struct final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Struct) */ {
public:
inline Struct() : Struct(nullptr) {}
~Struct() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Struct(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Struct(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Struct(const Struct& from)
- : Struct(nullptr, from) {}
- Struct(Struct&& from) noexcept
- : Struct() {
- *this = ::std::move(from);
- }
-
+ inline Struct(const Struct& from) : Struct(nullptr, from) {}
+ inline Struct(Struct&& from) noexcept
+ : Struct(nullptr, std::move(from)) {}
inline Struct& operator=(const Struct& from) {
CopyFrom(from);
return *this;
@@ -318,9 +303,9 @@
inline Struct& operator=(Struct&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -352,22 +337,17 @@
}
static inline const Struct* internal_default_instance() {
return reinterpret_cast<const Struct*>(
- &_Struct_default_instance_);
+ &_Struct_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 1;
-
- friend void swap(Struct& a, Struct& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 1;
+ friend void swap(Struct& a, Struct& b) { a.Swap(&b); }
inline void Swap(Struct* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -387,11 +367,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Struct& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Struct& from) {
- Struct::MergeImpl(*this, from);
- }
+ void MergeFrom(const Struct& from) { Struct::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -399,32 +381,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Struct* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Struct";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Struct"; }
+
+ protected:
explicit Struct(::google::protobuf::Arena* arena);
Struct(::google::protobuf::Arena* arena, const Struct& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Struct(::google::protobuf::Arena* arena, Struct&& from) noexcept
+ : Struct(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
// accessors -------------------------------------------------------
-
enum : int {
kFieldsFieldNumber = 1,
};
@@ -446,7 +429,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Struct)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 2,
@@ -458,14 +440,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::MapField<Struct_FieldsEntry_DoNotUse, std::string, ::google::protobuf::Value,
::google::protobuf::internal::WireFormatLite::TYPE_STRING,
::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE>
@@ -475,7 +456,8 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fstruct_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
class Struct_FieldsEntry_DoNotUse final
: public ::google::protobuf::internal::MapEntry<
@@ -505,21 +487,18 @@
};
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Value final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Value) */ {
+class PROTOBUF_EXPORT Value final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Value) */ {
public:
inline Value() : Value(nullptr) {}
~Value() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Value(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Value(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Value(const Value& from)
- : Value(nullptr, from) {}
- Value(Value&& from) noexcept
- : Value() {
- *this = ::std::move(from);
- }
-
+ inline Value(const Value& from) : Value(nullptr, from) {}
+ inline Value(Value&& from) noexcept
+ : Value(nullptr, std::move(from)) {}
inline Value& operator=(const Value& from) {
CopyFrom(from);
return *this;
@@ -527,9 +506,9 @@
inline Value& operator=(Value&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -568,25 +547,19 @@
kListValue = 6,
KIND_NOT_SET = 0,
};
-
static inline const Value* internal_default_instance() {
return reinterpret_cast<const Value*>(
- &_Value_default_instance_);
+ &_Value_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 2;
-
- friend void swap(Value& a, Value& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 2;
+ friend void swap(Value& a, Value& b) { a.Swap(&b); }
inline void Swap(Value* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -606,11 +579,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Value& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Value& from) {
- Value::MergeImpl(*this, from);
- }
+ void MergeFrom(const Value& from) { Value::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -618,31 +593,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Value* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Value";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Value"; }
+
+ protected:
explicit Value(::google::protobuf::Arena* arena);
Value(::google::protobuf::Arena* arena, const Value& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Value(::google::protobuf::Arena* arena, Value&& from) noexcept
+ : Value(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNullValueFieldNumber = 1,
kNumberValueFieldNumber = 2,
@@ -750,10 +727,8 @@
void set_has_bool_value();
void set_has_struct_value();
void set_has_list_value();
-
inline bool has_kind() const;
inline void clear_has_kind();
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 6, 2,
@@ -765,17 +740,16 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
union KindUnion {
constexpr KindUnion() : _constinit_{} {}
- ::google::protobuf::internal::ConstantInitialized _constinit_;
+ ::google::protobuf::internal::ConstantInitialized _constinit_;
int null_value_;
double number_value_;
::google::protobuf::internal::ArenaStringPtr string_value_;
@@ -785,7 +759,6 @@
} kind_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::uint32_t _oneof_case_[1];
-
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
@@ -861,7 +834,11 @@
return _internal_null_value();
}
inline void Value::set_null_value(::google::protobuf::NullValue value) {
- _internal_set_null_value(value);
+ if (kind_case() != kNullValue) {
+ clear_kind();
+ set_has_null_value();
+ }
+ _impl_.kind_.null_value_ = value;
// @@protoc_insertion_point(field_set:google.protobuf.Value.null_value)
}
inline ::google::protobuf::NullValue Value::_internal_null_value() const {
@@ -870,13 +847,6 @@
}
return static_cast<::google::protobuf::NullValue>(0);
}
-inline void Value::_internal_set_null_value(::google::protobuf::NullValue value) {
- if (kind_case() != kNullValue) {
- clear_kind();
- set_has_null_value();
- }
- _impl_.kind_.null_value_ = value;
-}
// double number_value = 2;
inline bool Value::has_number_value() const {
@@ -897,7 +867,11 @@
return _internal_number_value();
}
inline void Value::set_number_value(double value) {
- _internal_set_number_value(value);
+ if (kind_case() != kNumberValue) {
+ clear_kind();
+ set_has_number_value();
+ }
+ _impl_.kind_.number_value_ = value;
// @@protoc_insertion_point(field_set:google.protobuf.Value.number_value)
}
inline double Value::_internal_number_value() const {
@@ -906,13 +880,6 @@
}
return 0;
}
-inline void Value::_internal_set_number_value(double value) {
- if (kind_case() != kNumberValue) {
- clear_kind();
- set_has_number_value();
- }
- _impl_.kind_.number_value_ = value;
-}
// string string_value = 3;
inline bool Value::has_string_value() const {
@@ -1018,7 +985,11 @@
return _internal_bool_value();
}
inline void Value::set_bool_value(bool value) {
- _internal_set_bool_value(value);
+ if (kind_case() != kBoolValue) {
+ clear_kind();
+ set_has_bool_value();
+ }
+ _impl_.kind_.bool_value_ = value;
// @@protoc_insertion_point(field_set:google.protobuf.Value.bool_value)
}
inline bool Value::_internal_bool_value() const {
@@ -1027,13 +998,6 @@
}
return false;
}
-inline void Value::_internal_set_bool_value(bool value) {
- if (kind_case() != kBoolValue) {
- clear_kind();
- set_has_bool_value();
- }
- _impl_.kind_.bool_value_ = value;
-}
// .google.protobuf.Struct struct_value = 5;
inline bool Value::has_struct_value() const {
diff --git a/src/google/protobuf/stubs/common.cc b/src/google/protobuf/stubs/common.cc
index faff493..3313150 100644
--- a/src/google/protobuf/stubs/common.cc
+++ b/src/google/protobuf/stubs/common.cc
@@ -41,38 +41,21 @@
namespace internal {
-void VerifyVersion(int headerVersion,
- int minLibraryVersion,
- const char* filename) {
- if (GOOGLE_PROTOBUF_VERSION < minLibraryVersion) {
- // Library is too old for headers.
+void VerifyVersion(int protobufVersionCompiledWith, const char* filename) {
+ // If the user's program is linked against a different version of Protobuf,
+ // GOOGLE_PROTOBUF_VERSION will have a different value.
+ if (GOOGLE_PROTOBUF_VERSION != protobufVersionCompiledWith) {
ABSL_LOG(FATAL)
- << "This program requires version " << VersionString(minLibraryVersion)
- << " of the Protocol Buffer runtime library, but the installed version "
- "is "
+ << "This program was compiled with Protobuf C++ version "
+ << VersionString(protobufVersionCompiledWith)
+ << ", but the linked version is "
<< VersionString(GOOGLE_PROTOBUF_VERSION)
- << ". Please update "
- "your library. If you compiled the program yourself, make sure "
- "that "
+ << ". Please update your library. If you compiled the program "
+ "yourself, make sure that"
"your headers are from the same version of Protocol Buffers as your "
"link-time library. (Version verification failed in \""
<< filename << "\".)";
}
- if (headerVersion < kMinHeaderVersionForLibrary) {
- // Headers are too old for library.
- ABSL_LOG(FATAL)
- << "This program was compiled against version "
- << VersionString(headerVersion)
- << " of the Protocol Buffer runtime "
- "library, which is not compatible with the installed version ("
- << VersionString(GOOGLE_PROTOBUF_VERSION)
- << "). Contact the program "
- "author for an update. If you compiled the program yourself, make "
- "sure that your headers are from the same version of Protocol "
- "Buffers "
- "as your link-time library. (Version verification failed in \""
- << filename << "\".)";
- }
}
std::string VersionString(int version) {
diff --git a/src/google/protobuf/stubs/common.h b/src/google/protobuf/stubs/common.h
index 2a95199..459bd15 100644
--- a/src/google/protobuf/stubs/common.h
+++ b/src/google/protobuf/stubs/common.h
@@ -13,6 +13,7 @@
#define GOOGLE_PROTOBUF_COMMON_H__
#include <algorithm>
+#include <iostream>
#include <memory>
#include <string>
#include <vector>
@@ -44,27 +45,14 @@
// The current version, represented as a single integer to make comparison
// easier: major * 10^6 + minor * 10^3 + micro
-#define GOOGLE_PROTOBUF_VERSION 4025000
+#define GOOGLE_PROTOBUF_VERSION 4026000
// A suffix string for alpha, beta or rc releases. Empty for stable releases.
#define GOOGLE_PROTOBUF_VERSION_SUFFIX ""
-// The minimum header version which works with the current version of
-// the library. This constant should only be used by protoc's C++ code
-// generator.
-static const int kMinHeaderVersionForLibrary = 4025000;
-
-// The minimum protoc version which works with the current version of the
-// headers.
-#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 4025000
-
-// The minimum header version which works with the current version of
-// protoc. This constant should only be used in VerifyVersion().
-static const int kMinHeaderVersionForProtoc = 4025000;
-
-// Verifies that the headers and libraries are compatible. Use the macro
-// below to call this.
-void PROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion,
+// Verifies that the protobuf version a program was compiled with matches what
+// it is linked/running with. Use the macro below to call this function.
+void PROTOBUF_EXPORT VerifyVersion(int protobufVersionCompiledWith,
const char* filename);
// Converts a numeric version number to a string.
@@ -81,9 +69,8 @@
// to use the protobuf library) to verify that the version you link against
// matches the headers you compiled against. If a version mismatch is
// detected, the process will abort.
-#define GOOGLE_PROTOBUF_VERIFY_VERSION \
- ::google::protobuf::internal::VerifyVersion( \
- GOOGLE_PROTOBUF_VERSION, GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION, __FILE__)
+#define GOOGLE_PROTOBUF_VERIFY_VERSION \
+ ::google::protobuf::internal::VerifyVersion(GOOGLE_PROTOBUF_VERSION, __FILE__)
// This lives in message_lite.h now, but we leave this here for any users that
// #include common.h and not message_lite.h.
diff --git a/src/google/protobuf/text_format.cc b/src/google/protobuf/text_format.cc
index 9abd847..7637a36 100644
--- a/src/google/protobuf/text_format.cc
+++ b/src/google/protobuf/text_format.cc
@@ -18,6 +18,7 @@
#include <atomic>
#include <climits>
#include <cmath>
+#include <cstddef>
#include <limits>
#include <string>
#include <utility>
@@ -47,6 +48,7 @@
#include "google/protobuf/repeated_field.h"
#include "google/protobuf/unknown_field_set.h"
#include "google/protobuf/wire_format_lite.h"
+#include "utf8_validity.h"
// Must be included last.
#include "google/protobuf/port_def.inc"
@@ -295,6 +297,14 @@
}
} // namespace
+const void* TextFormat::Parser::UnsetFieldsMetadata::GetUnsetFieldAddress(
+ const Message& message, const Reflection& reflection,
+ const FieldDescriptor& fd) {
+ // reflection->GetRaw() is a simple cast for any non-repeated type, so for
+ // simplicity we just pass in char as the template argument.
+ return &reflection.GetRaw<char>(message, &fd);
+}
+
// ===========================================================================
// Internal class for parsing an ASCII representation of a Protocol Message.
// This class makes use of the Protocol Message compiler's tokenizer found
@@ -331,7 +341,7 @@
bool allow_unknown_extension, bool allow_unknown_enum,
bool allow_field_number, bool allow_relaxed_whitespace,
bool allow_partial, int recursion_limit,
- bool error_on_no_op_fields)
+ UnsetFieldsMetadata* no_op_fields)
: error_collector_(error_collector),
finder_(finder),
parse_info_tree_(parse_info_tree),
@@ -349,7 +359,7 @@
recursion_limit_(recursion_limit),
had_silent_marker_(false),
had_errors_(false),
- error_on_no_op_fields_(error_on_no_op_fields) {
+ no_op_fields_(no_op_fields) {
// For backwards-compatibility with proto1, we need to allow the 'f' suffix
// for floats.
tokenizer_.set_allow_f_after_float(true);
@@ -834,19 +844,21 @@
// When checking for no-op operations, We verify that both the existing value in
// the message and the new value are the default. If the existing field value is
// not the default, setting it to the default should not be treated as a no-op.
-#define SET_FIELD(CPPTYPE, CPPTYPELCASE, VALUE) \
- if (field->is_repeated()) { \
- reflection->Add##CPPTYPE(message, field, VALUE); \
- } else { \
- if (error_on_no_op_fields_ && !field->has_presence() && \
- field->default_value_##CPPTYPELCASE() == \
- reflection->Get##CPPTYPE(*message, field) && \
- field->default_value_##CPPTYPELCASE() == VALUE) { \
- ReportError("Input field " + field->full_name() + \
- " did not change resulting proto."); \
- } else { \
- reflection->Set##CPPTYPE(message, field, std::move(VALUE)); \
- } \
+// The pointer of this is kept in no_op_fields_ for bookkeeping.
+#define SET_FIELD(CPPTYPE, CPPTYPELCASE, VALUE) \
+ if (field->is_repeated()) { \
+ reflection->Add##CPPTYPE(message, field, VALUE); \
+ } else { \
+ if (no_op_fields_ && !field->has_presence() && \
+ field->default_value_##CPPTYPELCASE() == \
+ reflection->Get##CPPTYPE(*message, field) && \
+ field->default_value_##CPPTYPELCASE() == VALUE) { \
+ no_op_fields_->addresses_.insert( \
+ UnsetFieldsMetadata::GetUnsetFieldAddress(*message, *reflection, \
+ *field)); \
+ } else { \
+ reflection->Set##CPPTYPE(message, field, std::move(VALUE)); \
+ } \
}
switch (field->cpp_type()) {
@@ -1429,7 +1441,7 @@
int recursion_limit_;
bool had_silent_marker_;
bool had_errors_;
- bool error_on_no_op_fields_;
+ UnsetFieldsMetadata* no_op_fields_{};
};
@@ -1637,6 +1649,92 @@
}
};
+namespace {
+
+// Returns true if `ch` needs to be escaped in TextFormat, independent of any
+// UTF-8 validity issues.
+bool DefinitelyNeedsEscape(unsigned char ch) {
+ if (ch >= 0x80) {
+ return false; // High byte; no escapes necessary if UTF-8 is valid.
+ }
+
+ if (!absl::ascii_isprint(ch)) {
+ return true; // Unprintable characters need escape.
+ }
+
+ switch (ch) {
+ case '\"':
+ case '\'':
+ case '\\':
+ // These characters need escapes despite being printable.
+ return true;
+ }
+
+ return false;
+}
+
+// Returns true if this is a high byte that requires UTF-8 validation. If the
+// UTF-8 validation fails, we must escape the byte.
+bool NeedsUtf8Validation(unsigned char ch) { return ch > 127; }
+
+// Returns the number of bytes in the prefix of `val` that do not need escaping.
+// This is like utf8_range::SpanStructurallyValid(), except that it also
+// terminates at any ASCII char that needs to be escaped in TextFormat (any char
+// that has `DefinitelyNeedsEscape(ch) == true`).
+//
+// If we could get a variant of utf8_range::SpanStructurallyValid() that could
+// terminate on any of these chars, that might be more efficient, but it would
+// be much more complicated to modify that heavily SIMD code.
+size_t SkipPassthroughBytes(absl::string_view val) {
+ for (size_t i = 0; i < val.size(); i++) {
+ unsigned char uc = val[i];
+ if (DefinitelyNeedsEscape(uc)) return i;
+ if (NeedsUtf8Validation(uc)) {
+ // Find the end of this region of consecutive high bytes, so that we only
+ // give high bytes to the UTF-8 checker. This avoids needing to perform
+ // a second scan of the ASCII characters looking for characters that
+ // need escaping.
+ //
+ // We assume that high bytes are less frequent than plain, printable ASCII
+ // bytes, so we accept the double-scan of high bytes.
+ size_t end = i + 1;
+ for (; end < val.size(); end++) {
+ if (!NeedsUtf8Validation(val[end])) break;
+ }
+ size_t n = end - i;
+ size_t ok = utf8_range::SpanStructurallyValid(val.substr(i, n));
+ if (ok != n) return i + ok;
+ i += ok - 1;
+ }
+ }
+ return val.size();
+}
+
+void HardenedPrintString(absl::string_view src,
+ TextFormat::BaseTextGenerator* generator) {
+ // Print as UTF-8, while guarding against any invalid UTF-8 in the string
+ // field.
+ //
+ // If in the future we have a guaranteed invariant that invalid UTF-8 will
+ // never be present, we could avoid the UTF-8 check here.
+
+ while (!src.empty()) {
+ size_t n = SkipPassthroughBytes(src);
+ if (n != 0) {
+ generator->PrintString(src.substr(0, n));
+ src.remove_prefix(n);
+ if (src.empty()) break;
+ }
+
+ // If repeated calls to CEscape() and PrintString() are expensive, we could
+ // consider batching them, at the cost of some complexity.
+ generator->PrintString(absl::CEscape(src.substr(0, 1)));
+ src.remove_prefix(1);
+ }
+}
+
+} // namespace
+
// ===========================================================================
// An internal field value printer that escape UTF8 strings.
class TextFormat::Printer::FastFieldValuePrinterUtf8Escaping
@@ -1645,7 +1743,7 @@
void PrintString(const std::string& val,
TextFormat::BaseTextGenerator* generator) const override {
generator->PrintLiteral("\"");
- generator->PrintString(absl::Utf8SafeCEscape(val));
+ HardenedPrintString(val, generator);
generator->PrintLiteral("\"");
}
void PrintBytes(const std::string& val,
@@ -1727,7 +1825,7 @@
allow_case_insensitive_field_, allow_unknown_field_,
allow_unknown_extension_, allow_unknown_enum_,
allow_field_number_, allow_relaxed_whitespace_,
- allow_partial_, recursion_limit_, error_on_no_op_fields_);
+ allow_partial_, recursion_limit_, no_op_fields_);
return MergeUsingImpl(input, output, &parser);
}
@@ -1752,7 +1850,7 @@
allow_case_insensitive_field_, allow_unknown_field_,
allow_unknown_extension_, allow_unknown_enum_,
allow_field_number_, allow_relaxed_whitespace_,
- allow_partial_, recursion_limit_, error_on_no_op_fields_);
+ allow_partial_, recursion_limit_, no_op_fields_);
return MergeUsingImpl(input, output, &parser);
}
@@ -1788,7 +1886,7 @@
allow_case_insensitive_field_, allow_unknown_field_,
allow_unknown_extension_, allow_unknown_enum_,
allow_field_number_, allow_relaxed_whitespace_,
- allow_partial_, recursion_limit_, error_on_no_op_fields_);
+ allow_partial_, recursion_limit_, no_op_fields_);
return parser.ParseField(field, output);
}
@@ -1946,7 +2044,9 @@
void TextFormat::FastFieldValuePrinter::PrintString(
const std::string& val, BaseTextGenerator* generator) const {
generator->PrintLiteral("\"");
- generator->PrintString(absl::CEscape(val));
+ if (!val.empty()) {
+ generator->PrintString(absl::CEscape(val));
+ }
generator->PrintLiteral("\"");
}
void TextFormat::FastFieldValuePrinter::PrintBytes(
diff --git a/src/google/protobuf/text_format.h b/src/google/protobuf/text_format.h
index f851c91..f80aefb 100644
--- a/src/google/protobuf/text_format.h
+++ b/src/google/protobuf/text_format.h
@@ -21,6 +21,7 @@
#include <vector>
#include "absl/container/flat_hash_map.h"
+#include "absl/container/flat_hash_set.h"
#include "absl/strings/cord.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/descriptor.h"
@@ -65,7 +66,10 @@
kUtf8Format = 8,
kDebugString = 12,
kShortDebugString = 13,
- kUtf8DebugString = 14
+ kUtf8DebugString = 14,
+ kUnredactedDebugFormatForTest = 15,
+ kUnredactedShortDebugFormatForTest = 16,
+ kUnredactedUtf8DebugFormatForTest = 17
};
} // namespace internal
@@ -81,6 +85,9 @@
// Converts a protobuf message to a string with redaction enabled.
PROTOBUF_EXPORT std::string StringifyMessage(const Message& message,
Option option);
+
+class UnsetFieldsMetadataTextFormatTestUtil;
+class UnsetFieldsMetadataMessageDifferencerTestUtil;
} // namespace internal
// This class implements protocol buffer text format, colloquially known as text
@@ -719,11 +726,40 @@
// the maximum allowed nesting of proto messages.
void SetRecursionLimit(int limit) { recursion_limit_ = limit; }
- // If called, the parser will report an error if a parsed field had no
+ // Uniquely addresses fields in a message that was explicitly unset in
+ // textproto. Example:
+ // "some_int_field: 0"
+ // where some_int_field is non-optional.
+ //
+ // This class should only be used to pass data between the text_format
+ // parser and the MessageDifferencer.
+ class UnsetFieldsMetadata {
+ public:
+ UnsetFieldsMetadata() = default;
+
+ private:
+ // Return a pointer to the unset field in the given message.
+ static const void* GetUnsetFieldAddress(const Message& message,
+ const Reflection& reflection,
+ const FieldDescriptor& fd);
+
+ // List of addresses of explicitly unset proto fields.
+ absl::flat_hash_set<const void*> addresses_;
+
+ friend class ::google::protobuf::internal::
+ UnsetFieldsMetadataMessageDifferencerTestUtil;
+ friend class ::google::protobuf::internal::UnsetFieldsMetadataTextFormatTestUtil;
+ friend class ::google::protobuf::util::MessageDifferencer;
+ friend class ::google::protobuf::TextFormat::Parser;
+ };
+
+ // If called, the parser will report the parsed fields that had no
// effect on the resulting proto (for example, fields with no presence that
- // were set to their default value).
- void ErrorOnNoOpFields(bool return_error) {
- error_on_no_op_fields_ = return_error;
+ // were set to their default value). These can be passed to the Partially()
+ // matcher as an indicator to explicitly check these fields are missing
+ // in the actual.
+ void OutputNoOpFields(UnsetFieldsMetadata* no_op_fields) {
+ no_op_fields_ = no_op_fields;
}
private:
@@ -748,7 +784,7 @@
bool allow_relaxed_whitespace_;
bool allow_singular_overwrites_;
int recursion_limit_;
- bool error_on_no_op_fields_ = false;
+ UnsetFieldsMetadata* no_op_fields_ = nullptr;
};
diff --git a/src/google/protobuf/text_format_unittest.cc b/src/google/protobuf/text_format_unittest.cc
index 9f60c9f..c3b3fd2 100644
--- a/src/google/protobuf/text_format_unittest.cc
+++ b/src/google/protobuf/text_format_unittest.cc
@@ -15,9 +15,11 @@
#include <stdlib.h>
#include <atomic>
+#include <cstdint>
#include <limits>
#include <memory>
#include <string>
+#include <vector>
#include "google/protobuf/testing/file.h"
#include "google/protobuf/testing/file.h"
@@ -34,6 +36,7 @@
#include "absl/strings/str_format.h"
#include "absl/strings/str_replace.h"
#include "absl/strings/substitute.h"
+#include "google/protobuf/descriptor.h"
#include "google/protobuf/io/tokenizer.h"
#include "google/protobuf/io/zero_copy_stream_impl.h"
#include "google/protobuf/map_unittest.pb.h"
@@ -44,6 +47,7 @@
#include "google/protobuf/unittest_mset.pb.h"
#include "google/protobuf/unittest_mset_wire_format.pb.h"
#include "google/protobuf/unittest_proto3.pb.h"
+#include "utf8_validity.h"
// Must be included last.
@@ -52,10 +56,33 @@
namespace google {
namespace protobuf {
+namespace internal {
+class UnsetFieldsMetadataTextFormatTestUtil {
+ public:
+ static std::vector<const void*> GetRawAddresses(
+ const TextFormat::Parser::UnsetFieldsMetadata& metadata) {
+ return std::vector<const void*>(metadata.addresses_.begin(),
+ metadata.addresses_.end());
+ }
+ static const void* GetAddress(const Message& message,
+ const Reflection& reflection,
+ const FieldDescriptor& fd) {
+ return TextFormat::Parser::UnsetFieldsMetadata::GetUnsetFieldAddress(
+ message, reflection, fd);
+ }
+
+ static int32_t NumFields(
+ const TextFormat::Parser::UnsetFieldsMetadata& metadata) {
+ return metadata.addresses_.size();
+ }
+};
+} // namespace internal
+
// Can't use an anonymous namespace here due to brokenness of Tru64 compiler.
namespace text_format_unittest {
using ::google::protobuf::internal::kDebugStringSilentMarker;
+using ::google::protobuf::internal::UnsetFieldsMetadataTextFormatTestUtil;
using ::testing::AllOf;
using ::testing::HasSubstr;
@@ -997,86 +1024,207 @@
EXPECT_EQ(-2147483648, proto.repeated_nested_enum(3));
}
-TEST_F(TextFormatTest, ErrorOnNoOpFieldsProto3) {
+TEST_F(TextFormatTest, PopulatesNoOpFields) {
proto3_unittest::TestAllTypes proto;
TextFormat::Parser parser;
- parser.ErrorOnNoOpFields(true);
+ TextFormat::Parser::UnsetFieldsMetadata no_op_fields;
+ parser.OutputNoOpFields(&no_op_fields);
{
+ no_op_fields = {};
const absl::string_view singular_int_parse_string = "optional_int32: 0";
EXPECT_TRUE(TextFormat::ParseFromString(singular_int_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(singular_int_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(singular_int_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view singular_bool_parse_string = "optional_bool: false";
EXPECT_TRUE(
TextFormat::ParseFromString(singular_bool_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(singular_bool_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(singular_bool_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view singular_string_parse_string =
"optional_string: ''";
EXPECT_TRUE(
TextFormat::ParseFromString(singular_string_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(singular_string_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(singular_string_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view nested_message_parse_string =
"optional_nested_message { bb: 0 } ";
EXPECT_TRUE(
TextFormat::ParseFromString(nested_message_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(nested_message_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(nested_message_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
+ const absl::string_view nested_message_parse_string =
+ "optional_nested_message { bb: 1 } ";
+ EXPECT_TRUE(
+ TextFormat::ParseFromString(nested_message_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(nested_message_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 0);
+ }
+ {
+ no_op_fields = {};
const absl::string_view foreign_message_parse_string =
"optional_foreign_message { c: 0 } ";
EXPECT_TRUE(
TextFormat::ParseFromString(foreign_message_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(foreign_message_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(foreign_message_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view nested_enum_parse_string =
"optional_nested_enum: ZERO ";
EXPECT_TRUE(TextFormat::ParseFromString(nested_enum_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(nested_enum_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(nested_enum_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view foreign_enum_parse_string =
"optional_foreign_enum: FOREIGN_ZERO ";
EXPECT_TRUE(TextFormat::ParseFromString(foreign_enum_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(foreign_enum_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(foreign_enum_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view string_piece_parse_string =
"optional_string_piece: '' ";
EXPECT_TRUE(TextFormat::ParseFromString(string_piece_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(string_piece_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(string_piece_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
const absl::string_view cord_parse_string = "optional_cord: '' ";
EXPECT_TRUE(TextFormat::ParseFromString(cord_parse_string, &proto));
- EXPECT_FALSE(parser.ParseFromString(cord_parse_string, &proto));
+ EXPECT_TRUE(parser.ParseFromString(cord_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
}
{
+ no_op_fields = {};
// Sanity check that repeated fields work the same.
const absl::string_view repeated_int32_parse_string = "repeated_int32: 0 ";
EXPECT_TRUE(
TextFormat::ParseFromString(repeated_int32_parse_string, &proto));
EXPECT_TRUE(parser.ParseFromString(repeated_int32_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 0);
}
{
+ no_op_fields = {};
const absl::string_view repeated_bool_parse_string =
"repeated_bool: false ";
EXPECT_TRUE(
TextFormat::ParseFromString(repeated_bool_parse_string, &proto));
EXPECT_TRUE(parser.ParseFromString(repeated_bool_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 0);
}
{
+ no_op_fields = {};
const absl::string_view repeated_string_parse_string =
"repeated_string: '' ";
EXPECT_TRUE(
TextFormat::ParseFromString(repeated_string_parse_string, &proto));
EXPECT_TRUE(parser.ParseFromString(repeated_string_parse_string, &proto));
+ EXPECT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 0);
+ }
+}
+
+TEST_F(TextFormatTest, FieldsPopulatedCorrectly) {
+ proto3_unittest::TestAllTypes proto;
+ TextFormat::Parser parser;
+ TextFormat::Parser::UnsetFieldsMetadata no_op_fields;
+ parser.OutputNoOpFields(&no_op_fields);
+ {
+ no_op_fields = {};
+ const absl::string_view parse_string = R"pb(
+ optional_int32: 0
+ optional_uint32: 10
+ optional_nested_message { bb: 0 }
+ )pb";
+ EXPECT_TRUE(parser.ParseFromString(parse_string, &proto));
+ ASSERT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 2);
+ std::vector<const void*> ptrs =
+ UnsetFieldsMetadataTextFormatTestUtil::GetRawAddresses(no_op_fields);
+ EXPECT_EQ(*static_cast<const int32_t*>(ptrs[0]), 0);
+ EXPECT_EQ(*static_cast<const int32_t*>(ptrs[1]), 0);
+ proto.set_optional_int32(20);
+ proto.mutable_optional_nested_message()->set_bb(30);
+ const std::vector<int32_t> new_values{
+ *static_cast<const int32_t*>(ptrs[0]),
+ *static_cast<const int32_t*>(ptrs[1])};
+ EXPECT_THAT(new_values, testing::UnorderedElementsAre(20, 30));
+ }
+ {
+ no_op_fields = {};
+ const absl::string_view parse_string = R"pb(
+ optional_bool: false
+ optional_uint32: 10
+ optional_nested_message { bb: 20 }
+ )pb";
+ EXPECT_TRUE(parser.ParseFromString(parse_string, &proto));
+ ASSERT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
+ std::vector<const void*> ptrs =
+ UnsetFieldsMetadataTextFormatTestUtil::GetRawAddresses(no_op_fields);
+ EXPECT_EQ(*static_cast<const bool*>(ptrs[0]), false);
+ proto.set_optional_bool(true);
+ EXPECT_EQ(*static_cast<const bool*>(ptrs[0]), true);
+ }
+ {
+ // The address returned by the field is a string_view, which is a separate
+ // alocation. Check address directly.
+ no_op_fields = {};
+ const absl::string_view parse_string = "optional_string: \"\"";
+ EXPECT_TRUE(parser.ParseFromString(parse_string, &proto));
+ ASSERT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
+ const Reflection* reflection = proto.GetReflection();
+ const FieldDescriptor* field = proto.GetDescriptor()->FindFieldByNumber(14);
+ EXPECT_EQ(
+ UnsetFieldsMetadataTextFormatTestUtil::GetRawAddresses(no_op_fields)[0],
+ UnsetFieldsMetadataTextFormatTestUtil::GetAddress(proto, *reflection,
+ *field));
+ }
+ {
+ // The address returned by the field is a string_view, which is a separate
+ // alocation. Check address directly.
+ no_op_fields = {};
+ const absl::string_view parse_string = "optional_bytes: \"\"";
+ EXPECT_TRUE(parser.ParseFromString(parse_string, &proto));
+ ASSERT_EQ(UnsetFieldsMetadataTextFormatTestUtil::NumFields(no_op_fields),
+ 1);
+ const Reflection* reflection = proto.GetReflection();
+ const FieldDescriptor* field = proto.GetDescriptor()->FindFieldByNumber(15);
+ EXPECT_EQ(
+ UnsetFieldsMetadataTextFormatTestUtil::GetRawAddresses(no_op_fields)[0],
+ UnsetFieldsMetadataTextFormatTestUtil::GetAddress(proto, *reflection,
+ *field));
}
}
diff --git a/src/google/protobuf/timestamp.pb.cc b/src/google/protobuf/timestamp.pb.cc
index a0b7ee9..a60d9e7 100644
--- a/src/google/protobuf/timestamp.pb.cc
+++ b/src/google/protobuf/timestamp.pb.cc
@@ -115,9 +115,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2ftimestamp_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2ftimestamp_2eproto(&descriptor_table_google_2fprotobuf_2ftimestamp_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -162,12 +159,15 @@
const ::google::protobuf::MessageLite::ClassData*
Timestamp::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Timestamp::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Timestamp, _impl_._cached_size_),
+ false,
+ },
+ &Timestamp::MergeImpl,
+ &Timestamp::kDescriptorMethods,
};
return &_data_;
}
@@ -284,7 +284,7 @@
}
-void Timestamp::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Timestamp::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Timestamp*>(&to_msg);
auto& from = static_cast<const Timestamp&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Timestamp)
@@ -293,10 +293,10 @@
(void) cached_has_bits;
if (from._internal_seconds() != 0) {
- _this->_internal_set_seconds(from._internal_seconds());
+ _this->_impl_.seconds_ = from._impl_.seconds_;
}
if (from._internal_nanos() != 0) {
- _this->_internal_set_nanos(from._internal_nanos());
+ _this->_impl_.nanos_ = from._impl_.nanos_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -324,9 +324,9 @@
}
::google::protobuf::Metadata Timestamp::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ftimestamp_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ftimestamp_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ftimestamp_2eproto[0]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -336,4 +336,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2ftimestamp_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/timestamp.pb.h b/src/google/protobuf/timestamp.pb.h
index 74ff9c6..e987282 100644
--- a/src/google/protobuf/timestamp.pb.h
+++ b/src/google/protobuf/timestamp.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -71,21 +65,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Timestamp final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Timestamp) */ {
+class PROTOBUF_EXPORT Timestamp final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Timestamp) */ {
public:
inline Timestamp() : Timestamp(nullptr) {}
~Timestamp() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Timestamp(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Timestamp(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Timestamp(const Timestamp& from)
- : Timestamp(nullptr, from) {}
- Timestamp(Timestamp&& from) noexcept
- : Timestamp() {
- *this = ::std::move(from);
- }
-
+ inline Timestamp(const Timestamp& from) : Timestamp(nullptr, from) {}
+ inline Timestamp(Timestamp&& from) noexcept
+ : Timestamp(nullptr, std::move(from)) {}
inline Timestamp& operator=(const Timestamp& from) {
CopyFrom(from);
return *this;
@@ -93,9 +84,9 @@
inline Timestamp& operator=(Timestamp&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -127,22 +118,17 @@
}
static inline const Timestamp* internal_default_instance() {
return reinterpret_cast<const Timestamp*>(
- &_Timestamp_default_instance_);
+ &_Timestamp_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(Timestamp& a, Timestamp& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(Timestamp& a, Timestamp& b) { a.Swap(&b); }
inline void Swap(Timestamp* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -162,11 +148,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Timestamp& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Timestamp& from) {
- Timestamp::MergeImpl(*this, from);
- }
+ void MergeFrom(const Timestamp& from) { Timestamp::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -174,31 +162,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Timestamp* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Timestamp";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Timestamp"; }
+
+ protected:
explicit Timestamp(::google::protobuf::Arena* arena);
Timestamp(::google::protobuf::Arena* arena, const Timestamp& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Timestamp(::google::protobuf::Arena* arena, Timestamp&& from) noexcept
+ : Timestamp(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kSecondsFieldNumber = 1,
kNanosFieldNumber = 2,
@@ -226,7 +216,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Timestamp)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 0,
@@ -238,14 +227,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::int64_t seconds_;
::int32_t nanos_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
@@ -290,7 +278,6 @@
}
inline void Timestamp::_internal_set_seconds(::int64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.seconds_ = value;
}
@@ -313,7 +300,6 @@
}
inline void Timestamp::_internal_set_nanos(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.nanos_ = value;
}
diff --git a/src/google/protobuf/type.pb.cc b/src/google/protobuf/type.pb.cc
index a49f5dc..fac8493 100644
--- a/src/google/protobuf/type.pb.cc
+++ b/src/google/protobuf/type.pb.cc
@@ -354,9 +354,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2ftype_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2ftype_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2ftype_2eproto(&descriptor_table_google_2fprotobuf_2ftype_2eproto);
namespace google {
namespace protobuf {
const ::google::protobuf::EnumDescriptor* Field_Kind_descriptor() {
@@ -434,15 +431,8 @@
using HasBits = decltype(std::declval<Type>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(Type, _impl_._has_bits_);
- static const ::google::protobuf::SourceContext& source_context(const Type* msg);
- static void set_has_source_context(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::SourceContext& Type::_Internal::source_context(const Type* msg) {
- return *msg->_impl_.source_context_;
-}
void Type::clear_source_context() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
if (_impl_.source_context_ != nullptr) _impl_.source_context_->Clear();
@@ -515,12 +505,15 @@
const ::google::protobuf::MessageLite::ClassData*
Type::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Type::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Type, _impl_._cached_size_),
+ false,
+ },
+ &Type::MergeImpl,
+ &Type::kDescriptorMethods,
};
return &_data_;
}
@@ -673,8 +666,7 @@
// .google.protobuf.SourceContext source_context = 5;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 5, _Internal::source_context(this),
- _Internal::source_context(this).GetCachedSize(), target, stream);
+ 5, *_impl_.source_context_, _impl_.source_context_->GetCachedSize(), target, stream);
}
// .google.protobuf.Syntax syntax = 6;
@@ -756,7 +748,7 @@
}
-void Type::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Type::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Type*>(&to_msg);
auto& from = static_cast<const Type&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -776,7 +768,8 @@
if (!from._internal_edition().empty()) {
_this->_internal_set_edition(from._internal_edition());
}
- if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) {
+ cached_has_bits = from._impl_._has_bits_[0];
+ if (cached_has_bits & 0x00000001u) {
ABSL_DCHECK(from._impl_.source_context_ != nullptr);
if (_this->_impl_.source_context_ == nullptr) {
_this->_impl_.source_context_ =
@@ -784,11 +777,11 @@
} else {
_this->_impl_.source_context_->MergeFrom(*from._impl_.source_context_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (from._internal_syntax() != 0) {
- _this->_internal_set_syntax(from._internal_syntax());
+ _this->_impl_.syntax_ = from._impl_.syntax_;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -823,9 +816,9 @@
}
::google::protobuf::Metadata Type::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ftype_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ftype_2eproto[0]);
}
// ===================================================================
@@ -902,12 +895,15 @@
const ::google::protobuf::MessageLite::ClassData*
Field::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Field::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Field, _impl_._cached_size_),
+ false,
+ },
+ &Field::MergeImpl,
+ &Field::kDescriptorMethods,
};
return &_data_;
}
@@ -1197,7 +1193,7 @@
}
-void Field::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Field::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Field*>(&to_msg);
auto& from = static_cast<const Field&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Field)
@@ -1220,19 +1216,19 @@
_this->_internal_set_default_value(from._internal_default_value());
}
if (from._internal_kind() != 0) {
- _this->_internal_set_kind(from._internal_kind());
+ _this->_impl_.kind_ = from._impl_.kind_;
}
if (from._internal_cardinality() != 0) {
- _this->_internal_set_cardinality(from._internal_cardinality());
+ _this->_impl_.cardinality_ = from._impl_.cardinality_;
}
if (from._internal_number() != 0) {
- _this->_internal_set_number(from._internal_number());
+ _this->_impl_.number_ = from._impl_.number_;
}
if (from._internal_oneof_index() != 0) {
- _this->_internal_set_oneof_index(from._internal_oneof_index());
+ _this->_impl_.oneof_index_ = from._impl_.oneof_index_;
}
if (from._internal_packed() != 0) {
- _this->_internal_set_packed(from._internal_packed());
+ _this->_impl_.packed_ = from._impl_.packed_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1267,9 +1263,9 @@
}
::google::protobuf::Metadata Field::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ftype_2eproto[1]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ftype_2eproto[1]);
}
// ===================================================================
@@ -1278,15 +1274,8 @@
using HasBits = decltype(std::declval<Enum>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(Enum, _impl_._has_bits_);
- static const ::google::protobuf::SourceContext& source_context(const Enum* msg);
- static void set_has_source_context(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::SourceContext& Enum::_Internal::source_context(const Enum* msg) {
- return *msg->_impl_.source_context_;
-}
void Enum::clear_source_context() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
if (_impl_.source_context_ != nullptr) _impl_.source_context_->Clear();
@@ -1357,12 +1346,15 @@
const ::google::protobuf::MessageLite::ClassData*
Enum::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Enum::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Enum, _impl_._cached_size_),
+ false,
+ },
+ &Enum::MergeImpl,
+ &Enum::kDescriptorMethods,
};
return &_data_;
}
@@ -1500,8 +1492,7 @@
// .google.protobuf.SourceContext source_context = 4;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 4, _Internal::source_context(this),
- _Internal::source_context(this).GetCachedSize(), target, stream);
+ 4, *_impl_.source_context_, _impl_.source_context_->GetCachedSize(), target, stream);
}
// .google.protobuf.Syntax syntax = 5;
@@ -1577,7 +1568,7 @@
}
-void Enum::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Enum::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Enum*>(&to_msg);
auto& from = static_cast<const Enum&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -1596,7 +1587,8 @@
if (!from._internal_edition().empty()) {
_this->_internal_set_edition(from._internal_edition());
}
- if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) {
+ cached_has_bits = from._impl_._has_bits_[0];
+ if (cached_has_bits & 0x00000001u) {
ABSL_DCHECK(from._impl_.source_context_ != nullptr);
if (_this->_impl_.source_context_ == nullptr) {
_this->_impl_.source_context_ =
@@ -1604,11 +1596,11 @@
} else {
_this->_impl_.source_context_->MergeFrom(*from._impl_.source_context_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
if (from._internal_syntax() != 0) {
- _this->_internal_set_syntax(from._internal_syntax());
+ _this->_impl_.syntax_ = from._impl_.syntax_;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1642,9 +1634,9 @@
}
::google::protobuf::Metadata Enum::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ftype_2eproto[2]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ftype_2eproto[2]);
}
// ===================================================================
@@ -1701,12 +1693,15 @@
const ::google::protobuf::MessageLite::ClassData*
EnumValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- EnumValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(EnumValue, _impl_._cached_size_),
+ false,
+ },
+ &EnumValue::MergeImpl,
+ &EnumValue::kDescriptorMethods,
};
return &_data_;
}
@@ -1848,7 +1843,7 @@
}
-void EnumValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void EnumValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<EnumValue*>(&to_msg);
auto& from = static_cast<const EnumValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.EnumValue)
@@ -1862,7 +1857,7 @@
_this->_internal_set_name(from._internal_name());
}
if (from._internal_number() != 0) {
- _this->_internal_set_number(from._internal_number());
+ _this->_impl_.number_ = from._impl_.number_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1889,9 +1884,9 @@
}
::google::protobuf::Metadata EnumValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ftype_2eproto[3]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ftype_2eproto[3]);
}
// ===================================================================
@@ -1900,15 +1895,8 @@
using HasBits = decltype(std::declval<Option>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(Option, _impl_._has_bits_);
- static const ::google::protobuf::Any& value(const Option* msg);
- static void set_has_value(HasBits* has_bits) {
- (*has_bits)[0] |= 1u;
- }
};
-const ::google::protobuf::Any& Option::_Internal::value(const Option* msg) {
- return *msg->_impl_.value_;
-}
void Option::clear_value() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
if (_impl_.value_ != nullptr) _impl_.value_->Clear();
@@ -1966,12 +1954,15 @@
const ::google::protobuf::MessageLite::ClassData*
Option::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Option::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Option, _impl_._cached_size_),
+ false,
+ },
+ &Option::MergeImpl,
+ &Option::kDescriptorMethods,
};
return &_data_;
}
@@ -2060,8 +2051,7 @@
// .google.protobuf.Any value = 2;
if (cached_has_bits & 0x00000001u) {
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
- 2, _Internal::value(this),
- _Internal::value(this).GetCachedSize(), target, stream);
+ 2, *_impl_.value_, _impl_.value_->GetCachedSize(), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -2098,7 +2088,7 @@
}
-void Option::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Option::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Option*>(&to_msg);
auto& from = static_cast<const Option&>(from_msg);
::google::protobuf::Arena* arena = _this->GetArena();
@@ -2110,7 +2100,8 @@
if (!from._internal_name().empty()) {
_this->_internal_set_name(from._internal_name());
}
- if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) {
+ cached_has_bits = from._impl_._has_bits_[0];
+ if (cached_has_bits & 0x00000001u) {
ABSL_DCHECK(from._impl_.value_ != nullptr);
if (_this->_impl_.value_ == nullptr) {
_this->_impl_.value_ =
@@ -2118,8 +2109,8 @@
} else {
_this->_impl_.value_->MergeFrom(*from._impl_.value_);
}
- _this->_impl_._has_bits_[0] |= 0x00000001u;
}
+ _this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -2145,9 +2136,9 @@
}
::google::protobuf::Metadata Option::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2ftype_2eproto_getter, &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
- file_level_metadata_google_2fprotobuf_2ftype_2eproto[4]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2ftype_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2ftype_2eproto[4]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -2157,4 +2148,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/type.pb.h b/src/google/protobuf/type.pb.h
index c8efb90..5d0e4b3 100644
--- a/src/google/protobuf/type.pb.h
+++ b/src/google/protobuf/type.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -205,21 +199,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Option final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Option) */ {
+class PROTOBUF_EXPORT Option final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Option) */ {
public:
inline Option() : Option(nullptr) {}
~Option() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Option(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Option(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Option(const Option& from)
- : Option(nullptr, from) {}
- Option(Option&& from) noexcept
- : Option() {
- *this = ::std::move(from);
- }
-
+ inline Option(const Option& from) : Option(nullptr, from) {}
+ inline Option(Option&& from) noexcept
+ : Option(nullptr, std::move(from)) {}
inline Option& operator=(const Option& from) {
CopyFrom(from);
return *this;
@@ -227,9 +218,9 @@
inline Option& operator=(Option&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -261,22 +252,17 @@
}
static inline const Option* internal_default_instance() {
return reinterpret_cast<const Option*>(
- &_Option_default_instance_);
+ &_Option_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 4;
-
- friend void swap(Option& a, Option& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 4;
+ friend void swap(Option& a, Option& b) { a.Swap(&b); }
inline void Swap(Option* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -296,11 +282,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Option& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Option& from) {
- Option::MergeImpl(*this, from);
- }
+ void MergeFrom(const Option& from) { Option::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -308,31 +296,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Option* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Option";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Option"; }
+
+ protected:
explicit Option(::google::protobuf::Arena* arena);
Option(::google::protobuf::Arena* arena, const Option& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Option(::google::protobuf::Arena* arena, Option&& from) noexcept
+ : Option(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kNameFieldNumber = 1,
kValueFieldNumber = 2,
@@ -371,7 +361,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Option)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
1, 2, 1,
@@ -383,14 +372,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::internal::ArenaStringPtr name_;
@@ -399,23 +387,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Field final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Field) */ {
+class PROTOBUF_EXPORT Field final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Field) */ {
public:
inline Field() : Field(nullptr) {}
~Field() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Field(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Field(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Field(const Field& from)
- : Field(nullptr, from) {}
- Field(Field&& from) noexcept
- : Field() {
- *this = ::std::move(from);
- }
-
+ inline Field(const Field& from) : Field(nullptr, from) {}
+ inline Field(Field&& from) noexcept
+ : Field(nullptr, std::move(from)) {}
inline Field& operator=(const Field& from) {
CopyFrom(from);
return *this;
@@ -423,9 +409,9 @@
inline Field& operator=(Field&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -457,22 +443,17 @@
}
static inline const Field* internal_default_instance() {
return reinterpret_cast<const Field*>(
- &_Field_default_instance_);
+ &_Field_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 1;
-
- friend void swap(Field& a, Field& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 1;
+ friend void swap(Field& a, Field& b) { a.Swap(&b); }
inline void Swap(Field* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -492,11 +473,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Field& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Field& from) {
- Field::MergeImpl(*this, from);
- }
+ void MergeFrom(const Field& from) { Field::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -504,29 +487,31 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Field* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Field";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Field"; }
+
+ protected:
explicit Field(::google::protobuf::Arena* arena);
Field(::google::protobuf::Arena* arena, const Field& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Field(::google::protobuf::Arena* arena, Field&& from) noexcept
+ : Field(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
-
using Kind = Field_Kind;
static constexpr Kind TYPE_UNKNOWN = Field_Kind_TYPE_UNKNOWN;
static constexpr Kind TYPE_DOUBLE = Field_Kind_TYPE_DOUBLE;
@@ -563,7 +548,6 @@
static inline bool Kind_Parse(absl::string_view name, Kind* value) {
return Field_Kind_Parse(name, value);
}
-
using Cardinality = Field_Cardinality;
static constexpr Cardinality CARDINALITY_UNKNOWN = Field_Cardinality_CARDINALITY_UNKNOWN;
static constexpr Cardinality CARDINALITY_OPTIONAL = Field_Cardinality_CARDINALITY_OPTIONAL;
@@ -587,7 +571,6 @@
}
// accessors -------------------------------------------------------
-
enum : int {
kOptionsFieldNumber = 9,
kNameFieldNumber = 4,
@@ -608,16 +591,15 @@
public:
void clear_options() ;
::google::protobuf::Option* mutable_options(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >*
- mutable_options();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* mutable_options();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& _internal_options() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* _internal_mutable_options();
public:
const ::google::protobuf::Option& options(int index) const;
::google::protobuf::Option* add_options();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >&
- options() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& options() const;
// string name = 4;
void clear_name() ;
const std::string& name() const;
@@ -735,7 +717,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Field)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
4, 10, 1,
@@ -747,14 +728,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::Option > options_;
::google::protobuf::internal::ArenaStringPtr name_;
::google::protobuf::internal::ArenaStringPtr type_url_;
@@ -770,23 +750,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT EnumValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumValue) */ {
+class PROTOBUF_EXPORT EnumValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.EnumValue) */ {
public:
inline EnumValue() : EnumValue(nullptr) {}
~EnumValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR EnumValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR EnumValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline EnumValue(const EnumValue& from)
- : EnumValue(nullptr, from) {}
- EnumValue(EnumValue&& from) noexcept
- : EnumValue() {
- *this = ::std::move(from);
- }
-
+ inline EnumValue(const EnumValue& from) : EnumValue(nullptr, from) {}
+ inline EnumValue(EnumValue&& from) noexcept
+ : EnumValue(nullptr, std::move(from)) {}
inline EnumValue& operator=(const EnumValue& from) {
CopyFrom(from);
return *this;
@@ -794,9 +772,9 @@
inline EnumValue& operator=(EnumValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -828,22 +806,17 @@
}
static inline const EnumValue* internal_default_instance() {
return reinterpret_cast<const EnumValue*>(
- &_EnumValue_default_instance_);
+ &_EnumValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 3;
-
- friend void swap(EnumValue& a, EnumValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 3;
+ friend void swap(EnumValue& a, EnumValue& b) { a.Swap(&b); }
inline void Swap(EnumValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -863,11 +836,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const EnumValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const EnumValue& from) {
- EnumValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const EnumValue& from) { EnumValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -875,31 +850,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(EnumValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.EnumValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.EnumValue"; }
+
+ protected:
explicit EnumValue(::google::protobuf::Arena* arena);
EnumValue(::google::protobuf::Arena* arena, const EnumValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ EnumValue(::google::protobuf::Arena* arena, EnumValue&& from) noexcept
+ : EnumValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kOptionsFieldNumber = 3,
kNameFieldNumber = 1,
@@ -913,16 +890,15 @@
public:
void clear_options() ;
::google::protobuf::Option* mutable_options(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >*
- mutable_options();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* mutable_options();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& _internal_options() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* _internal_mutable_options();
public:
const ::google::protobuf::Option& options(int index) const;
::google::protobuf::Option* add_options();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >&
- options() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& options() const;
// string name = 1;
void clear_name() ;
const std::string& name() const;
@@ -952,7 +928,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.EnumValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
2, 3, 1,
@@ -964,14 +939,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::RepeatedPtrField< ::google::protobuf::Option > options_;
::google::protobuf::internal::ArenaStringPtr name_;
::int32_t number_;
@@ -980,23 +954,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Type final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Type) */ {
+class PROTOBUF_EXPORT Type final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Type) */ {
public:
inline Type() : Type(nullptr) {}
~Type() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Type(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Type(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Type(const Type& from)
- : Type(nullptr, from) {}
- Type(Type&& from) noexcept
- : Type() {
- *this = ::std::move(from);
- }
-
+ inline Type(const Type& from) : Type(nullptr, from) {}
+ inline Type(Type&& from) noexcept
+ : Type(nullptr, std::move(from)) {}
inline Type& operator=(const Type& from) {
CopyFrom(from);
return *this;
@@ -1004,9 +976,9 @@
inline Type& operator=(Type&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1038,22 +1010,17 @@
}
static inline const Type* internal_default_instance() {
return reinterpret_cast<const Type*>(
- &_Type_default_instance_);
+ &_Type_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(Type& a, Type& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(Type& a, Type& b) { a.Swap(&b); }
inline void Swap(Type* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1073,11 +1040,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Type& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Type& from) {
- Type::MergeImpl(*this, from);
- }
+ void MergeFrom(const Type& from) { Type::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1085,31 +1054,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Type* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Type";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Type"; }
+
+ protected:
explicit Type(::google::protobuf::Arena* arena);
Type(::google::protobuf::Arena* arena, const Type& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Type(::google::protobuf::Arena* arena, Type&& from) noexcept
+ : Type(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kFieldsFieldNumber = 2,
kOneofsFieldNumber = 3,
@@ -1127,16 +1098,15 @@
public:
void clear_fields() ;
::google::protobuf::Field* mutable_fields(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Field >*
- mutable_fields();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Field>* mutable_fields();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Field>& _internal_fields() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Field>* _internal_mutable_fields();
public:
const ::google::protobuf::Field& fields(int index) const;
::google::protobuf::Field* add_fields();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Field >&
- fields() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Field>& fields() const;
// repeated string oneofs = 3;
int oneofs_size() const;
private:
@@ -1173,16 +1143,15 @@
public:
void clear_options() ;
::google::protobuf::Option* mutable_options(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >*
- mutable_options();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* mutable_options();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& _internal_options() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* _internal_mutable_options();
public:
const ::google::protobuf::Option& options(int index) const;
::google::protobuf::Option* add_options();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >&
- options() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& options() const;
// string name = 1;
void clear_name() ;
const std::string& name() const;
@@ -1243,7 +1212,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Type)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 7, 3,
@@ -1255,14 +1223,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::Field > fields_;
@@ -1276,23 +1243,21 @@
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Enum final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Enum) */ {
+class PROTOBUF_EXPORT Enum final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Enum) */ {
public:
inline Enum() : Enum(nullptr) {}
~Enum() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Enum(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Enum(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Enum(const Enum& from)
- : Enum(nullptr, from) {}
- Enum(Enum&& from) noexcept
- : Enum() {
- *this = ::std::move(from);
- }
-
+ inline Enum(const Enum& from) : Enum(nullptr, from) {}
+ inline Enum(Enum&& from) noexcept
+ : Enum(nullptr, std::move(from)) {}
inline Enum& operator=(const Enum& from) {
CopyFrom(from);
return *this;
@@ -1300,9 +1265,9 @@
inline Enum& operator=(Enum&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1334,22 +1299,17 @@
}
static inline const Enum* internal_default_instance() {
return reinterpret_cast<const Enum*>(
- &_Enum_default_instance_);
+ &_Enum_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 2;
-
- friend void swap(Enum& a, Enum& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 2;
+ friend void swap(Enum& a, Enum& b) { a.Swap(&b); }
inline void Swap(Enum* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1369,11 +1329,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Enum& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Enum& from) {
- Enum::MergeImpl(*this, from);
- }
+ void MergeFrom(const Enum& from) { Enum::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1381,31 +1343,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Enum* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Enum";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Enum"; }
+
+ protected:
explicit Enum(::google::protobuf::Arena* arena);
Enum(::google::protobuf::Arena* arena, const Enum& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Enum(::google::protobuf::Arena* arena, Enum&& from) noexcept
+ : Enum(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kEnumvalueFieldNumber = 2,
kOptionsFieldNumber = 3,
@@ -1422,16 +1386,15 @@
public:
void clear_enumvalue() ;
::google::protobuf::EnumValue* mutable_enumvalue(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValue >*
- mutable_enumvalue();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValue>* mutable_enumvalue();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValue>& _internal_enumvalue() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValue>* _internal_mutable_enumvalue();
public:
const ::google::protobuf::EnumValue& enumvalue(int index) const;
::google::protobuf::EnumValue* add_enumvalue();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValue >&
- enumvalue() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::EnumValue>& enumvalue() const;
// repeated .google.protobuf.Option options = 3;
int options_size() const;
private:
@@ -1440,16 +1403,15 @@
public:
void clear_options() ;
::google::protobuf::Option* mutable_options(int index);
- ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >*
- mutable_options();
+ ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* mutable_options();
+
private:
const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& _internal_options() const;
::google::protobuf::RepeatedPtrField<::google::protobuf::Option>* _internal_mutable_options();
public:
const ::google::protobuf::Option& options(int index) const;
::google::protobuf::Option* add_options();
- const ::google::protobuf::RepeatedPtrField< ::google::protobuf::Option >&
- options() const;
+ const ::google::protobuf::RepeatedPtrField<::google::protobuf::Option>& options() const;
// string name = 1;
void clear_name() ;
const std::string& name() const;
@@ -1510,7 +1472,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Enum)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
3, 6, 3,
@@ -1522,14 +1483,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::HasBits<1> _has_bits_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValue > enumvalue_;
@@ -1574,7 +1534,6 @@
inline PROTOBUF_ALWAYS_INLINE void Type::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Type.name)
}
@@ -1589,12 +1548,10 @@
}
inline void Type::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Type::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Type::release_name() {
@@ -1710,8 +1667,8 @@
// @@protoc_insertion_point(field_set_pointer:google.protobuf.Type.oneofs)
}
inline void Type::set_oneofs(int index, absl::string_view value) {
- _internal_mutable_oneofs()->Mutable(index)->assign(value.data(),
- value.size());
+ _internal_mutable_oneofs()->Mutable(index)->assign(
+ value.data(), value.size());
// @@protoc_insertion_point(field_set_string_piece:google.protobuf.Type.oneofs)
}
inline void Type::add_oneofs(const std::string& value) {
@@ -1738,7 +1695,8 @@
}
inline void Type::add_oneofs(absl::string_view value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _internal_mutable_oneofs()->Add()->assign(value.data(), value.size());
+ _internal_mutable_oneofs()->Add()->assign(value.data(),
+ value.size());
// @@protoc_insertion_point(field_add_string_piece:google.protobuf.Type.oneofs)
}
inline const ::google::protobuf::RepeatedPtrField<std::string>&
@@ -1870,7 +1828,6 @@
}
inline ::google::protobuf::SourceContext* Type::_internal_mutable_source_context() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.source_context_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::SourceContext>(GetArena());
_impl_.source_context_ = reinterpret_cast<::google::protobuf::SourceContext*>(p);
@@ -1878,6 +1835,7 @@
return _impl_.source_context_;
}
inline ::google::protobuf::SourceContext* Type::mutable_source_context() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::SourceContext* _msg = _internal_mutable_source_context();
// @@protoc_insertion_point(field_mutable:google.protobuf.Type.source_context)
return _msg;
@@ -1922,7 +1880,6 @@
}
inline void Type::_internal_set_syntax(::google::protobuf::Syntax value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.syntax_ = value;
}
@@ -1940,7 +1897,6 @@
inline PROTOBUF_ALWAYS_INLINE void Type::set_edition(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.edition_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Type.edition)
}
@@ -1955,12 +1911,10 @@
}
inline void Type::_internal_set_edition(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.edition_.Set(value, GetArena());
}
inline std::string* Type::_internal_mutable_edition() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.edition_.Mutable( GetArena());
}
inline std::string* Type::release_edition() {
@@ -2002,7 +1956,6 @@
}
inline void Field::_internal_set_kind(::google::protobuf::Field_Kind value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.kind_ = value;
}
@@ -2025,7 +1978,6 @@
}
inline void Field::_internal_set_cardinality(::google::protobuf::Field_Cardinality value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.cardinality_ = value;
}
@@ -2048,7 +2000,6 @@
}
inline void Field::_internal_set_number(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.number_ = value;
}
@@ -2066,7 +2017,6 @@
inline PROTOBUF_ALWAYS_INLINE void Field::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.name)
}
@@ -2081,12 +2031,10 @@
}
inline void Field::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Field::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Field::release_name() {
@@ -2119,7 +2067,6 @@
inline PROTOBUF_ALWAYS_INLINE void Field::set_type_url(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.type_url_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.type_url)
}
@@ -2134,12 +2081,10 @@
}
inline void Field::_internal_set_type_url(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.type_url_.Set(value, GetArena());
}
inline std::string* Field::_internal_mutable_type_url() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.type_url_.Mutable( GetArena());
}
inline std::string* Field::release_type_url() {
@@ -2177,7 +2122,6 @@
}
inline void Field::_internal_set_oneof_index(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.oneof_index_ = value;
}
@@ -2200,7 +2144,6 @@
}
inline void Field::_internal_set_packed(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.packed_ = value;
}
@@ -2267,7 +2210,6 @@
inline PROTOBUF_ALWAYS_INLINE void Field::set_json_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.json_name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.json_name)
}
@@ -2282,12 +2224,10 @@
}
inline void Field::_internal_set_json_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.json_name_.Set(value, GetArena());
}
inline std::string* Field::_internal_mutable_json_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.json_name_.Mutable( GetArena());
}
inline std::string* Field::release_json_name() {
@@ -2320,7 +2260,6 @@
inline PROTOBUF_ALWAYS_INLINE void Field::set_default_value(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.default_value_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Field.default_value)
}
@@ -2335,12 +2274,10 @@
}
inline void Field::_internal_set_default_value(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.default_value_.Set(value, GetArena());
}
inline std::string* Field::_internal_mutable_default_value() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.default_value_.Mutable( GetArena());
}
inline std::string* Field::release_default_value() {
@@ -2377,7 +2314,6 @@
inline PROTOBUF_ALWAYS_INLINE void Enum::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Enum.name)
}
@@ -2392,12 +2328,10 @@
}
inline void Enum::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Enum::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Enum::release_name() {
@@ -2572,7 +2506,6 @@
}
inline ::google::protobuf::SourceContext* Enum::_internal_mutable_source_context() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.source_context_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::SourceContext>(GetArena());
_impl_.source_context_ = reinterpret_cast<::google::protobuf::SourceContext*>(p);
@@ -2580,6 +2513,7 @@
return _impl_.source_context_;
}
inline ::google::protobuf::SourceContext* Enum::mutable_source_context() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::SourceContext* _msg = _internal_mutable_source_context();
// @@protoc_insertion_point(field_mutable:google.protobuf.Enum.source_context)
return _msg;
@@ -2624,7 +2558,6 @@
}
inline void Enum::_internal_set_syntax(::google::protobuf::Syntax value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.syntax_ = value;
}
@@ -2642,7 +2575,6 @@
inline PROTOBUF_ALWAYS_INLINE void Enum::set_edition(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.edition_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Enum.edition)
}
@@ -2657,12 +2589,10 @@
}
inline void Enum::_internal_set_edition(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.edition_.Set(value, GetArena());
}
inline std::string* Enum::_internal_mutable_edition() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.edition_.Mutable( GetArena());
}
inline std::string* Enum::release_edition() {
@@ -2699,7 +2629,6 @@
inline PROTOBUF_ALWAYS_INLINE void EnumValue::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.EnumValue.name)
}
@@ -2714,12 +2643,10 @@
}
inline void EnumValue::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* EnumValue::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* EnumValue::release_name() {
@@ -2757,7 +2684,6 @@
}
inline void EnumValue::_internal_set_number(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.number_ = value;
}
@@ -2828,7 +2754,6 @@
inline PROTOBUF_ALWAYS_INLINE void Option::set_name(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.Option.name)
}
@@ -2843,12 +2768,10 @@
}
inline void Option::_internal_set_name(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.name_.Set(value, GetArena());
}
inline std::string* Option::_internal_mutable_name() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.name_.Mutable( GetArena());
}
inline std::string* Option::release_name() {
@@ -2925,7 +2848,6 @@
}
inline ::google::protobuf::Any* Option::_internal_mutable_value() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- _impl_._has_bits_[0] |= 0x00000001u;
if (_impl_.value_ == nullptr) {
auto* p = ::google::protobuf::Message::DefaultConstruct<::google::protobuf::Any>(GetArena());
_impl_.value_ = reinterpret_cast<::google::protobuf::Any*>(p);
@@ -2933,6 +2855,7 @@
return _impl_.value_;
}
inline ::google::protobuf::Any* Option::mutable_value() ABSL_ATTRIBUTE_LIFETIME_BOUND {
+ _impl_._has_bits_[0] |= 0x00000001u;
::google::protobuf::Any* _msg = _internal_mutable_value();
// @@protoc_insertion_point(field_mutable:google.protobuf.Option.value)
return _msg;
diff --git a/src/google/protobuf/unredacted_debug_format_for_test.cc b/src/google/protobuf/unredacted_debug_format_for_test.cc
new file mode 100644
index 0000000..c598eff
--- /dev/null
+++ b/src/google/protobuf/unredacted_debug_format_for_test.cc
@@ -0,0 +1,74 @@
+#include "google/protobuf/unredacted_debug_format_for_test.h"
+
+#include <string>
+
+#include "google/protobuf/message.h"
+#include "google/protobuf/message_lite.h"
+#include "google/protobuf/text_format.h"
+
+namespace google {
+namespace protobuf {
+namespace util {
+
+std::string UnredactedDebugFormatForTest(const google::protobuf::Message& message) {
+ std::string debug_string;
+
+ google::protobuf::TextFormat::Printer printer;
+ printer.SetExpandAny(true);
+ printer.SetReportSensitiveFields(
+ internal::FieldReporterLevel::kUnredactedDebugFormatForTest);
+
+ printer.PrintToString(message, &debug_string);
+
+ return debug_string;
+}
+
+std::string UnredactedShortDebugFormatForTest(const google::protobuf::Message& message) {
+ std::string debug_string;
+
+ google::protobuf::TextFormat::Printer printer;
+ printer.SetSingleLineMode(true);
+ printer.SetExpandAny(true);
+ printer.SetReportSensitiveFields(
+ internal::FieldReporterLevel::kUnredactedShortDebugFormatForTest);
+
+ printer.PrintToString(message, &debug_string);
+ // Single line mode currently might have an extra space at the end.
+ if (!debug_string.empty() && debug_string[debug_string.size() - 1] == ' ') {
+ debug_string.resize(debug_string.size() - 1);
+ }
+
+ return debug_string;
+}
+
+std::string UnredactedUtf8DebugFormatForTest(const google::protobuf::Message& message) {
+ std::string debug_string;
+
+ google::protobuf::TextFormat::Printer printer;
+ printer.SetUseUtf8StringEscaping(true);
+ printer.SetExpandAny(true);
+ printer.SetReportSensitiveFields(
+ internal::FieldReporterLevel::kUnredactedUtf8DebugFormatForTest);
+
+ printer.PrintToString(message, &debug_string);
+
+ return debug_string;
+}
+
+std::string UnredactedDebugFormatForTest(const google::protobuf::MessageLite& message) {
+ return message.DebugString();
+}
+
+std::string UnredactedShortDebugFormatForTest(
+ const google::protobuf::MessageLite& message) {
+ return message.ShortDebugString();
+}
+
+std::string UnredactedUtf8DebugFormatForTest(
+ const google::protobuf::MessageLite& message) {
+ return message.Utf8DebugString();
+}
+
+} // namespace util
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/unredacted_debug_format_for_test.h b/src/google/protobuf/unredacted_debug_format_for_test.h
new file mode 100644
index 0000000..252438e
--- /dev/null
+++ b/src/google/protobuf/unredacted_debug_format_for_test.h
@@ -0,0 +1,33 @@
+#ifndef GOOGLE_PROTOBUF_UNREDACTED_DEBUG_FORMAT_FOR_TEST_H__
+#define GOOGLE_PROTOBUF_UNREDACTED_DEBUG_FORMAT_FOR_TEST_H__
+
+#include "google/protobuf/message.h"
+#include "google/protobuf/message_lite.h"
+
+namespace google {
+namespace protobuf {
+namespace util {
+
+// Generates a human-readable form of this message for debugging purposes in
+// test-only code. This API does not redact any fields in the message.
+std::string UnredactedDebugFormatForTest(const google::protobuf::Message& message);
+// Like UnredactedDebugFormatForTest(), but prints the message in a single line.
+std::string UnredactedShortDebugFormatForTest(const google::protobuf::Message& message);
+// Like UnredactedDebugFormatForTest(), but does not escape UTF-8 byte
+// sequences.
+std::string UnredactedUtf8DebugFormatForTest(const google::protobuf::Message& message);
+
+// The following APIs are added just to work with code that interoperates with
+// `Message` and `MessageLite`.
+
+std::string UnredactedDebugFormatForTest(const google::protobuf::MessageLite& message);
+std::string UnredactedShortDebugFormatForTest(
+ const google::protobuf::MessageLite& message);
+std::string UnredactedUtf8DebugFormatForTest(
+ const google::protobuf::MessageLite& message);
+
+} // namespace util
+} // namespace protobuf
+} // namespace google
+
+#endif // GOOGLE_PROTOBUF_UNREDACTED_DEBUG_FORMAT_FOR_TEST_H__
diff --git a/src/google/protobuf/unredacted_debug_format_for_test_test.cc b/src/google/protobuf/unredacted_debug_format_for_test_test.cc
new file mode 100644
index 0000000..ceff5ba
--- /dev/null
+++ b/src/google/protobuf/unredacted_debug_format_for_test_test.cc
@@ -0,0 +1,88 @@
+#include "google/protobuf/unredacted_debug_format_for_test.h"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include "google/protobuf/unittest.pb.h"
+#include "google/protobuf/unittest_lite.pb.h"
+
+namespace {
+
+using ::google::protobuf::util::UnredactedDebugFormatForTest;
+using ::google::protobuf::util::UnredactedShortDebugFormatForTest;
+using ::google::protobuf::util::UnredactedUtf8DebugFormatForTest;
+using ::testing::StrEq;
+
+TEST(UnredactedDebugFormatAPITest, MessageUnredactedDebugFormat) {
+ protobuf_unittest::RedactedFields proto;
+ protobuf_unittest::TestNestedMessageRedaction redacted_nested_proto;
+ protobuf_unittest::TestNestedMessageRedaction unredacted_nested_proto;
+ redacted_nested_proto.set_optional_unredacted_nested_string(
+ "\350\260\267\346\255\214");
+ unredacted_nested_proto.set_optional_unredacted_nested_string(
+ "\350\260\267\346\255\214");
+ *proto.mutable_optional_redacted_message() = redacted_nested_proto;
+ *proto.mutable_optional_unredacted_message() = unredacted_nested_proto;
+
+ EXPECT_THAT(UnredactedDebugFormatForTest(proto),
+ StrEq("optional_redacted_message {\n "
+ "optional_unredacted_nested_string: "
+ "\"\\350\\260\\267\\346\\255\\214\"\n}\n"
+ "optional_unredacted_message {\n "
+ "optional_unredacted_nested_string: "
+ "\"\\350\\260\\267\\346\\255\\214\"\n}\n"));
+}
+
+TEST(UnredactedDebugFormatAPITest, MessageUnredactedShortDebugFormat) {
+ protobuf_unittest::RedactedFields proto;
+ protobuf_unittest::TestNestedMessageRedaction redacted_nested_proto;
+ protobuf_unittest::TestNestedMessageRedaction unredacted_nested_proto;
+ redacted_nested_proto.set_optional_unredacted_nested_string("hello");
+ unredacted_nested_proto.set_optional_unredacted_nested_string("world");
+ *proto.mutable_optional_redacted_message() = redacted_nested_proto;
+ *proto.mutable_optional_unredacted_message() = unredacted_nested_proto;
+
+ EXPECT_THAT(UnredactedShortDebugFormatForTest(proto),
+ StrEq("optional_redacted_message { "
+ "optional_unredacted_nested_string: \"hello\" } "
+ "optional_unredacted_message { "
+ "optional_unredacted_nested_string: \"world\" }"));
+}
+
+TEST(UnredactedDebugFormatAPITest, MessageUnredactedUtf8DebugFormat) {
+ protobuf_unittest::RedactedFields proto;
+ protobuf_unittest::TestNestedMessageRedaction redacted_nested_proto;
+ protobuf_unittest::TestNestedMessageRedaction unredacted_nested_proto;
+ redacted_nested_proto.set_optional_unredacted_nested_string(
+ "\350\260\267\346\255\214");
+ unredacted_nested_proto.set_optional_unredacted_nested_string(
+ "\350\260\267\346\255\214");
+ *proto.mutable_optional_redacted_message() = redacted_nested_proto;
+ *proto.mutable_optional_unredacted_message() = unredacted_nested_proto;
+
+ EXPECT_THAT(UnredactedUtf8DebugFormatForTest(proto),
+ StrEq("optional_redacted_message {\n "
+ "optional_unredacted_nested_string: "
+ "\"\xE8\xB0\xB7\xE6\xAD\x8C\"\n}\n"
+ "optional_unredacted_message {\n "
+ "optional_unredacted_nested_string: "
+ "\"\xE8\xB0\xB7\xE6\xAD\x8C\"\n}\n"));
+}
+
+TEST(UnredactedDebugFormatAPITest, LiteUnredactedDebugFormat) {
+ protobuf_unittest::TestAllTypesLite message;
+ EXPECT_EQ(UnredactedDebugFormatForTest(message), message.DebugString());
+}
+
+TEST(UnredactedDebugFormatAPITest, LiteUnredactedShortDebugFormat) {
+ protobuf_unittest::TestAllTypesLite message;
+ EXPECT_EQ(UnredactedShortDebugFormatForTest(message),
+ message.ShortDebugString());
+}
+
+TEST(UnredactedDebugFormatAPITest, LiteUnredactedUtf8DebugFormat) {
+ protobuf_unittest::TestAllTypesLite message;
+ EXPECT_EQ(UnredactedUtf8DebugFormatForTest(message),
+ message.Utf8DebugString());
+}
+
+} // namespace
diff --git a/src/google/protobuf/util/BUILD.bazel b/src/google/protobuf/util/BUILD.bazel
index 35ede30..149b86c 100644
--- a/src/google/protobuf/util/BUILD.bazel
+++ b/src/google/protobuf/util/BUILD.bazel
@@ -170,7 +170,6 @@
visibility = ["//:__subpackages__"],
deps = [
"//src/google/protobuf",
- "//src/google/protobuf:descriptor_legacy",
"//src/google/protobuf/io",
"//src/google/protobuf/stubs",
"@com_google_absl//absl/log:absl_log",
diff --git a/src/google/protobuf/util/json_format_proto3.proto b/src/google/protobuf/util/json_format_proto3.proto
index 8818adc..e631c2a 100644
--- a/src/google/protobuf/util/json_format_proto3.proto
+++ b/src/google/protobuf/util/json_format_proto3.proto
@@ -54,6 +54,18 @@
repeated bytes repeated_bytes_value = 29;
repeated EnumType repeated_enum_value = 30;
repeated MessageType repeated_message_value = 31;
+
+ optional bool optional_bool_value = 41;
+ optional int32 optional_int32_value = 42;
+ optional int64 optional_int64_value = 43;
+ optional uint32 optional_uint32_value = 44;
+ optional uint64 optional_uint64_value = 45;
+ optional float optional_float_value = 46;
+ optional double optional_double_value = 47;
+ optional string optional_string_value = 48;
+ optional bytes optional_bytes_value = 49;
+ optional EnumType optional_enum_value = 50;
+ optional MessageType optional_message_value = 51;
}
message TestOneof {
diff --git a/src/google/protobuf/util/message_differencer.cc b/src/google/protobuf/util/message_differencer.cc
index 853d5da..df0311c 100644
--- a/src/google/protobuf/util/message_differencer.cc
+++ b/src/google/protobuf/util/message_differencer.cc
@@ -696,7 +696,7 @@
// we are merely checking for a difference in field values,
// rather than the addition or deletion of fields).
std::vector<const FieldDescriptor*> fields_union =
- CombineFields(message1_fields, FULL, message2_fields, FULL);
+ CombineFields(message1, message1_fields, FULL, message2_fields, FULL);
return CompareWithFieldsInternal(message1, message2, unpacked_any,
fields_union, fields_union,
parent_fields);
@@ -719,8 +719,8 @@
// but only the intersection for message2. This way, any fields
// only present in message2 will be ignored, but any fields only
// present in message1 will be marked as a difference.
- std::vector<const FieldDescriptor*> fields_intersection =
- CombineFields(message1_fields, PARTIAL, message2_fields, PARTIAL);
+ std::vector<const FieldDescriptor*> fields_intersection = CombineFields(
+ message1, message1_fields, PARTIAL, message2_fields, PARTIAL);
return CompareWithFieldsInternal(message1, message2, unpacked_any,
message1_fields, fields_intersection,
parent_fields);
@@ -728,9 +728,48 @@
}
}
+namespace {
+bool ValidMissingField(const FieldDescriptor& f) {
+ switch (f.cpp_type()) {
+ case FieldDescriptor::CPPTYPE_INT32:
+ case FieldDescriptor::CPPTYPE_UINT32:
+ case FieldDescriptor::CPPTYPE_INT64:
+ case FieldDescriptor::CPPTYPE_UINT64:
+ case FieldDescriptor::CPPTYPE_FLOAT:
+ case FieldDescriptor::CPPTYPE_DOUBLE:
+ case FieldDescriptor::CPPTYPE_STRING:
+ case FieldDescriptor::CPPTYPE_BOOL:
+ case FieldDescriptor::CPPTYPE_ENUM:
+ return true;
+ default:
+ return false;
+ }
+}
+} // namespace
+
+bool MessageDifferencer::ShouldCompareNoPresence(
+ const Message& message1, const Reflection& reflection1,
+ const FieldDescriptor* field2) const {
+ const bool compare_no_presence_by_field = force_compare_no_presence_ &&
+ !field2->has_presence() &&
+ !field2->is_repeated();
+ if (compare_no_presence_by_field) {
+ return true;
+ }
+ const bool compare_no_presence_by_address =
+ !field2->is_repeated() && !field2->has_presence() &&
+ ValidMissingField(*field2) &&
+ require_no_presence_fields_.addresses_.contains(
+ TextFormat::Parser::UnsetFieldsMetadata::GetUnsetFieldAddress(
+ message1, reflection1, *field2));
+ return compare_no_presence_by_address;
+}
+
std::vector<const FieldDescriptor*> MessageDifferencer::CombineFields(
- const std::vector<const FieldDescriptor*>& fields1, Scope fields1_scope,
- const std::vector<const FieldDescriptor*>& fields2, Scope fields2_scope) {
+ const Message& message1, const std::vector<const FieldDescriptor*>& fields1,
+ Scope fields1_scope, const std::vector<const FieldDescriptor*>& fields2,
+ Scope fields2_scope) {
+ const Reflection* reflection1 = message1.GetReflection();
size_t index1 = 0;
size_t index2 = 0;
@@ -748,8 +787,8 @@
} else if (FieldBefore(field2, field1)) {
if (fields2_scope == FULL) {
tmp_message_fields_.push_back(field2);
- } else if (fields2_scope == PARTIAL && force_compare_no_presence_ &&
- !field2->has_presence() && !field2->is_repeated()) {
+ } else if (fields2_scope == PARTIAL &&
+ ShouldCompareNoPresence(message1, *reflection1, field2)) {
// In order to make MessageDifferencer play nicely with no-presence
// fields in unit tests, we want to check if the expected proto
// (message1) has some fields which are set to their default value but
diff --git a/src/google/protobuf/util/message_differencer.h b/src/google/protobuf/util/message_differencer.h
index 5c058f9..6d8e9a9 100644
--- a/src/google/protobuf/util/message_differencer.h
+++ b/src/google/protobuf/util/message_differencer.h
@@ -32,6 +32,7 @@
#include "absl/log/absl_check.h"
#include "google/protobuf/descriptor.h" // FieldDescriptor
#include "google/protobuf/message.h" // Message
+#include "google/protobuf/text_format.h"
#include "google/protobuf/unknown_field_set.h"
#include "google/protobuf/util/field_comparator.h"
@@ -581,6 +582,13 @@
// in the comparison.
void set_force_compare_no_presence(bool value);
+ // If set, the fields in message1 that equal the fields passed here will be
+ // treated as required for comparison, even if they are absent.
+ void set_require_no_presence_fields(
+ const google::protobuf::TextFormat::Parser::UnsetFieldsMetadata& fields) {
+ require_no_presence_fields_ = fields;
+ }
+
// DEPRECATED. Pass a DefaultFieldComparator instance instead.
// Sets the type of comparison (as defined in the FloatComparison enumeration
// above) that is used by this differencer when comparing float (and double)
@@ -768,6 +776,7 @@
// list. Fields only present in one of the lists will only appear in the
// combined list if the corresponding fields_scope option is set to FULL.
std::vector<const FieldDescriptor*> CombineFields(
+ const Message& message1,
const std::vector<const FieldDescriptor*>& fields1, Scope fields1_scope,
const std::vector<const FieldDescriptor*>& fields2, Scope fields2_scope);
@@ -919,11 +928,17 @@
const FieldDescriptor* field,
const RepeatedFieldComparison& new_comparison);
+ // Whether we should still compare the field despite its absence in message1.
+ bool ShouldCompareNoPresence(const Message& message1,
+ const Reflection& reflection1,
+ const FieldDescriptor* field2) const;
+
Reporter* reporter_;
DefaultFieldComparator default_field_comparator_;
MessageFieldComparison message_field_comparison_;
Scope scope_;
absl::flat_hash_set<const FieldDescriptor*> force_compare_no_presence_fields_;
+ google::protobuf::TextFormat::Parser::UnsetFieldsMetadata require_no_presence_fields_;
absl::flat_hash_set<std::string> force_compare_failure_triggering_fields_;
RepeatedFieldComparison repeated_field_comparison_;
diff --git a/src/google/protobuf/util/message_differencer_unittest.cc b/src/google/protobuf/util/message_differencer_unittest.cc
index e673d02..191281a 100644
--- a/src/google/protobuf/util/message_differencer_unittest.cc
+++ b/src/google/protobuf/util/message_differencer_unittest.cc
@@ -29,8 +29,10 @@
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/any_test.pb.h"
+#include "google/protobuf/descriptor.h"
#include "google/protobuf/map_test_util.h"
#include "google/protobuf/map_unittest.pb.h"
+#include "google/protobuf/message.h"
#include "google/protobuf/test_util.h"
#include "google/protobuf/text_format.h"
#include "google/protobuf/unittest.pb.h"
@@ -44,12 +46,31 @@
namespace google {
namespace protobuf {
+namespace internal {
+class UnsetFieldsMetadataMessageDifferencerTestUtil {
+ public:
+ static void AddExplicitUnsetField(
+ const Message& message, const Reflection& reflection,
+ const FieldDescriptor& fd,
+ TextFormat::Parser::UnsetFieldsMetadata* metadata) {
+ metadata->addresses_.insert(
+ TextFormat::Parser::UnsetFieldsMetadata::GetUnsetFieldAddress(
+ message, reflection, fd));
+ }
+};
+} // namespace internal
+
namespace {
+using ::google::protobuf::internal::UnsetFieldsMetadataMessageDifferencerTestUtil;
+
proto3_unittest::TestNoPresenceField MakeTestNoPresenceField() {
proto3_unittest::TestNoPresenceField msg1, msg2;
msg1.set_no_presence_bool(true);
+ msg1.set_no_presence_bool2(true);
+ msg1.set_no_presence_bool3(true);
+ msg1.set_no_presence_string("yolo");
msg2 = msg1;
*msg1.mutable_no_presence_nested() = msg2;
*msg1.add_no_presence_repeated_nested() = msg2;
@@ -379,6 +400,212 @@
}
TEST(MessageDifferencerTest,
+ PartialEqualityTestBooleanPresenceFieldMissingWithAddress) {
+ util::MessageDifferencer address_differencer;
+ address_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+
+ // This differencer is not setting force_compare_no_presence.
+ util::MessageDifferencer default_differencer;
+ default_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+ default_differencer.set_force_compare_no_presence(false);
+
+ // When clearing a singular no presence field, it will be included in the
+ // comparison.
+ proto3_unittest::TestNoPresenceField msg1 = MakeTestNoPresenceField();
+ proto3_unittest::TestNoPresenceField msg2 = MakeTestNoPresenceField();
+
+ const Reflection* reflection1 = msg1.GetReflection();
+ const FieldDescriptor* fd1 = msg1.GetDescriptor()->FindFieldByNumber(1);
+ TextFormat::Parser::UnsetFieldsMetadata metadata;
+ UnsetFieldsMetadataMessageDifferencerTestUtil::AddExplicitUnsetField(
+ msg1, *reflection1, *fd1, &metadata);
+ address_differencer.set_require_no_presence_fields(metadata);
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.clear_no_presence_bool();
+
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg2.clear_no_presence_bool();
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.set_no_presence_bool(true);
+
+ EXPECT_FALSE(default_differencer.Compare(msg1, msg2));
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+}
+
+TEST(MessageDifferencerTest,
+ PartialEqualityTestStringPresenceFieldMissingWithAddress) {
+ util::MessageDifferencer address_differencer;
+ address_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+
+ // This differencer is not setting force_compare_no_presence.
+ util::MessageDifferencer default_differencer;
+ default_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+ default_differencer.set_force_compare_no_presence(false);
+
+ // When clearing a singular no presence field, it will be included in the
+ // comparison.
+ proto3_unittest::TestNoPresenceField msg1 = MakeTestNoPresenceField();
+ proto3_unittest::TestNoPresenceField msg2 = MakeTestNoPresenceField();
+
+ const Reflection* reflection1 = msg1.GetReflection();
+ const FieldDescriptor* fd1 = msg1.GetDescriptor()->FindFieldByNumber(4);
+ TextFormat::Parser::UnsetFieldsMetadata metadata;
+ UnsetFieldsMetadataMessageDifferencerTestUtil::AddExplicitUnsetField(
+ msg1, *reflection1, *fd1, &metadata);
+ address_differencer.set_require_no_presence_fields(metadata);
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.clear_no_presence_string();
+
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg2.clear_no_presence_string();
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.set_no_presence_string("yolo");
+
+ EXPECT_FALSE(default_differencer.Compare(msg1, msg2));
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+}
+
+// Ensure multiple booleans are addressed distinctly. This is trivially the case
+// now, but tests against possible optimizations in the future to use bitfields.
+TEST(MessageDifferencerTest,
+ PartialEqualityTestTwoBoolsPresenceFieldMissingWithAddress) {
+ util::MessageDifferencer address_differencer;
+ address_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+
+ // This differencer is not setting force_compare_no_presence.
+ util::MessageDifferencer default_differencer;
+ default_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+ default_differencer.set_force_compare_no_presence(false);
+
+ // When clearing a singular no presence field, it will be included in the
+ // comparison.
+ proto3_unittest::TestNoPresenceField msg1 = MakeTestNoPresenceField();
+ proto3_unittest::TestNoPresenceField msg2 = MakeTestNoPresenceField();
+
+ const Reflection* reflection1 = msg1.GetReflection();
+ const FieldDescriptor* fd1 = msg1.GetDescriptor()->FindFieldByNumber(5);
+ TextFormat::Parser::UnsetFieldsMetadata metadata;
+ UnsetFieldsMetadataMessageDifferencerTestUtil::AddExplicitUnsetField(
+ msg1, *reflection1, *fd1, &metadata);
+ address_differencer.set_require_no_presence_fields(metadata);
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ // Trigger on bool2.
+ msg1.clear_no_presence_bool2();
+
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ // Triggering on bool2 still ignores bool3.
+ msg1.set_no_presence_bool2(true);
+ msg1.clear_no_presence_bool3();
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+}
+
+TEST(MessageDifferencerTest,
+ PartialEqualityTestBooleanNestedMessagePresenceFieldMissingWithAddress) {
+ util::MessageDifferencer address_differencer;
+ address_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+
+ // This differencer is not setting force_compare_no_presence.
+ util::MessageDifferencer default_differencer;
+ default_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+ default_differencer.set_force_compare_no_presence(false);
+
+ // When clearing a singular no presence field, it will be included in the
+ // comparison.
+ proto3_unittest::TestNoPresenceField msg1 = MakeTestNoPresenceField();
+ proto3_unittest::TestNoPresenceField msg2 = MakeTestNoPresenceField();
+
+ const Reflection* reflection1 = msg1.no_presence_nested().GetReflection();
+ const FieldDescriptor* fd1 = msg1.GetDescriptor()->FindFieldByNumber(1);
+ TextFormat::Parser::UnsetFieldsMetadata metadata;
+ UnsetFieldsMetadataMessageDifferencerTestUtil::AddExplicitUnsetField(
+ msg1.no_presence_nested(), *reflection1, *fd1, &metadata);
+ address_differencer.set_require_no_presence_fields(metadata);
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.mutable_no_presence_nested()->clear_no_presence_bool();
+
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg2.mutable_no_presence_nested()->clear_no_presence_bool();
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.mutable_no_presence_nested()->set_no_presence_bool(true);
+
+ EXPECT_FALSE(default_differencer.Compare(msg1, msg2));
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+}
+
+TEST(MessageDifferencerTest,
+ PartialEqualityTestBooleanRepeatedMessagePresenceFieldMissingWithAddress) {
+ util::MessageDifferencer address_differencer;
+ address_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+
+ // This differencer is not setting force_compare_no_presence.
+ util::MessageDifferencer default_differencer;
+ default_differencer.set_scope(util::MessageDifferencer::PARTIAL);
+ default_differencer.set_force_compare_no_presence(false);
+
+ // When clearing a singular no presence field, it will be included in the
+ // comparison.
+ proto3_unittest::TestNoPresenceField msg1 = MakeTestNoPresenceField();
+ proto3_unittest::TestNoPresenceField msg2 = MakeTestNoPresenceField();
+
+ const Reflection* reflection1 =
+ msg1.no_presence_repeated_nested(0).GetReflection();
+ const FieldDescriptor* fd1 = msg1.GetDescriptor()->FindFieldByNumber(1);
+ TextFormat::Parser::UnsetFieldsMetadata metadata;
+ UnsetFieldsMetadataMessageDifferencerTestUtil::AddExplicitUnsetField(
+ msg1.no_presence_repeated_nested(0), *reflection1, *fd1, &metadata);
+ address_differencer.set_require_no_presence_fields(metadata);
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.mutable_no_presence_repeated_nested(0)->clear_no_presence_bool();
+
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg2.mutable_no_presence_repeated_nested(0)->clear_no_presence_bool();
+
+ EXPECT_TRUE(address_differencer.Compare(msg1, msg2));
+ EXPECT_TRUE(default_differencer.Compare(msg1, msg2));
+
+ msg1.mutable_no_presence_repeated_nested(0)->set_no_presence_bool(true);
+
+ EXPECT_FALSE(default_differencer.Compare(msg1, msg2));
+ EXPECT_FALSE(address_differencer.Compare(msg1, msg2));
+}
+
+TEST(MessageDifferencerTest,
PartialEqualityTestExtraFieldNoPresenceForceCompareReporterAware) {
std::string output;
// Before we can check the output string, we must make sure the
diff --git a/src/google/protobuf/util/message_differencer_unittest_proto3.proto b/src/google/protobuf/util/message_differencer_unittest_proto3.proto
index 55540ce..b139554 100644
--- a/src/google/protobuf/util/message_differencer_unittest_proto3.proto
+++ b/src/google/protobuf/util/message_differencer_unittest_proto3.proto
@@ -18,4 +18,7 @@
bool no_presence_bool = 1;
TestNoPresenceField no_presence_nested = 2;
repeated TestNoPresenceField no_presence_repeated_nested = 3;
+ string no_presence_string = 4;
+ bool no_presence_bool2 = 5;
+ bool no_presence_bool3 = 6;
}
diff --git a/src/google/protobuf/util/time_util.cc b/src/google/protobuf/util/time_util.cc
index e27b0d1..2d62eca 100644
--- a/src/google/protobuf/util/time_util.cc
+++ b/src/google/protobuf/util/time_util.cc
@@ -311,11 +311,13 @@
}
int64_t TimeUtil::DurationToMicroseconds(const Duration& duration) {
- return RoundTowardZero(DurationToNanoseconds(duration), kNanosPerMicrosecond);
+ return DurationToSeconds(duration) * kMicrosPerSecond +
+ RoundTowardZero(duration.nanos(), kNanosPerMicrosecond);
}
int64_t TimeUtil::DurationToMilliseconds(const Duration& duration) {
- return RoundTowardZero(DurationToNanoseconds(duration), kNanosPerMillisecond);
+ return DurationToSeconds(duration) * kMillisPerSecond +
+ RoundTowardZero(duration.nanos(), kNanosPerMillisecond);
}
int64_t TimeUtil::DurationToSeconds(const Duration& duration) {
diff --git a/src/google/protobuf/util/time_util_test.cc b/src/google/protobuf/util/time_util_test.cc
index 0892eea..98a643e 100644
--- a/src/google/protobuf/util/time_util_test.cc
+++ b/src/google/protobuf/util/time_util_test.cc
@@ -145,6 +145,12 @@
1, TimeUtil::DurationToMilliseconds(TimeUtil::MillisecondsToDuration(1)));
EXPECT_EQ(-1, TimeUtil::DurationToMilliseconds(
TimeUtil::MillisecondsToDuration(-1)));
+ // Test overflow issue
+ EXPECT_EQ(315576000000000, TimeUtil::DurationToMilliseconds(
+ TimeUtil::SecondsToDuration(315576000000)));
+ // Test overflow issue
+ EXPECT_EQ(315576000000000000, TimeUtil::DurationToMicroseconds(
+ TimeUtil::SecondsToDuration(315576000000)));
EXPECT_EQ(1, TimeUtil::DurationToSeconds(TimeUtil::SecondsToDuration(1)));
EXPECT_EQ(-1, TimeUtil::DurationToSeconds(TimeUtil::SecondsToDuration(-1)));
EXPECT_EQ(1, TimeUtil::DurationToMinutes(TimeUtil::MinutesToDuration(1)));
diff --git a/src/google/protobuf/util/type_resolver_util.cc b/src/google/protobuf/util/type_resolver_util.cc
index 1bff190..078e7f0 100644
--- a/src/google/protobuf/util/type_resolver_util.cc
+++ b/src/google/protobuf/util/type_resolver_util.cc
@@ -20,7 +20,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "absl/strings/strip.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/io/strtod.h"
#include "google/protobuf/util/type_resolver.h"
@@ -251,17 +250,17 @@
ConvertFieldOptions(descriptor.options(), *field->mutable_options());
}
-Syntax ConvertSyntax(FileDescriptorLegacy::Syntax syntax) {
- switch (syntax) {
- default:
- return Syntax::SYNTAX_PROTO2;
+Syntax ConvertSyntax(Edition edition) {
+ if (edition >= Edition::EDITION_2023) {
+ return Syntax::SYNTAX_EDITIONS;
}
+ // TODO This should propagate proto3 as expected.
+ return Syntax::SYNTAX_PROTO2;
}
void ConvertEnumDescriptor(const EnumDescriptor& descriptor, Enum* enum_type) {
enum_type->Clear();
- enum_type->set_syntax(
- ConvertSyntax(FileDescriptorLegacy(descriptor.file()).syntax()));
+ enum_type->set_syntax(ConvertSyntax(descriptor.file()->edition()));
enum_type->set_name(descriptor.full_name());
enum_type->mutable_source_context()->set_file_name(descriptor.file()->name());
@@ -282,8 +281,7 @@
const Descriptor& descriptor, Type* type) {
type->Clear();
type->set_name(descriptor.full_name());
- type->set_syntax(
- ConvertSyntax(FileDescriptorLegacy(descriptor.file()).syntax()));
+ type->set_syntax(ConvertSyntax(descriptor.file()->edition()));
for (int i = 0; i < descriptor.field_count(); ++i) {
ConvertFieldDescriptor(url_prefix, *descriptor.field(i),
type->add_fields());
diff --git a/src/google/protobuf/util/type_resolver_util_test.cc b/src/google/protobuf/util/type_resolver_util_test.cc
index e79f2d9..dae2728 100644
--- a/src/google/protobuf/util/type_resolver_util_test.cc
+++ b/src/google/protobuf/util/type_resolver_util_test.cc
@@ -21,7 +21,6 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "google/protobuf/descriptor.h"
-#include "google/protobuf/descriptor_legacy.h"
#include "google/protobuf/util/json_format_proto3.pb.h"
#include "google/protobuf/map_unittest.pb.h"
#include "google/protobuf/unittest.pb.h"
@@ -444,8 +443,7 @@
TEST_F(DescriptorPoolTypeResolverSyntaxTest, SyntaxProto2) {
const FileDescriptor* file = BuildFile("proto2");
- ASSERT_EQ(FileDescriptorLegacy::Syntax::SYNTAX_PROTO2,
- FileDescriptorLegacy(file).syntax());
+ ASSERT_EQ(file->edition(), Edition::EDITION_PROTO2);
Type type;
ASSERT_TRUE(
@@ -456,8 +454,7 @@
TEST_F(DescriptorPoolTypeResolverSyntaxTest, SyntaxProto3) {
const FileDescriptor* file = BuildFile("proto3");
- ASSERT_EQ(FileDescriptorLegacy::Syntax::SYNTAX_PROTO3,
- FileDescriptorLegacy(file).syntax());
+ ASSERT_EQ(file->edition(), Edition::EDITION_PROTO3);
Type type;
ASSERT_TRUE(
diff --git a/src/google/protobuf/wire_format_lite.cc b/src/google/protobuf/wire_format_lite.cc
index 2fd3142..f6d97df 100644
--- a/src/google/protobuf/wire_format_lite.cc
+++ b/src/google/protobuf/wire_format_lite.cc
@@ -637,9 +637,18 @@
"Cannot SignExtended unsigned types");
static_assert(!(SignExtended && ZigZag),
"Cannot SignExtended and ZigZag on the same type");
- uint32_t sum = n;
+ // This approach is only faster when vectorized, and the vectorized
+ // implementation only works in units of the platform's vector width, and is
+ // only faster once a certain number of iterations are used. Normally the
+ // compiler generates two loops - one partially unrolled vectorized loop that
+ // processes big chunks, and a second "epilogue" scalar loop to finish up the
+ // remainder. This is done manually here so that the faster scalar
+ // implementation is used for small inputs and for the epilogue.
+ int vectorN = n & -32;
+ uint32_t sum = vectorN;
uint32_t msb_sum = 0;
- for (int i = 0; i < n; i++) {
+ int i = 0;
+ for (; i < vectorN; i++) {
uint32_t x = data[i];
if (ZigZag) {
x = WireFormatLite::ZigZagEncode32(x);
@@ -655,6 +664,19 @@
if (x > 0x1FFFFF) sum++;
if (x > 0xFFFFFFF) sum++;
}
+// Clang is not smart enough to see that this loop doesn't run many times
+// NOLINTNEXTLINE(google3-runtime-pragma-loop-hint): b/315043579
+#pragma clang loop vectorize(disable) unroll(disable) interleave(disable)
+ for (; i < n; i++) {
+ uint32_t x = data[i];
+ if (ZigZag) {
+ sum += WireFormatLite::SInt32Size(x);
+ } else if (SignExtended) {
+ sum += WireFormatLite::Int32Size(x);
+ } else {
+ sum += WireFormatLite::UInt32Size(x);
+ }
+ }
if (SignExtended) sum += msb_sum * 5;
return sum;
}
@@ -665,8 +687,10 @@
// is_unsigned<T> => !ZigZag
static_assert(!ZigZag || !std::is_unsigned<T>::value,
"Cannot ZigZag encode unsigned types");
- uint64_t sum = n;
- for (int i = 0; i < n; i++) {
+ int vectorN = n & -32;
+ uint64_t sum = vectorN;
+ int i = 0;
+ for (; i < vectorN; i++) {
uint64_t x = data[i];
if (ZigZag) {
x = WireFormatLite::ZigZagEncode64(x);
@@ -682,14 +706,27 @@
if (x > 0x1FFFFF) sum++;
if (x > 0xFFFFFFF) sum++;
}
+// Clang is not smart enough to see that this loop doesn't run many times
+// NOLINTNEXTLINE(google3-runtime-pragma-loop-hint): b/315043579
+#pragma clang loop vectorize(disable) unroll(disable) interleave(disable)
+ for (; i < n; i++) {
+ uint64_t x = data[i];
+ if (ZigZag) {
+ sum += WireFormatLite::SInt64Size(x);
+ } else {
+ sum += WireFormatLite::UInt64Size(x);
+ }
+ }
return sum;
}
-// GCC does not recognize the vectorization opportunity
-// and other platforms are untested, in those cases using the optimized
-// varint size routine for each element is faster.
-// Hence we enable it only for clang
-#if (defined(__SSE__) || defined(__aarch64__)) && defined(__clang__)
+// On machines without a vector count-leading-zeros instruction such as SVE CLZ
+// on arm or VPLZCNT on x86, SSE or AVX2 instructions can allow vectorization of
+// the size calculation loop. GCC does not detect this autovectorization
+// opportunity, so only enable for clang.
+// When last tested, AVX512-vectorized lzcnt was slower than the SSE/AVX2
+// implementation, so __AVX512CD__ is not checked.
+#if defined(__SSE__) && defined(__clang__)
size_t WireFormatLite::Int32Size(const RepeatedField<int32_t>& value) {
return VarintSize<false, true>(value.data(), value.size());
}
@@ -707,7 +744,7 @@
return VarintSize<false, true>(value.data(), value.size());
}
-#else // !((defined(__SSE__) || defined(__aarch64__) && defined(__clang__))
+#else // !(defined(__SSE__) && defined(__clang__))
size_t WireFormatLite::Int32Size(const RepeatedField<int32_t>& value) {
size_t out = 0;
@@ -747,12 +784,9 @@
#endif
-// Micro benchmarks show that the SSE improved loop only starts beating
-// the normal loop on Haswell platforms and then only for >32 ints. We
-// disable this for now. Some specialized users might find it worthwhile to
-// enable this.
-#define USE_SSE_FOR_64_BIT_INTEGER_ARRAYS 0
-#if USE_SSE_FOR_64_BIT_INTEGER_ARRAYS
+// Micro benchmarks show that the vectorizable loop only starts beating
+// the normal loop when 256-bit vector registers are available.
+#if defined(__AVX2__) && defined(__clang__)
size_t WireFormatLite::Int64Size(const RepeatedField<int64_t>& value) {
return VarintSize64<false>(value.data(), value.size());
}
diff --git a/src/google/protobuf/wire_format_unittest.cc b/src/google/protobuf/wire_format_unittest.cc
index 0fc1fe5..835a8ed 100644
--- a/src/google/protobuf/wire_format_unittest.cc
+++ b/src/google/protobuf/wire_format_unittest.cc
@@ -11,11 +11,15 @@
#include "google/protobuf/wire_format.h"
+#include <cstddef>
+#include <cstdint>
+#include <string>
+
#include "google/protobuf/unittest.pb.h"
#include "google/protobuf/unittest_mset.pb.h"
#include "google/protobuf/unittest_mset_wire_format.pb.h"
#include "google/protobuf/unittest_proto3_arena.pb.h"
-#include <gmock/gmock.h>
+#include "google/protobuf/wire_format_lite.h"
#include <gtest/gtest.h>
#define UNITTEST ::protobuf_unittest
diff --git a/src/google/protobuf/wrappers.pb.cc b/src/google/protobuf/wrappers.pb.cc
index 260f930..0ed136b 100644
--- a/src/google/protobuf/wrappers.pb.cc
+++ b/src/google/protobuf/wrappers.pb.cc
@@ -363,9 +363,6 @@
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter() {
return &descriptor_table_google_2fprotobuf_2fwrappers_2eproto;
}
-// Force running AddDescriptors() at dynamic initialization time.
-PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
-static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_google_2fprotobuf_2fwrappers_2eproto(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto);
namespace google {
namespace protobuf {
// ===================================================================
@@ -405,12 +402,15 @@
const ::google::protobuf::MessageLite::ClassData*
DoubleValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- DoubleValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(DoubleValue, _impl_._cached_size_),
+ false,
+ },
+ &DoubleValue::MergeImpl,
+ &DoubleValue::kDescriptorMethods,
};
return &_data_;
}
@@ -515,7 +515,7 @@
}
-void DoubleValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void DoubleValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<DoubleValue*>(&to_msg);
auto& from = static_cast<const DoubleValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.DoubleValue)
@@ -529,7 +529,7 @@
::uint64_t raw_value;
memcpy(&raw_value, &tmp_value, sizeof(tmp_value));
if (raw_value != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -552,9 +552,9 @@
}
::google::protobuf::Metadata DoubleValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[0]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[0]);
}
// ===================================================================
@@ -593,12 +593,15 @@
const ::google::protobuf::MessageLite::ClassData*
FloatValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- FloatValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(FloatValue, _impl_._cached_size_),
+ false,
+ },
+ &FloatValue::MergeImpl,
+ &FloatValue::kDescriptorMethods,
};
return &_data_;
}
@@ -703,7 +706,7 @@
}
-void FloatValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void FloatValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<FloatValue*>(&to_msg);
auto& from = static_cast<const FloatValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FloatValue)
@@ -717,7 +720,7 @@
::uint32_t raw_value;
memcpy(&raw_value, &tmp_value, sizeof(tmp_value));
if (raw_value != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -740,9 +743,9 @@
}
::google::protobuf::Metadata FloatValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[1]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[1]);
}
// ===================================================================
@@ -781,12 +784,15 @@
const ::google::protobuf::MessageLite::ClassData*
Int64Value::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Int64Value::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Int64Value, _impl_._cached_size_),
+ false,
+ },
+ &Int64Value::MergeImpl,
+ &Int64Value::kDescriptorMethods,
};
return &_data_;
}
@@ -882,7 +888,7 @@
}
-void Int64Value::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Int64Value::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Int64Value*>(&to_msg);
auto& from = static_cast<const Int64Value&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Int64Value)
@@ -891,7 +897,7 @@
(void) cached_has_bits;
if (from._internal_value() != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -914,9 +920,9 @@
}
::google::protobuf::Metadata Int64Value::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[2]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[2]);
}
// ===================================================================
@@ -955,12 +961,15 @@
const ::google::protobuf::MessageLite::ClassData*
UInt64Value::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- UInt64Value::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(UInt64Value, _impl_._cached_size_),
+ false,
+ },
+ &UInt64Value::MergeImpl,
+ &UInt64Value::kDescriptorMethods,
};
return &_data_;
}
@@ -1056,7 +1065,7 @@
}
-void UInt64Value::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void UInt64Value::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<UInt64Value*>(&to_msg);
auto& from = static_cast<const UInt64Value&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UInt64Value)
@@ -1065,7 +1074,7 @@
(void) cached_has_bits;
if (from._internal_value() != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1088,9 +1097,9 @@
}
::google::protobuf::Metadata UInt64Value::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[3]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[3]);
}
// ===================================================================
@@ -1129,12 +1138,15 @@
const ::google::protobuf::MessageLite::ClassData*
Int32Value::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- Int32Value::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(Int32Value, _impl_._cached_size_),
+ false,
+ },
+ &Int32Value::MergeImpl,
+ &Int32Value::kDescriptorMethods,
};
return &_data_;
}
@@ -1230,7 +1242,7 @@
}
-void Int32Value::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void Int32Value::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<Int32Value*>(&to_msg);
auto& from = static_cast<const Int32Value&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Int32Value)
@@ -1239,7 +1251,7 @@
(void) cached_has_bits;
if (from._internal_value() != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1262,9 +1274,9 @@
}
::google::protobuf::Metadata Int32Value::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[4]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[4]);
}
// ===================================================================
@@ -1303,12 +1315,15 @@
const ::google::protobuf::MessageLite::ClassData*
UInt32Value::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- UInt32Value::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(UInt32Value, _impl_._cached_size_),
+ false,
+ },
+ &UInt32Value::MergeImpl,
+ &UInt32Value::kDescriptorMethods,
};
return &_data_;
}
@@ -1404,7 +1419,7 @@
}
-void UInt32Value::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void UInt32Value::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<UInt32Value*>(&to_msg);
auto& from = static_cast<const UInt32Value&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UInt32Value)
@@ -1413,7 +1428,7 @@
(void) cached_has_bits;
if (from._internal_value() != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1436,9 +1451,9 @@
}
::google::protobuf::Metadata UInt32Value::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[5]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[5]);
}
// ===================================================================
@@ -1477,12 +1492,15 @@
const ::google::protobuf::MessageLite::ClassData*
BoolValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- BoolValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(BoolValue, _impl_._cached_size_),
+ false,
+ },
+ &BoolValue::MergeImpl,
+ &BoolValue::kDescriptorMethods,
};
return &_data_;
}
@@ -1577,7 +1595,7 @@
}
-void BoolValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void BoolValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<BoolValue*>(&to_msg);
auto& from = static_cast<const BoolValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.BoolValue)
@@ -1586,7 +1604,7 @@
(void) cached_has_bits;
if (from._internal_value() != 0) {
- _this->_internal_set_value(from._internal_value());
+ _this->_impl_.value_ = from._impl_.value_;
}
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
@@ -1609,9 +1627,9 @@
}
::google::protobuf::Metadata BoolValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[6]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[6]);
}
// ===================================================================
@@ -1664,12 +1682,15 @@
const ::google::protobuf::MessageLite::ClassData*
StringValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- StringValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(StringValue, _impl_._cached_size_),
+ false,
+ },
+ &StringValue::MergeImpl,
+ &StringValue::kDescriptorMethods,
};
return &_data_;
}
@@ -1769,7 +1790,7 @@
}
-void StringValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void StringValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<StringValue*>(&to_msg);
auto& from = static_cast<const StringValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.StringValue)
@@ -1803,9 +1824,9 @@
}
::google::protobuf::Metadata StringValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[7]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[7]);
}
// ===================================================================
@@ -1858,12 +1879,15 @@
const ::google::protobuf::MessageLite::ClassData*
BytesValue::GetClassData() const {
- PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData
- _data_ = {
- BytesValue::MergeImpl,
- nullptr, // OnDemandRegisterArenaDtor
- &::google::protobuf::Message::kDescriptorMethods,
+ PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::
+ ClassDataFull _data_ = {
+ {
+ nullptr, // OnDemandRegisterArenaDtor
PROTOBUF_FIELD_OFFSET(BytesValue, _impl_._cached_size_),
+ false,
+ },
+ &BytesValue::MergeImpl,
+ &BytesValue::kDescriptorMethods,
};
return &_data_;
}
@@ -1958,7 +1982,7 @@
}
-void BytesValue::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
+void BytesValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<BytesValue*>(&to_msg);
auto& from = static_cast<const BytesValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.BytesValue)
@@ -1992,9 +2016,9 @@
}
::google::protobuf::Metadata BytesValue::GetMetadata() const {
- return ::_pbi::AssignDescriptors(
- &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter, &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
- file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[8]);
+ return ::_pbi::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter,
+ &descriptor_table_google_2fprotobuf_2fwrappers_2eproto_once,
+ file_level_metadata_google_2fprotobuf_2fwrappers_2eproto[8]);
}
// @@protoc_insertion_point(namespace_scope)
} // namespace protobuf
@@ -2004,4 +2028,8 @@
} // namespace protobuf
} // namespace google
// @@protoc_insertion_point(global_scope)
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2
+static ::std::false_type _static_init_ PROTOBUF_UNUSED =
+ (::_pbi::AddDescriptors(&descriptor_table_google_2fprotobuf_2fwrappers_2eproto),
+ ::std::false_type{});
#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/wrappers.pb.h b/src/google/protobuf/wrappers.pb.h
index 88752dc..9f8881b 100644
--- a/src/google/protobuf/wrappers.pb.h
+++ b/src/google/protobuf/wrappers.pb.h
@@ -11,17 +11,11 @@
#include <utility>
#include "google/protobuf/port_def.inc"
-#if PROTOBUF_VERSION < 4025000
-#error "This file was generated by a newer version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please update"
-#error "your headers."
-#endif // PROTOBUF_VERSION
-
-#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION
-#error "This file was generated by an older version of protoc which is"
-#error "incompatible with your Protocol Buffer headers. Please"
-#error "regenerate this file with a newer version of protoc."
-#endif // PROTOBUF_MIN_PROTOC_VERSION
+#if PROTOBUF_VERSION != 4026000
+#error "Protobuf C++ gencode is built with an incompatible version of"
+#error "Protobuf C++ headers/runtime. See"
+#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
+#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
@@ -95,21 +89,18 @@
// -------------------------------------------------------------------
-class PROTOBUF_EXPORT UInt64Value final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UInt64Value) */ {
+class PROTOBUF_EXPORT UInt64Value final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.UInt64Value) */ {
public:
inline UInt64Value() : UInt64Value(nullptr) {}
~UInt64Value() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR UInt64Value(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR UInt64Value(
+ ::google::protobuf::internal::ConstantInitialized);
- inline UInt64Value(const UInt64Value& from)
- : UInt64Value(nullptr, from) {}
- UInt64Value(UInt64Value&& from) noexcept
- : UInt64Value() {
- *this = ::std::move(from);
- }
-
+ inline UInt64Value(const UInt64Value& from) : UInt64Value(nullptr, from) {}
+ inline UInt64Value(UInt64Value&& from) noexcept
+ : UInt64Value(nullptr, std::move(from)) {}
inline UInt64Value& operator=(const UInt64Value& from) {
CopyFrom(from);
return *this;
@@ -117,9 +108,9 @@
inline UInt64Value& operator=(UInt64Value&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -151,22 +142,17 @@
}
static inline const UInt64Value* internal_default_instance() {
return reinterpret_cast<const UInt64Value*>(
- &_UInt64Value_default_instance_);
+ &_UInt64Value_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 3;
-
- friend void swap(UInt64Value& a, UInt64Value& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 3;
+ friend void swap(UInt64Value& a, UInt64Value& b) { a.Swap(&b); }
inline void Swap(UInt64Value* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -186,11 +172,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const UInt64Value& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const UInt64Value& from) {
- UInt64Value::MergeImpl(*this, from);
- }
+ void MergeFrom(const UInt64Value& from) { UInt64Value::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -198,31 +186,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(UInt64Value* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.UInt64Value";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.UInt64Value"; }
+
+ protected:
explicit UInt64Value(::google::protobuf::Arena* arena);
UInt64Value(::google::protobuf::Arena* arena, const UInt64Value& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ UInt64Value(::google::protobuf::Arena* arena, UInt64Value&& from) noexcept
+ : UInt64Value(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -239,7 +229,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.UInt64Value)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -251,37 +240,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::uint64_t value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT UInt32Value final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UInt32Value) */ {
+class PROTOBUF_EXPORT UInt32Value final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.UInt32Value) */ {
public:
inline UInt32Value() : UInt32Value(nullptr) {}
~UInt32Value() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR UInt32Value(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR UInt32Value(
+ ::google::protobuf::internal::ConstantInitialized);
- inline UInt32Value(const UInt32Value& from)
- : UInt32Value(nullptr, from) {}
- UInt32Value(UInt32Value&& from) noexcept
- : UInt32Value() {
- *this = ::std::move(from);
- }
-
+ inline UInt32Value(const UInt32Value& from) : UInt32Value(nullptr, from) {}
+ inline UInt32Value(UInt32Value&& from) noexcept
+ : UInt32Value(nullptr, std::move(from)) {}
inline UInt32Value& operator=(const UInt32Value& from) {
CopyFrom(from);
return *this;
@@ -289,9 +275,9 @@
inline UInt32Value& operator=(UInt32Value&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -323,22 +309,17 @@
}
static inline const UInt32Value* internal_default_instance() {
return reinterpret_cast<const UInt32Value*>(
- &_UInt32Value_default_instance_);
+ &_UInt32Value_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 5;
-
- friend void swap(UInt32Value& a, UInt32Value& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 5;
+ friend void swap(UInt32Value& a, UInt32Value& b) { a.Swap(&b); }
inline void Swap(UInt32Value* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -358,11 +339,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const UInt32Value& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const UInt32Value& from) {
- UInt32Value::MergeImpl(*this, from);
- }
+ void MergeFrom(const UInt32Value& from) { UInt32Value::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -370,31 +353,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(UInt32Value* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.UInt32Value";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.UInt32Value"; }
+
+ protected:
explicit UInt32Value(::google::protobuf::Arena* arena);
UInt32Value(::google::protobuf::Arena* arena, const UInt32Value& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ UInt32Value(::google::protobuf::Arena* arena, UInt32Value&& from) noexcept
+ : UInt32Value(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -411,7 +396,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.UInt32Value)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -423,37 +407,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::uint32_t value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT StringValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.StringValue) */ {
+class PROTOBUF_EXPORT StringValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.StringValue) */ {
public:
inline StringValue() : StringValue(nullptr) {}
~StringValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR StringValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR StringValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline StringValue(const StringValue& from)
- : StringValue(nullptr, from) {}
- StringValue(StringValue&& from) noexcept
- : StringValue() {
- *this = ::std::move(from);
- }
-
+ inline StringValue(const StringValue& from) : StringValue(nullptr, from) {}
+ inline StringValue(StringValue&& from) noexcept
+ : StringValue(nullptr, std::move(from)) {}
inline StringValue& operator=(const StringValue& from) {
CopyFrom(from);
return *this;
@@ -461,9 +442,9 @@
inline StringValue& operator=(StringValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -495,22 +476,17 @@
}
static inline const StringValue* internal_default_instance() {
return reinterpret_cast<const StringValue*>(
- &_StringValue_default_instance_);
+ &_StringValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 7;
-
- friend void swap(StringValue& a, StringValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 7;
+ friend void swap(StringValue& a, StringValue& b) { a.Swap(&b); }
inline void Swap(StringValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -530,11 +506,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const StringValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const StringValue& from) {
- StringValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const StringValue& from) { StringValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -542,31 +520,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(StringValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.StringValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.StringValue"; }
+
+ protected:
explicit StringValue(::google::protobuf::Arena* arena);
StringValue(::google::protobuf::Arena* arena, const StringValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ StringValue(::google::protobuf::Arena* arena, StringValue&& from) noexcept
+ : StringValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -589,7 +569,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.StringValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -601,37 +580,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ArenaStringPtr value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Int64Value final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Int64Value) */ {
+class PROTOBUF_EXPORT Int64Value final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Int64Value) */ {
public:
inline Int64Value() : Int64Value(nullptr) {}
~Int64Value() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Int64Value(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Int64Value(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Int64Value(const Int64Value& from)
- : Int64Value(nullptr, from) {}
- Int64Value(Int64Value&& from) noexcept
- : Int64Value() {
- *this = ::std::move(from);
- }
-
+ inline Int64Value(const Int64Value& from) : Int64Value(nullptr, from) {}
+ inline Int64Value(Int64Value&& from) noexcept
+ : Int64Value(nullptr, std::move(from)) {}
inline Int64Value& operator=(const Int64Value& from) {
CopyFrom(from);
return *this;
@@ -639,9 +615,9 @@
inline Int64Value& operator=(Int64Value&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -673,22 +649,17 @@
}
static inline const Int64Value* internal_default_instance() {
return reinterpret_cast<const Int64Value*>(
- &_Int64Value_default_instance_);
+ &_Int64Value_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 2;
-
- friend void swap(Int64Value& a, Int64Value& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 2;
+ friend void swap(Int64Value& a, Int64Value& b) { a.Swap(&b); }
inline void Swap(Int64Value* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -708,11 +679,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Int64Value& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Int64Value& from) {
- Int64Value::MergeImpl(*this, from);
- }
+ void MergeFrom(const Int64Value& from) { Int64Value::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -720,31 +693,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Int64Value* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Int64Value";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Int64Value"; }
+
+ protected:
explicit Int64Value(::google::protobuf::Arena* arena);
Int64Value(::google::protobuf::Arena* arena, const Int64Value& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Int64Value(::google::protobuf::Arena* arena, Int64Value&& from) noexcept
+ : Int64Value(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -761,7 +736,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Int64Value)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -773,37 +747,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::int64_t value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT Int32Value final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Int32Value) */ {
+class PROTOBUF_EXPORT Int32Value final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.Int32Value) */ {
public:
inline Int32Value() : Int32Value(nullptr) {}
~Int32Value() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR Int32Value(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR Int32Value(
+ ::google::protobuf::internal::ConstantInitialized);
- inline Int32Value(const Int32Value& from)
- : Int32Value(nullptr, from) {}
- Int32Value(Int32Value&& from) noexcept
- : Int32Value() {
- *this = ::std::move(from);
- }
-
+ inline Int32Value(const Int32Value& from) : Int32Value(nullptr, from) {}
+ inline Int32Value(Int32Value&& from) noexcept
+ : Int32Value(nullptr, std::move(from)) {}
inline Int32Value& operator=(const Int32Value& from) {
CopyFrom(from);
return *this;
@@ -811,9 +782,9 @@
inline Int32Value& operator=(Int32Value&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -845,22 +816,17 @@
}
static inline const Int32Value* internal_default_instance() {
return reinterpret_cast<const Int32Value*>(
- &_Int32Value_default_instance_);
+ &_Int32Value_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 4;
-
- friend void swap(Int32Value& a, Int32Value& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 4;
+ friend void swap(Int32Value& a, Int32Value& b) { a.Swap(&b); }
inline void Swap(Int32Value* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -880,11 +846,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const Int32Value& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const Int32Value& from) {
- Int32Value::MergeImpl(*this, from);
- }
+ void MergeFrom(const Int32Value& from) { Int32Value::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -892,31 +860,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(Int32Value* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.Int32Value";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.Int32Value"; }
+
+ protected:
explicit Int32Value(::google::protobuf::Arena* arena);
Int32Value(::google::protobuf::Arena* arena, const Int32Value& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ Int32Value(::google::protobuf::Arena* arena, Int32Value&& from) noexcept
+ : Int32Value(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -933,7 +903,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.Int32Value)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -945,37 +914,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::int32_t value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT FloatValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FloatValue) */ {
+class PROTOBUF_EXPORT FloatValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.FloatValue) */ {
public:
inline FloatValue() : FloatValue(nullptr) {}
~FloatValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR FloatValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR FloatValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline FloatValue(const FloatValue& from)
- : FloatValue(nullptr, from) {}
- FloatValue(FloatValue&& from) noexcept
- : FloatValue() {
- *this = ::std::move(from);
- }
-
+ inline FloatValue(const FloatValue& from) : FloatValue(nullptr, from) {}
+ inline FloatValue(FloatValue&& from) noexcept
+ : FloatValue(nullptr, std::move(from)) {}
inline FloatValue& operator=(const FloatValue& from) {
CopyFrom(from);
return *this;
@@ -983,9 +949,9 @@
inline FloatValue& operator=(FloatValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1017,22 +983,17 @@
}
static inline const FloatValue* internal_default_instance() {
return reinterpret_cast<const FloatValue*>(
- &_FloatValue_default_instance_);
+ &_FloatValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 1;
-
- friend void swap(FloatValue& a, FloatValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 1;
+ friend void swap(FloatValue& a, FloatValue& b) { a.Swap(&b); }
inline void Swap(FloatValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1052,11 +1013,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const FloatValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const FloatValue& from) {
- FloatValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const FloatValue& from) { FloatValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1064,31 +1027,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(FloatValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.FloatValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.FloatValue"; }
+
+ protected:
explicit FloatValue(::google::protobuf::Arena* arena);
FloatValue(::google::protobuf::Arena* arena, const FloatValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ FloatValue(::google::protobuf::Arena* arena, FloatValue&& from) noexcept
+ : FloatValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -1105,7 +1070,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.FloatValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -1117,37 +1081,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
float value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT DoubleValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DoubleValue) */ {
+class PROTOBUF_EXPORT DoubleValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.DoubleValue) */ {
public:
inline DoubleValue() : DoubleValue(nullptr) {}
~DoubleValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR DoubleValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR DoubleValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline DoubleValue(const DoubleValue& from)
- : DoubleValue(nullptr, from) {}
- DoubleValue(DoubleValue&& from) noexcept
- : DoubleValue() {
- *this = ::std::move(from);
- }
-
+ inline DoubleValue(const DoubleValue& from) : DoubleValue(nullptr, from) {}
+ inline DoubleValue(DoubleValue&& from) noexcept
+ : DoubleValue(nullptr, std::move(from)) {}
inline DoubleValue& operator=(const DoubleValue& from) {
CopyFrom(from);
return *this;
@@ -1155,9 +1116,9 @@
inline DoubleValue& operator=(DoubleValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1189,22 +1150,17 @@
}
static inline const DoubleValue* internal_default_instance() {
return reinterpret_cast<const DoubleValue*>(
- &_DoubleValue_default_instance_);
+ &_DoubleValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 0;
-
- friend void swap(DoubleValue& a, DoubleValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 0;
+ friend void swap(DoubleValue& a, DoubleValue& b) { a.Swap(&b); }
inline void Swap(DoubleValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1224,11 +1180,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const DoubleValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const DoubleValue& from) {
- DoubleValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const DoubleValue& from) { DoubleValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1236,31 +1194,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(DoubleValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.DoubleValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.DoubleValue"; }
+
+ protected:
explicit DoubleValue(::google::protobuf::Arena* arena);
DoubleValue(::google::protobuf::Arena* arena, const DoubleValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ DoubleValue(::google::protobuf::Arena* arena, DoubleValue&& from) noexcept
+ : DoubleValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -1277,7 +1237,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.DoubleValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -1289,37 +1248,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
double value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT BytesValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.BytesValue) */ {
+class PROTOBUF_EXPORT BytesValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.BytesValue) */ {
public:
inline BytesValue() : BytesValue(nullptr) {}
~BytesValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR BytesValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR BytesValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline BytesValue(const BytesValue& from)
- : BytesValue(nullptr, from) {}
- BytesValue(BytesValue&& from) noexcept
- : BytesValue() {
- *this = ::std::move(from);
- }
-
+ inline BytesValue(const BytesValue& from) : BytesValue(nullptr, from) {}
+ inline BytesValue(BytesValue&& from) noexcept
+ : BytesValue(nullptr, std::move(from)) {}
inline BytesValue& operator=(const BytesValue& from) {
CopyFrom(from);
return *this;
@@ -1327,9 +1283,9 @@
inline BytesValue& operator=(BytesValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1361,22 +1317,17 @@
}
static inline const BytesValue* internal_default_instance() {
return reinterpret_cast<const BytesValue*>(
- &_BytesValue_default_instance_);
+ &_BytesValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 8;
-
- friend void swap(BytesValue& a, BytesValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 8;
+ friend void swap(BytesValue& a, BytesValue& b) { a.Swap(&b); }
inline void Swap(BytesValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1396,11 +1347,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const BytesValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const BytesValue& from) {
- BytesValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const BytesValue& from) { BytesValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1408,31 +1361,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(BytesValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.BytesValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.BytesValue"; }
+
+ protected:
explicit BytesValue(::google::protobuf::Arena* arena);
BytesValue(::google::protobuf::Arena* arena, const BytesValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ BytesValue(::google::protobuf::Arena* arena, BytesValue&& from) noexcept
+ : BytesValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -1455,7 +1410,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.BytesValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -1467,37 +1421,34 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
::google::protobuf::internal::ArenaStringPtr value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto;
-};// -------------------------------------------------------------------
+};
+// -------------------------------------------------------------------
-class PROTOBUF_EXPORT BoolValue final :
- public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.BoolValue) */ {
+class PROTOBUF_EXPORT BoolValue final : public ::google::protobuf::Message
+/* @@protoc_insertion_point(class_definition:google.protobuf.BoolValue) */ {
public:
inline BoolValue() : BoolValue(nullptr) {}
~BoolValue() override;
- template<typename = void>
- explicit PROTOBUF_CONSTEXPR BoolValue(::google::protobuf::internal::ConstantInitialized);
+ template <typename = void>
+ explicit PROTOBUF_CONSTEXPR BoolValue(
+ ::google::protobuf::internal::ConstantInitialized);
- inline BoolValue(const BoolValue& from)
- : BoolValue(nullptr, from) {}
- BoolValue(BoolValue&& from) noexcept
- : BoolValue() {
- *this = ::std::move(from);
- }
-
+ inline BoolValue(const BoolValue& from) : BoolValue(nullptr, from) {}
+ inline BoolValue(BoolValue&& from) noexcept
+ : BoolValue(nullptr, std::move(from)) {}
inline BoolValue& operator=(const BoolValue& from) {
CopyFrom(from);
return *this;
@@ -1505,9 +1456,9 @@
inline BoolValue& operator=(BoolValue&& from) noexcept {
if (this == &from) return *this;
if (GetArena() == from.GetArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
&& GetArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+#endif // !PROTOBUF_FORCE_COPY_IN_MOVE
) {
InternalSwap(&from);
} else {
@@ -1539,22 +1490,17 @@
}
static inline const BoolValue* internal_default_instance() {
return reinterpret_cast<const BoolValue*>(
- &_BoolValue_default_instance_);
+ &_BoolValue_default_instance_);
}
- static constexpr int kIndexInFileMessages =
- 6;
-
- friend void swap(BoolValue& a, BoolValue& b) {
- a.Swap(&b);
- }
+ static constexpr int kIndexInFileMessages = 6;
+ friend void swap(BoolValue& a, BoolValue& b) { a.Swap(&b); }
inline void Swap(BoolValue* other) {
if (other == this) return;
- #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
- if (GetArena() != nullptr &&
- GetArena() == other->GetArena()) {
- #else // PROTOBUF_FORCE_COPY_IN_SWAP
+#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+ if (GetArena() != nullptr && GetArena() == other->GetArena()) {
+#else // PROTOBUF_FORCE_COPY_IN_SWAP
if (GetArena() == other->GetArena()) {
- #endif // !PROTOBUF_FORCE_COPY_IN_SWAP
+#endif // !PROTOBUF_FORCE_COPY_IN_SWAP
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
@@ -1574,11 +1520,13 @@
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const BoolValue& from);
using ::google::protobuf::Message::MergeFrom;
- void MergeFrom( const BoolValue& from) {
- BoolValue::MergeImpl(*this, from);
- }
+ void MergeFrom(const BoolValue& from) { BoolValue::MergeImpl(*this, from); }
+
private:
- static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg);
+ static void MergeImpl(
+ ::google::protobuf::MessageLite& to_msg,
+ const ::google::protobuf::MessageLite& from_msg);
+
public:
ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
@@ -1586,31 +1534,33 @@
::size_t ByteSizeLong() const final;
const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
::uint8_t* _InternalSerialize(
- ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
+ ::uint8_t* target,
+ ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* arena);
void SharedDtor();
void InternalSwap(BoolValue* other);
-
- private:
+ private:
friend class ::google::protobuf::internal::AnyMetadata;
- static ::absl::string_view FullMessageName() {
- return "google.protobuf.BoolValue";
- }
- protected:
+ static ::absl::string_view FullMessageName() { return "google.protobuf.BoolValue"; }
+
+ protected:
explicit BoolValue(::google::protobuf::Arena* arena);
BoolValue(::google::protobuf::Arena* arena, const BoolValue& from);
- const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
- public:
+ BoolValue(::google::protobuf::Arena* arena, BoolValue&& from) noexcept
+ : BoolValue(arena) {
+ *this = ::std::move(from);
+ }
+ const ::google::protobuf::MessageLite::ClassData* GetClassData()
+ const final;
+ public:
::google::protobuf::Metadata GetMetadata() const final;
-
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
-
enum : int {
kValueFieldNumber = 1,
};
@@ -1627,7 +1577,6 @@
// @@protoc_insertion_point(class_scope:google.protobuf.BoolValue)
private:
class _Internal;
-
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<
0, 1, 0,
@@ -1639,14 +1588,13 @@
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
- struct PROTOBUF_EXPORT Impl_ {
-
- inline explicit constexpr Impl_(
- ::google::protobuf::internal::ConstantInitialized) noexcept;
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena);
- inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
- ::google::protobuf::Arena* arena, const Impl_& from);
+ struct Impl_ {
+ inline explicit constexpr Impl_(
+ ::google::protobuf::internal::ConstantInitialized) noexcept;
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena);
+ inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
+ ::google::protobuf::Arena* arena, const Impl_& from);
bool value_;
mutable ::google::protobuf::internal::CachedSize _cached_size_;
PROTOBUF_TSAN_DECLARE_MEMBER
@@ -1690,7 +1638,6 @@
}
inline void DoubleValue::_internal_set_value(double value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1717,7 +1664,6 @@
}
inline void FloatValue::_internal_set_value(float value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1744,7 +1690,6 @@
}
inline void Int64Value::_internal_set_value(::int64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1771,7 +1716,6 @@
}
inline void UInt64Value::_internal_set_value(::uint64_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1798,7 +1742,6 @@
}
inline void Int32Value::_internal_set_value(::int32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1825,7 +1768,6 @@
}
inline void UInt32Value::_internal_set_value(::uint32_t value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1852,7 +1794,6 @@
}
inline void BoolValue::_internal_set_value(bool value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_ = value;
}
@@ -1874,7 +1815,6 @@
inline PROTOBUF_ALWAYS_INLINE void StringValue::set_value(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.StringValue.value)
}
@@ -1889,12 +1829,10 @@
}
inline void StringValue::_internal_set_value(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_.Set(value, GetArena());
}
inline std::string* StringValue::_internal_mutable_value() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.value_.Mutable( GetArena());
}
inline std::string* StringValue::release_value() {
@@ -1931,7 +1869,6 @@
inline PROTOBUF_ALWAYS_INLINE void BytesValue::set_value(Arg_&& arg,
Args_... args) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
// @@protoc_insertion_point(field_set:google.protobuf.BytesValue.value)
}
@@ -1946,12 +1883,10 @@
}
inline void BytesValue::_internal_set_value(const std::string& value) {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
_impl_.value_.Set(value, GetArena());
}
inline std::string* BytesValue::_internal_mutable_value() {
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
- ;
return _impl_.value_.Mutable( GetArena());
}
inline std::string* BytesValue::release_value() {
diff --git a/src/libprotoc.map b/src/libprotoc.map
index 6f3a36e..24a5f76 100644
--- a/src/libprotoc.map
+++ b/src/libprotoc.map
@@ -3,6 +3,7 @@
extern "C++" {
*google*;
pb::*;
+ upb::*;
};
scc_info_*;
descriptor_table_*;
diff --git a/third_party/utf8_range/BUILD.bazel b/third_party/utf8_range/BUILD.bazel
index 439faaa..fdc1a49 100644
--- a/third_party/utf8_range/BUILD.bazel
+++ b/third_party/utf8_range/BUILD.bazel
@@ -23,9 +23,7 @@
filegroup(
name = "utf8_range_srcs",
srcs = [
- "naive.c",
- "range2-neon.c",
- "range2-sse.c",
+ "utf8_range.c",
"utf8_range.h",
],
visibility = ["//:__subpackages__"],
@@ -34,9 +32,7 @@
cc_library(
name = "utf8_range",
srcs = [
- "naive.c",
- "range2-neon.c",
- "range2-sse.c",
+ "utf8_range.c",
],
hdrs = ["utf8_range.h"],
strip_include_prefix = "/third_party/utf8_range",
@@ -48,16 +44,22 @@
hdrs = ["utf8_validity.h"],
strip_include_prefix = "/third_party/utf8_range",
deps = [
+ ":utf8_range",
"@com_google_absl//absl/strings",
],
)
cc_test(
name = "utf8_validity_test",
- srcs = ["utf8_validity_test.cc"],
+ srcs = [
+ "utf8_range.c",
+ "utf8_validity_test.cc",
+ ],
deps = [
+ ":utf8_range",
":utf8_validity",
"@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
diff --git a/third_party/utf8_range/CMakeLists.txt b/third_party/utf8_range/CMakeLists.txt
index 344952d..8d7a6e1 100644
--- a/third_party/utf8_range/CMakeLists.txt
+++ b/third_party/utf8_range/CMakeLists.txt
@@ -12,14 +12,12 @@
##
# Create the lightweight C library
add_library (utf8_range STATIC
- naive.c
- range2-neon.c
- range2-sse.c
+ utf8_range.c
)
##
# A heavier-weight C++ wrapper that supports Abseil.
-add_library (utf8_validity STATIC utf8_validity.cc)
+add_library (utf8_validity STATIC utf8_validity.cc utf8_range.c)
# Load Abseil dependency.
if (NOT TARGET absl::strings)
diff --git a/third_party/utf8_range/utf8_range.c b/third_party/utf8_range/utf8_range.c
new file mode 100644
index 0000000..9564b07
--- /dev/null
+++ b/third_party/utf8_range/utf8_range.c
@@ -0,0 +1,467 @@
+// Copyright 2023 Google LLC
+//
+// Use of this source code is governed by an MIT-style
+// license that can be found in the LICENSE file or at
+// https://opensource.org/licenses/MIT.
+
+/* This is a wrapper for the Google range-sse.cc algorithm which checks whether
+ * a sequence of bytes is a valid UTF-8 sequence and finds the longest valid
+ * prefix of the UTF-8 sequence.
+ *
+ * The key difference is that it checks for as much ASCII symbols as possible
+ * and then falls back to the range-sse.cc algorithm. The changes to the
+ * algorithm are cosmetic, mostly to trick the clang compiler to produce optimal
+ * code.
+ *
+ * For API see the utf8_validity.h header.
+ */
+#include "utf8_range.h"
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#ifdef __SSE4_1__
+#include <emmintrin.h>
+#include <smmintrin.h>
+#include <tmmintrin.h>
+#endif
+
+#if defined(__GNUC__)
+#define FORCE_INLINE_ATTR __attribute__((always_inline))
+#elif defined(_MSC_VER)
+#define FORCE_INLINE_ATTR __forceinline
+#else
+#define FORCE_INLINE_ATTR
+#endif
+
+static FORCE_INLINE_ATTR inline uint64_t utf8_range_UnalignedLoad64(
+ const void* p) {
+ uint64_t t;
+ memcpy(&t, p, sizeof t);
+ return t;
+}
+
+static FORCE_INLINE_ATTR inline int utf8_range_AsciiIsAscii(unsigned char c) {
+ return c < 128;
+}
+
+static FORCE_INLINE_ATTR inline int utf8_range_IsTrailByteOk(const char c) {
+ return (int8_t)(c) <= (int8_t)(0xBF);
+}
+
+/* If return_position is false then it returns 1 if |data| is a valid utf8
+ * sequence, otherwise returns 0.
+ * If return_position is set to true, returns the length in bytes of the prefix
+ of |data| that is all structurally valid UTF-8.
+ */
+static size_t utf8_range_ValidateUTF8Naive(const char* data, const char* end,
+ int return_position) {
+ /* We return err_pos in the loop which is always 0 if !return_position */
+ size_t err_pos = 0;
+ size_t codepoint_bytes = 0;
+ /* The early check is done because of early continue's on codepoints of all
+ * sizes, i.e. we first check for ascii and if it is, we call continue, then
+ * for 2 byte codepoints, etc. This is done in order to reduce indentation and
+ * improve readability of the codepoint validity check.
+ */
+ while (data + codepoint_bytes < end) {
+ if (return_position) {
+ err_pos += codepoint_bytes;
+ }
+ data += codepoint_bytes;
+ const size_t len = end - data;
+ const unsigned char byte1 = data[0];
+
+ /* We do not skip many ascii bytes at the same time as this function is
+ used for tail checking (< 16 bytes) and for non x86 platforms. We also
+ don't think that cases where non-ASCII codepoints are followed by ascii
+ happen often. For small strings it also introduces some penalty. For
+ purely ascii UTF8 strings (which is the overwhelming case) we call
+ SkipAscii function which is multiplatform and extremely fast.
+ */
+ /* [00..7F] ASCII -> 1 byte */
+ if (utf8_range_AsciiIsAscii(byte1)) {
+ codepoint_bytes = 1;
+ continue;
+ }
+ /* [C2..DF], [80..BF] -> 2 bytes */
+ if (len >= 2 && byte1 >= 0xC2 && byte1 <= 0xDF &&
+ utf8_range_IsTrailByteOk(data[1])) {
+ codepoint_bytes = 2;
+ continue;
+ }
+ if (len >= 3) {
+ const unsigned char byte2 = data[1];
+ const unsigned char byte3 = data[2];
+
+ /* Is byte2, byte3 between [0x80, 0xBF]
+ * Check for 0x80 was done above.
+ */
+ if (!utf8_range_IsTrailByteOk(byte2) ||
+ !utf8_range_IsTrailByteOk(byte3)) {
+ return err_pos;
+ }
+
+ if (/* E0, A0..BF, 80..BF */
+ ((byte1 == 0xE0 && byte2 >= 0xA0) ||
+ /* E1..EC, 80..BF, 80..BF */
+ (byte1 >= 0xE1 && byte1 <= 0xEC) ||
+ /* ED, 80..9F, 80..BF */
+ (byte1 == 0xED && byte2 <= 0x9F) ||
+ /* EE..EF, 80..BF, 80..BF */
+ (byte1 >= 0xEE && byte1 <= 0xEF))) {
+ codepoint_bytes = 3;
+ continue;
+ }
+ if (len >= 4) {
+ const unsigned char byte4 = data[3];
+ /* Is byte4 between 0x80 ~ 0xBF */
+ if (!utf8_range_IsTrailByteOk(byte4)) {
+ return err_pos;
+ }
+
+ if (/* F0, 90..BF, 80..BF, 80..BF */
+ ((byte1 == 0xF0 && byte2 >= 0x90) ||
+ /* F1..F3, 80..BF, 80..BF, 80..BF */
+ (byte1 >= 0xF1 && byte1 <= 0xF3) ||
+ /* F4, 80..8F, 80..BF, 80..BF */
+ (byte1 == 0xF4 && byte2 <= 0x8F))) {
+ codepoint_bytes = 4;
+ continue;
+ }
+ }
+ }
+ return err_pos;
+ }
+ if (return_position) {
+ err_pos += codepoint_bytes;
+ }
+ /* if return_position is false, this returns 1.
+ * if return_position is true, this returns err_pos.
+ */
+ return err_pos + (1 - return_position);
+}
+
+#ifdef __SSE4_1__
+/* Returns the number of bytes needed to skip backwards to get to the first
+ byte of codepoint.
+ */
+static inline int utf8_range_CodepointSkipBackwards(int32_t codepoint_word) {
+ const int8_t* const codepoint = (const int8_t*)(&codepoint_word);
+ if (!utf8_range_IsTrailByteOk(codepoint[3])) {
+ return 1;
+ } else if (!utf8_range_IsTrailByteOk(codepoint[2])) {
+ return 2;
+ } else if (!utf8_range_IsTrailByteOk(codepoint[1])) {
+ return 3;
+ }
+ return 0;
+}
+#endif // __SSE4_1__
+
+/* Skipping over ASCII as much as possible, per 8 bytes. It is intentional
+ as most strings to check for validity consist only of 1 byte codepoints.
+ */
+static inline const char* utf8_range_SkipAscii(const char* data,
+ const char* end) {
+ while (8 <= end - data &&
+ (utf8_range_UnalignedLoad64(data) & 0x8080808080808080) == 0) {
+ data += 8;
+ }
+ while (data < end && utf8_range_AsciiIsAscii(*data)) {
+ ++data;
+ }
+ return data;
+}
+
+static FORCE_INLINE_ATTR inline size_t utf8_range_Validate(
+ const char* data, size_t len, int return_position) {
+ if (len == 0) return 1 - return_position;
+ const char* const end = data + len;
+ data = utf8_range_SkipAscii(data, end);
+ /* SIMD algorithm always outperforms the naive version for any data of
+ length >=16.
+ */
+ if (end - data < 16) {
+ return (return_position ? (data - (end - len)) : 0) +
+ utf8_range_ValidateUTF8Naive(data, end, return_position);
+ }
+#ifndef __SSE4_1__
+ return (return_position ? (data - (end - len)) : 0) +
+ utf8_range_ValidateUTF8Naive(data, end, return_position);
+#else
+ /* This code checks that utf-8 ranges are structurally valid 16 bytes at once
+ * using superscalar instructions.
+ * The mapping between ranges of codepoint and their corresponding utf-8
+ * sequences is below.
+ */
+
+ /*
+ * U+0000...U+007F 00...7F
+ * U+0080...U+07FF C2...DF 80...BF
+ * U+0800...U+0FFF E0 A0...BF 80...BF
+ * U+1000...U+CFFF E1...EC 80...BF 80...BF
+ * U+D000...U+D7FF ED 80...9F 80...BF
+ * U+E000...U+FFFF EE...EF 80...BF 80...BF
+ * U+10000...U+3FFFF F0 90...BF 80...BF 80...BF
+ * U+40000...U+FFFFF F1...F3 80...BF 80...BF 80...BF
+ * U+100000...U+10FFFF F4 80...8F 80...BF 80...BF
+ */
+
+ /* First we compute the type for each byte, as given by the table below.
+ * This type will be used as an index later on.
+ */
+
+ /*
+ * Index Min Max Byte Type
+ * 0 00 7F Single byte sequence
+ * 1,2,3 80 BF Second, third and fourth byte for many of the sequences.
+ * 4 A0 BF Second byte after E0
+ * 5 80 9F Second byte after ED
+ * 6 90 BF Second byte after F0
+ * 7 80 8F Second byte after F4
+ * 8 C2 F4 First non ASCII byte
+ * 9..15 7F 80 Invalid byte
+ */
+
+ /* After the first step we compute the index for all bytes, then we permute
+ the bytes according to their indices to check the ranges from the range
+ table.
+ * The range for a given type can be found in the range_min_table and
+ range_max_table, the range for type/index X is in range_min_table[X] ...
+ range_max_table[X].
+ */
+
+ /* Algorithm:
+ * Put index zero to all bytes.
+ * Find all non ASCII characters, give them index 8.
+ * For each tail byte in a codepoint sequence, give it an index corresponding
+ to the 1 based index from the end.
+ * If the first byte of the codepoint is in the [C0...DF] range, we write
+ index 1 in the following byte.
+ * If the first byte of the codepoint is in the range [E0...EF], we write
+ indices 2 and 1 in the next two bytes.
+ * If the first byte of the codepoint is in the range [F0...FF] we write
+ indices 3,2,1 into the next three bytes.
+ * For finding the number of bytes we need to look at high nibbles (4 bits)
+ and do the lookup from the table, it can be done with shift by 4 + shuffle
+ instructions. We call it `first_len`.
+ * Then we shift first_len by 8 bits to get the indices of the 2nd bytes.
+ * Saturating sub 1 and shift by 8 bits to get the indices of the 3rd bytes.
+ * Again to get the indices of the 4th bytes.
+ * Take OR of all that 4 values and check within range.
+ */
+ /* For example:
+ * input C3 80 68 E2 80 20 A6 F0 A0 80 AC 20 F0 93 80 80
+ * first_len 1 0 0 2 0 0 0 3 0 0 0 0 3 0 0 0
+ * 1st byte 8 0 0 8 0 0 0 8 0 0 0 0 8 0 0 0
+ * 2nd byte 0 1 0 0 2 0 0 0 3 0 0 0 0 3 0 0 // Shift + sub
+ * 3rd byte 0 0 0 0 0 1 0 0 0 2 0 0 0 0 2 0 // Shift + sub
+ * 4th byte 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 // Shift + sub
+ * Index 8 1 0 8 2 1 0 8 3 2 1 0 8 3 2 1 // OR of results
+ */
+
+ /* Checking for errors:
+ * Error checking is done by looking up the high nibble (4 bits) of each byte
+ against an error checking table.
+ * Because the lookup value for the second byte depends of the value of the
+ first byte in codepoint, we use saturated operations to adjust the index.
+ * Specifically we need to add 2 for E0, 3 for ED, 3 for F0 and 4 for F4 to
+ match the correct index.
+ * If we subtract from all bytes EF then EO -> 241, ED -> 254, F0 -> 1,
+ F4 -> 5
+ * Do saturating sub 240, then E0 -> 1, ED -> 14 and we can do lookup to
+ match the adjustment
+ * Add saturating 112, then F0 -> 113, F4 -> 117, all that were > 16 will
+ be more 128 and lookup in ef_fe_table will return 0 but for F0
+ and F4 it will be 4 and 5 accordingly
+ */
+ /*
+ * Then just check the appropriate ranges with greater/smaller equal
+ instructions. Check tail with a naive algorithm.
+ * To save from previous 16 byte checks we just align previous_first_len to
+ get correct continuations of the codepoints.
+ */
+
+ /*
+ * Map high nibble of "First Byte" to legal character length minus 1
+ * 0x00 ~ 0xBF --> 0
+ * 0xC0 ~ 0xDF --> 1
+ * 0xE0 ~ 0xEF --> 2
+ * 0xF0 ~ 0xFF --> 3
+ */
+ const __m128i first_len_table =
+ _mm_setr_epi8(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3);
+
+ /* Map "First Byte" to 8-th item of range table (0xC2 ~ 0xF4) */
+ const __m128i first_range_table =
+ _mm_setr_epi8(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8);
+
+ /*
+ * Range table, map range index to min and max values
+ */
+ const __m128i range_min_table =
+ _mm_setr_epi8(0x00, 0x80, 0x80, 0x80, 0xA0, 0x80, 0x90, 0x80, 0xC2, 0x7F,
+ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F);
+
+ const __m128i range_max_table =
+ _mm_setr_epi8(0x7F, 0xBF, 0xBF, 0xBF, 0xBF, 0x9F, 0xBF, 0x8F, 0xF4, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
+
+ /*
+ * Tables for fast handling of four special First Bytes(E0,ED,F0,F4), after
+ * which the Second Byte are not 80~BF. It contains "range index adjustment".
+ * +------------+---------------+------------------+----------------+
+ * | First Byte | original range| range adjustment | adjusted range |
+ * +------------+---------------+------------------+----------------+
+ * | E0 | 2 | 2 | 4 |
+ * +------------+---------------+------------------+----------------+
+ * | ED | 2 | 3 | 5 |
+ * +------------+---------------+------------------+----------------+
+ * | F0 | 3 | 3 | 6 |
+ * +------------+---------------+------------------+----------------+
+ * | F4 | 4 | 4 | 8 |
+ * +------------+---------------+------------------+----------------+
+ */
+
+ /* df_ee_table[1] -> E0, df_ee_table[14] -> ED as ED - E0 = 13 */
+ // The values represent the adjustment in the Range Index table for a correct
+ // index.
+ const __m128i df_ee_table =
+ _mm_setr_epi8(0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0);
+
+ /* ef_fe_table[1] -> F0, ef_fe_table[5] -> F4, F4 - F0 = 4 */
+ // The values represent the adjustment in the Range Index table for a correct
+ // index.
+ const __m128i ef_fe_table =
+ _mm_setr_epi8(0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+ __m128i prev_input = _mm_set1_epi8(0);
+ __m128i prev_first_len = _mm_set1_epi8(0);
+ __m128i error = _mm_set1_epi8(0);
+ while (end - data >= 16) {
+ const __m128i input =
+ _mm_loadu_si128((const __m128i*)(data));
+
+ /* high_nibbles = input >> 4 */
+ const __m128i high_nibbles =
+ _mm_and_si128(_mm_srli_epi16(input, 4), _mm_set1_epi8(0x0F));
+
+ /* first_len = legal character length minus 1 */
+ /* 0 for 00~7F, 1 for C0~DF, 2 for E0~EF, 3 for F0~FF */
+ /* first_len = first_len_table[high_nibbles] */
+ __m128i first_len = _mm_shuffle_epi8(first_len_table, high_nibbles);
+
+ /* First Byte: set range index to 8 for bytes within 0xC0 ~ 0xFF */
+ /* range = first_range_table[high_nibbles] */
+ __m128i range = _mm_shuffle_epi8(first_range_table, high_nibbles);
+
+ /* Second Byte: set range index to first_len */
+ /* 0 for 00~7F, 1 for C0~DF, 2 for E0~EF, 3 for F0~FF */
+ /* range |= (first_len, prev_first_len) << 1 byte */
+ range = _mm_or_si128(range, _mm_alignr_epi8(first_len, prev_first_len, 15));
+
+ /* Third Byte: set range index to saturate_sub(first_len, 1) */
+ /* 0 for 00~7F, 0 for C0~DF, 1 for E0~EF, 2 for F0~FF */
+ __m128i tmp1;
+ __m128i tmp2;
+ /* tmp1 = saturate_sub(first_len, 1) */
+ tmp1 = _mm_subs_epu8(first_len, _mm_set1_epi8(1));
+ /* tmp2 = saturate_sub(prev_first_len, 1) */
+ tmp2 = _mm_subs_epu8(prev_first_len, _mm_set1_epi8(1));
+ /* range |= (tmp1, tmp2) << 2 bytes */
+ range = _mm_or_si128(range, _mm_alignr_epi8(tmp1, tmp2, 14));
+
+ /* Fourth Byte: set range index to saturate_sub(first_len, 2) */
+ /* 0 for 00~7F, 0 for C0~DF, 0 for E0~EF, 1 for F0~FF */
+ /* tmp1 = saturate_sub(first_len, 2) */
+ tmp1 = _mm_subs_epu8(first_len, _mm_set1_epi8(2));
+ /* tmp2 = saturate_sub(prev_first_len, 2) */
+ tmp2 = _mm_subs_epu8(prev_first_len, _mm_set1_epi8(2));
+ /* range |= (tmp1, tmp2) << 3 bytes */
+ range = _mm_or_si128(range, _mm_alignr_epi8(tmp1, tmp2, 13));
+
+ /*
+ * Now we have below range indices calculated
+ * Correct cases:
+ * - 8 for C0~FF
+ * - 3 for 1st byte after F0~FF
+ * - 2 for 1st byte after E0~EF or 2nd byte after F0~FF
+ * - 1 for 1st byte after C0~DF or 2nd byte after E0~EF or
+ * 3rd byte after F0~FF
+ * - 0 for others
+ * Error cases:
+ * >9 for non ascii First Byte overlapping
+ * E.g., F1 80 C2 90 --> 8 3 10 2, where 10 indicates error
+ */
+
+ /* Adjust Second Byte range for special First Bytes(E0,ED,F0,F4) */
+ /* Overlaps lead to index 9~15, which are illegal in range table */
+ __m128i shift1;
+ __m128i pos;
+ __m128i range2;
+ /* shift1 = (input, prev_input) << 1 byte */
+ shift1 = _mm_alignr_epi8(input, prev_input, 15);
+ pos = _mm_sub_epi8(shift1, _mm_set1_epi8(0xEF));
+ /*
+ * shift1: | EF F0 ... FE | FF 00 ... ... DE | DF E0 ... EE |
+ * pos: | 0 1 15 | 16 17 239| 240 241 255|
+ * pos-240: | 0 0 0 | 0 0 0 | 0 1 15 |
+ * pos+112: | 112 113 127| >= 128 | >= 128 |
+ */
+ tmp1 = _mm_subs_epu8(pos, _mm_set1_epi8(-16));
+ range2 = _mm_shuffle_epi8(df_ee_table, tmp1);
+ tmp2 = _mm_adds_epu8(pos, _mm_set1_epi8(112));
+ range2 = _mm_add_epi8(range2, _mm_shuffle_epi8(ef_fe_table, tmp2));
+
+ range = _mm_add_epi8(range, range2);
+
+ /* Load min and max values per calculated range index */
+ __m128i min_range = _mm_shuffle_epi8(range_min_table, range);
+ __m128i max_range = _mm_shuffle_epi8(range_max_table, range);
+
+ /* Check value range */
+ if (return_position) {
+ error = _mm_cmplt_epi8(input, min_range);
+ error = _mm_or_si128(error, _mm_cmpgt_epi8(input, max_range));
+ /* 5% performance drop from this conditional branch */
+ if (!_mm_testz_si128(error, error)) {
+ break;
+ }
+ } else {
+ error = _mm_or_si128(error, _mm_cmplt_epi8(input, min_range));
+ error = _mm_or_si128(error, _mm_cmpgt_epi8(input, max_range));
+ }
+
+ prev_input = input;
+ prev_first_len = first_len;
+
+ data += 16;
+ }
+ /* If we got to the end, we don't need to skip any bytes backwards */
+ if (return_position && (data - (end - len)) == 0) {
+ return utf8_range_ValidateUTF8Naive(data, end, return_position);
+ }
+ /* Find previous codepoint (not 80~BF) */
+ data -= utf8_range_CodepointSkipBackwards(_mm_extract_epi32(prev_input, 3));
+ if (return_position) {
+ return (data - (end - len)) +
+ utf8_range_ValidateUTF8Naive(data, end, return_position);
+ }
+ /* Test if there was any error */
+ if (!_mm_testz_si128(error, error)) {
+ return 0;
+ }
+ /* Check the tail */
+ return utf8_range_ValidateUTF8Naive(data, end, return_position);
+#endif
+}
+
+int utf8_range_IsValid(const char* data, size_t len) {
+ return utf8_range_Validate(data, len, /*return_position=*/0) != 0;
+}
+
+size_t utf8_range_ValidPrefix(const char* data, size_t len) {
+ return utf8_range_Validate(data, len, /*return_position=*/1);
+}
diff --git a/third_party/utf8_range/utf8_range.h b/third_party/utf8_range/utf8_range.h
index 24d5c77..d7c2326 100644
--- a/third_party/utf8_range/utf8_range.h
+++ b/third_party/utf8_range/utf8_range.h
@@ -1,18 +1,19 @@
#ifndef THIRD_PARTY_UTF8_RANGE_UTF8_RANGE_H_
#define THIRD_PARTY_UTF8_RANGE_UTF8_RANGE_H_
+#include <stddef.h>
+
#ifdef __cplusplus
extern "C" {
#endif
-#if (defined(__ARM_NEON) && defined(__aarch64__)) || defined(__SSE4_1__)
-int utf8_range2(const unsigned char* data, int len);
-#else
-int utf8_naive(const unsigned char* data, int len);
-static inline int utf8_range2(const unsigned char* data, int len) {
- return utf8_naive(data, len);
-}
-#endif
+// Returns 1 if the sequence of characters is a valid UTF-8 sequence, otherwise
+// 0.
+int utf8_range_IsValid(const char* data, size_t len);
+
+// Returns the length in bytes of the prefix of str that is all
+// structurally valid UTF-8.
+size_t utf8_range_ValidPrefix(const char* data, size_t len);
#ifdef __cplusplus
} // extern "C"
diff --git a/third_party/utf8_range/utf8_validity.cc b/third_party/utf8_range/utf8_validity.cc
index 9e94576..4f4574e 100644
--- a/third_party/utf8_range/utf8_validity.cc
+++ b/third_party/utf8_range/utf8_validity.cc
@@ -15,446 +15,22 @@
*
* For API see the utf8_validity.h header.
*/
+
#include "utf8_validity.h"
#include <cstddef>
-#include <cstdint>
-#include "absl/strings/ascii.h"
#include "absl/strings/string_view.h"
-
-#ifdef __SSE4_1__
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include <tmmintrin.h>
-#endif
+#include "utf8_range.h"
namespace utf8_range {
-namespace {
-
-inline uint64_t UNALIGNED_LOAD64(const void* p) {
- uint64_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-
-inline bool TrailByteOk(const char c) {
- return static_cast<int8_t>(c) <= static_cast<int8_t>(0xBF);
-}
-
-/* If ReturnPosition is false then it returns 1 if |data| is a valid utf8
- * sequence, otherwise returns 0.
- * If ReturnPosition is set to true, returns the length in bytes of the prefix
- of |data| that is all structurally valid UTF-8.
- */
-template <bool ReturnPosition>
-size_t ValidUTF8Span(const char* data, const char* end) {
- /* We return err_pos in the loop which is always 0 if !ReturnPosition */
- size_t err_pos = 0;
- size_t codepoint_bytes = 0;
- /* The early check is done because of early continue's on codepoints of all
- * sizes, i.e. we first check for ascii and if it is, we call continue, then
- * for 2 byte codepoints, etc. This is done in order to reduce indentation and
- * improve readability of the codepoint validity check.
- */
- while (data + codepoint_bytes < end) {
- if (ReturnPosition) {
- err_pos += codepoint_bytes;
- }
- data += codepoint_bytes;
- const size_t len = end - data;
- const unsigned char byte1 = data[0];
-
- /* We do not skip many ascii bytes at the same time as this function is
- used for tail checking (< 16 bytes) and for non x86 platforms. We also
- don't think that cases where non-ASCII codepoints are followed by ascii
- happen often. For small strings it also introduces some penalty. For
- purely ascii UTF8 strings (which is the overwhelming case) we call
- SkipAscii function which is multiplatform and extremely fast.
- */
- /* [00..7F] ASCII -> 1 byte */
- if (absl::ascii_isascii(byte1)) {
- codepoint_bytes = 1;
- continue;
- }
- /* [C2..DF], [80..BF] -> 2 bytes */
- if (len >= 2 && byte1 >= 0xC2 && byte1 <= 0xDF && TrailByteOk(data[1])) {
- codepoint_bytes = 2;
- continue;
- }
- if (len >= 3) {
- const unsigned char byte2 = data[1];
- const unsigned char byte3 = data[2];
-
- /* Is byte2, byte3 between [0x80, 0xBF]
- * Check for 0x80 was done above.
- */
- if (!TrailByteOk(byte2) || !TrailByteOk(byte3)) {
- return err_pos;
- }
-
- if (/* E0, A0..BF, 80..BF */
- ((byte1 == 0xE0 && byte2 >= 0xA0) ||
- /* E1..EC, 80..BF, 80..BF */
- (byte1 >= 0xE1 && byte1 <= 0xEC) ||
- /* ED, 80..9F, 80..BF */
- (byte1 == 0xED && byte2 <= 0x9F) ||
- /* EE..EF, 80..BF, 80..BF */
- (byte1 >= 0xEE && byte1 <= 0xEF))) {
- codepoint_bytes = 3;
- continue;
- }
- if (len >= 4) {
- const unsigned char byte4 = data[3];
- /* Is byte4 between 0x80 ~ 0xBF */
- if (!TrailByteOk(byte4)) {
- return err_pos;
- }
-
- if (/* F0, 90..BF, 80..BF, 80..BF */
- ((byte1 == 0xF0 && byte2 >= 0x90) ||
- /* F1..F3, 80..BF, 80..BF, 80..BF */
- (byte1 >= 0xF1 && byte1 <= 0xF3) ||
- /* F4, 80..8F, 80..BF, 80..BF */
- (byte1 == 0xF4 && byte2 <= 0x8F))) {
- codepoint_bytes = 4;
- continue;
- }
- }
- }
- return err_pos;
- }
- if (ReturnPosition) {
- err_pos += codepoint_bytes;
- }
- /* if ReturnPosition is false, this returns 1.
- * if ReturnPosition is true, this returns err_pos.
- */
- return err_pos + (1 - ReturnPosition);
-}
-
-#ifdef __SSE4_1__
-/* Returns the number of bytes needed to skip backwards to get to the first
- byte of codepoint.
- */
-inline int CodepointSkipBackwards(int32_t codepoint_word) {
- const int8_t* const codepoint =
- reinterpret_cast<const int8_t*>(&codepoint_word);
- if (!TrailByteOk(codepoint[3])) {
- return 1;
- } else if (!TrailByteOk(codepoint[2])) {
- return 2;
- } else if (!TrailByteOk(codepoint[1])) {
- return 3;
- }
- return 0;
-}
-#endif // __SSE4_1__
-
-/* Skipping over ASCII as much as possible, per 8 bytes. It is intentional
- as most strings to check for validity consist only of 1 byte codepoints.
- */
-inline const char* SkipAscii(const char* data, const char* end) {
- while (8 <= end - data &&
- (UNALIGNED_LOAD64(data) & 0x8080808080808080) == 0) {
- data += 8;
- }
- while (data < end && absl::ascii_isascii(*data)) {
- ++data;
- }
- return data;
-}
-
-template <bool ReturnPosition>
-size_t ValidUTF8(const char* data, size_t len) {
- if (len == 0) return 1 - ReturnPosition;
- const char* const end = data + len;
- data = SkipAscii(data, end);
- /* SIMD algorithm always outperforms the naive version for any data of
- length >=16.
- */
- if (end - data < 16) {
- return (ReturnPosition ? (data - (end - len)) : 0) +
- ValidUTF8Span<ReturnPosition>(data, end);
- }
-#ifndef __SSE4_1__
- return (ReturnPosition ? (data - (end - len)) : 0) +
- ValidUTF8Span<ReturnPosition>(data, end);
-#else
- /* This code checks that utf-8 ranges are structurally valid 16 bytes at once
- * using superscalar instructions.
- * The mapping between ranges of codepoint and their corresponding utf-8
- * sequences is below.
- */
-
- /*
- * U+0000...U+007F 00...7F
- * U+0080...U+07FF C2...DF 80...BF
- * U+0800...U+0FFF E0 A0...BF 80...BF
- * U+1000...U+CFFF E1...EC 80...BF 80...BF
- * U+D000...U+D7FF ED 80...9F 80...BF
- * U+E000...U+FFFF EE...EF 80...BF 80...BF
- * U+10000...U+3FFFF F0 90...BF 80...BF 80...BF
- * U+40000...U+FFFFF F1...F3 80...BF 80...BF 80...BF
- * U+100000...U+10FFFF F4 80...8F 80...BF 80...BF
- */
-
- /* First we compute the type for each byte, as given by the table below.
- * This type will be used as an index later on.
- */
-
- /*
- * Index Min Max Byte Type
- * 0 00 7F Single byte sequence
- * 1,2,3 80 BF Second, third and fourth byte for many of the sequences.
- * 4 A0 BF Second byte after E0
- * 5 80 9F Second byte after ED
- * 6 90 BF Second byte after F0
- * 7 80 8F Second byte after F4
- * 8 C2 F4 First non ASCII byte
- * 9..15 7F 80 Invalid byte
- */
-
- /* After the first step we compute the index for all bytes, then we permute
- the bytes according to their indices to check the ranges from the range
- table.
- * The range for a given type can be found in the range_min_table and
- range_max_table, the range for type/index X is in range_min_table[X] ...
- range_max_table[X].
- */
-
- /* Algorithm:
- * Put index zero to all bytes.
- * Find all non ASCII characters, give them index 8.
- * For each tail byte in a codepoint sequence, give it an index corresponding
- to the 1 based index from the end.
- * If the first byte of the codepoint is in the [C0...DF] range, we write
- index 1 in the following byte.
- * If the first byte of the codepoint is in the range [E0...EF], we write
- indices 2 and 1 in the next two bytes.
- * If the first byte of the codepoint is in the range [F0...FF] we write
- indices 3,2,1 into the next three bytes.
- * For finding the number of bytes we need to look at high nibbles (4 bits)
- and do the lookup from the table, it can be done with shift by 4 + shuffle
- instructions. We call it `first_len`.
- * Then we shift first_len by 8 bits to get the indices of the 2nd bytes.
- * Saturating sub 1 and shift by 8 bits to get the indices of the 3rd bytes.
- * Again to get the indices of the 4th bytes.
- * Take OR of all that 4 values and check within range.
- */
- /* For example:
- * input C3 80 68 E2 80 20 A6 F0 A0 80 AC 20 F0 93 80 80
- * first_len 1 0 0 2 0 0 0 3 0 0 0 0 3 0 0 0
- * 1st byte 8 0 0 8 0 0 0 8 0 0 0 0 8 0 0 0
- * 2nd byte 0 1 0 0 2 0 0 0 3 0 0 0 0 3 0 0 // Shift + sub
- * 3rd byte 0 0 0 0 0 1 0 0 0 2 0 0 0 0 2 0 // Shift + sub
- * 4th byte 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 // Shift + sub
- * Index 8 1 0 8 2 1 0 8 3 2 1 0 8 3 2 1 // OR of results
- */
-
- /* Checking for errors:
- * Error checking is done by looking up the high nibble (4 bits) of each byte
- against an error checking table.
- * Because the lookup value for the second byte depends of the value of the
- first byte in codepoint, we use saturated operations to adjust the index.
- * Specifically we need to add 2 for E0, 3 for ED, 3 for F0 and 4 for F4 to
- match the correct index.
- * If we subtract from all bytes EF then EO -> 241, ED -> 254, F0 -> 1,
- F4 -> 5
- * Do saturating sub 240, then E0 -> 1, ED -> 14 and we can do lookup to
- match the adjustment
- * Add saturating 112, then F0 -> 113, F4 -> 117, all that were > 16 will
- be more 128 and lookup in ef_fe_table will return 0 but for F0
- and F4 it will be 4 and 5 accordingly
- */
- /*
- * Then just check the appropriate ranges with greater/smaller equal
- instructions. Check tail with a naive algorithm.
- * To save from previous 16 byte checks we just align previous_first_len to
- get correct continuations of the codepoints.
- */
-
- /*
- * Map high nibble of "First Byte" to legal character length minus 1
- * 0x00 ~ 0xBF --> 0
- * 0xC0 ~ 0xDF --> 1
- * 0xE0 ~ 0xEF --> 2
- * 0xF0 ~ 0xFF --> 3
- */
- const __m128i first_len_table =
- _mm_setr_epi8(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3);
-
- /* Map "First Byte" to 8-th item of range table (0xC2 ~ 0xF4) */
- const __m128i first_range_table =
- _mm_setr_epi8(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8);
-
- /*
- * Range table, map range index to min and max values
- */
- const __m128i range_min_table =
- _mm_setr_epi8(0x00, 0x80, 0x80, 0x80, 0xA0, 0x80, 0x90, 0x80, 0xC2, 0x7F,
- 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F);
-
- const __m128i range_max_table =
- _mm_setr_epi8(0x7F, 0xBF, 0xBF, 0xBF, 0xBF, 0x9F, 0xBF, 0x8F, 0xF4, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
-
- /*
- * Tables for fast handling of four special First Bytes(E0,ED,F0,F4), after
- * which the Second Byte are not 80~BF. It contains "range index adjustment".
- * +------------+---------------+------------------+----------------+
- * | First Byte | original range| range adjustment | adjusted range |
- * +------------+---------------+------------------+----------------+
- * | E0 | 2 | 2 | 4 |
- * +------------+---------------+------------------+----------------+
- * | ED | 2 | 3 | 5 |
- * +------------+---------------+------------------+----------------+
- * | F0 | 3 | 3 | 6 |
- * +------------+---------------+------------------+----------------+
- * | F4 | 4 | 4 | 8 |
- * +------------+---------------+------------------+----------------+
- */
-
- /* df_ee_table[1] -> E0, df_ee_table[14] -> ED as ED - E0 = 13 */
- // The values represent the adjustment in the Range Index table for a correct
- // index.
- const __m128i df_ee_table =
- _mm_setr_epi8(0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0);
-
- /* ef_fe_table[1] -> F0, ef_fe_table[5] -> F4, F4 - F0 = 4 */
- // The values represent the adjustment in the Range Index table for a correct
- // index.
- const __m128i ef_fe_table =
- _mm_setr_epi8(0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-
- __m128i prev_input = _mm_set1_epi8(0);
- __m128i prev_first_len = _mm_set1_epi8(0);
- __m128i error = _mm_set1_epi8(0);
- while (end - data >= 16) {
- const __m128i input =
- _mm_loadu_si128(reinterpret_cast<const __m128i*>(data));
-
- /* high_nibbles = input >> 4 */
- const __m128i high_nibbles =
- _mm_and_si128(_mm_srli_epi16(input, 4), _mm_set1_epi8(0x0F));
-
- /* first_len = legal character length minus 1 */
- /* 0 for 00~7F, 1 for C0~DF, 2 for E0~EF, 3 for F0~FF */
- /* first_len = first_len_table[high_nibbles] */
- __m128i first_len = _mm_shuffle_epi8(first_len_table, high_nibbles);
-
- /* First Byte: set range index to 8 for bytes within 0xC0 ~ 0xFF */
- /* range = first_range_table[high_nibbles] */
- __m128i range = _mm_shuffle_epi8(first_range_table, high_nibbles);
-
- /* Second Byte: set range index to first_len */
- /* 0 for 00~7F, 1 for C0~DF, 2 for E0~EF, 3 for F0~FF */
- /* range |= (first_len, prev_first_len) << 1 byte */
- range = _mm_or_si128(range, _mm_alignr_epi8(first_len, prev_first_len, 15));
-
- /* Third Byte: set range index to saturate_sub(first_len, 1) */
- /* 0 for 00~7F, 0 for C0~DF, 1 for E0~EF, 2 for F0~FF */
- __m128i tmp1;
- __m128i tmp2;
- /* tmp1 = saturate_sub(first_len, 1) */
- tmp1 = _mm_subs_epu8(first_len, _mm_set1_epi8(1));
- /* tmp2 = saturate_sub(prev_first_len, 1) */
- tmp2 = _mm_subs_epu8(prev_first_len, _mm_set1_epi8(1));
- /* range |= (tmp1, tmp2) << 2 bytes */
- range = _mm_or_si128(range, _mm_alignr_epi8(tmp1, tmp2, 14));
-
- /* Fourth Byte: set range index to saturate_sub(first_len, 2) */
- /* 0 for 00~7F, 0 for C0~DF, 0 for E0~EF, 1 for F0~FF */
- /* tmp1 = saturate_sub(first_len, 2) */
- tmp1 = _mm_subs_epu8(first_len, _mm_set1_epi8(2));
- /* tmp2 = saturate_sub(prev_first_len, 2) */
- tmp2 = _mm_subs_epu8(prev_first_len, _mm_set1_epi8(2));
- /* range |= (tmp1, tmp2) << 3 bytes */
- range = _mm_or_si128(range, _mm_alignr_epi8(tmp1, tmp2, 13));
-
- /*
- * Now we have below range indices calculated
- * Correct cases:
- * - 8 for C0~FF
- * - 3 for 1st byte after F0~FF
- * - 2 for 1st byte after E0~EF or 2nd byte after F0~FF
- * - 1 for 1st byte after C0~DF or 2nd byte after E0~EF or
- * 3rd byte after F0~FF
- * - 0 for others
- * Error cases:
- * >9 for non ascii First Byte overlapping
- * E.g., F1 80 C2 90 --> 8 3 10 2, where 10 indicates error
- */
-
- /* Adjust Second Byte range for special First Bytes(E0,ED,F0,F4) */
- /* Overlaps lead to index 9~15, which are illegal in range table */
- __m128i shift1;
- __m128i pos;
- __m128i range2;
- /* shift1 = (input, prev_input) << 1 byte */
- shift1 = _mm_alignr_epi8(input, prev_input, 15);
- pos = _mm_sub_epi8(shift1, _mm_set1_epi8(0xEF));
- /*
- * shift1: | EF F0 ... FE | FF 00 ... ... DE | DF E0 ... EE |
- * pos: | 0 1 15 | 16 17 239| 240 241 255|
- * pos-240: | 0 0 0 | 0 0 0 | 0 1 15 |
- * pos+112: | 112 113 127| >= 128 | >= 128 |
- */
- tmp1 = _mm_subs_epu8(pos, _mm_set1_epi8(-16));
- range2 = _mm_shuffle_epi8(df_ee_table, tmp1);
- tmp2 = _mm_adds_epu8(pos, _mm_set1_epi8(112));
- range2 = _mm_add_epi8(range2, _mm_shuffle_epi8(ef_fe_table, tmp2));
-
- range = _mm_add_epi8(range, range2);
-
- /* Load min and max values per calculated range index */
- __m128i min_range = _mm_shuffle_epi8(range_min_table, range);
- __m128i max_range = _mm_shuffle_epi8(range_max_table, range);
-
- /* Check value range */
- if (ReturnPosition) {
- error = _mm_cmplt_epi8(input, min_range);
- error = _mm_or_si128(error, _mm_cmpgt_epi8(input, max_range));
- /* 5% performance drop from this conditional branch */
- if (!_mm_testz_si128(error, error)) {
- break;
- }
- } else {
- error = _mm_or_si128(error, _mm_cmplt_epi8(input, min_range));
- error = _mm_or_si128(error, _mm_cmpgt_epi8(input, max_range));
- }
-
- prev_input = input;
- prev_first_len = first_len;
-
- data += 16;
- }
- /* If we got to the end, we don't need to skip any bytes backwards */
- if (ReturnPosition && (data - (end - len)) == 0) {
- return ValidUTF8Span<true>(data, end);
- }
- /* Find previous codepoint (not 80~BF) */
- data -= CodepointSkipBackwards(_mm_extract_epi32(prev_input, 3));
- if (ReturnPosition) {
- return (data - (end - len)) + ValidUTF8Span<true>(data, end);
- }
- /* Test if there was any error */
- if (!_mm_testz_si128(error, error)) {
- return 0;
- }
- /* Check the tail */
- return ValidUTF8Span<false>(data, end);
-#endif
-}
-
-} // namespace
bool IsStructurallyValid(absl::string_view str) {
- return ValidUTF8</*ReturnPosition=*/false>(str.data(), str.size());
+ return utf8_range_IsValid(str.data(), str.size());
}
size_t SpanStructurallyValid(absl::string_view str) {
- return ValidUTF8</*ReturnPosition=*/true>(str.data(), str.size());
+ return utf8_range_ValidPrefix(str.data(), str.size());
}
} // namespace utf8_range
diff --git a/third_party/utf8_range/utf8_validity.h b/third_party/utf8_range/utf8_validity.h
index 4a8d75b..1f251d0 100644
--- a/third_party/utf8_range/utf8_validity.h
+++ b/third_party/utf8_range/utf8_validity.h
@@ -7,6 +7,8 @@
#ifndef THIRD_PARTY_UTF8_RANGE_UTF8_VALIDITY_H_
#define THIRD_PARTY_UTF8_RANGE_UTF8_VALIDITY_H_
+#include <cstddef>
+
#include "absl/strings/string_view.h"
namespace utf8_range {
diff --git a/upb/BUILD b/upb/BUILD
index d427f0f..31fdd43 100644
--- a/upb/BUILD
+++ b/upb/BUILD
@@ -111,13 +111,10 @@
":base",
":mem",
":message",
- ":message_accessors",
- ":message_accessors_internal",
- ":message_internal",
":mini_descriptor",
":mini_table",
":wire",
- ":wire_internal",
+ "//upb/message:internal",
],
)
@@ -141,12 +138,6 @@
)
alias(
- name = "base_internal",
- actual = "//upb/base:internal",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "collections",
actual = "//upb/collections",
deprecation = "use upb:message instead",
@@ -178,50 +169,26 @@
)
alias(
- name = "hash",
- actual = "//upb/hash",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "json",
actual = "//upb/json",
visibility = ["//visibility:public"],
)
alias(
- name = "lex",
- actual = "//upb/lex",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "mem",
actual = "//upb/mem",
visibility = ["//visibility:public"],
)
alias(
- name = "mem_internal",
- actual = "//upb/mem:internal",
- visibility = ["//upb:__subpackages__"],
-)
-
-alias(
name = "message",
actual = "//upb/message",
visibility = ["//visibility:public"],
)
alias(
- name = "message_accessors",
- actual = "//upb/message:accessors",
- visibility = ["//visibility:public"],
-)
-
-alias(
- name = "message_accessors_internal",
- actual = "//upb/message:accessors_internal",
+ name = "message_compare",
+ actual = "//upb/message:compare",
visibility = ["//upb:friends"],
)
@@ -232,18 +199,6 @@
)
alias(
- name = "message_internal",
- actual = "//upb/message:internal",
- visibility = ["//visibility:public"],
-)
-
-alias(
- name = "message_internal_types",
- actual = "//upb/message:internal_types",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "message_promote",
actual = "//upb/message:promote",
visibility = ["//visibility:public"],
@@ -256,36 +211,12 @@
)
alias(
- name = "message_tagged_ptr",
- actual = "//upb/message:tagged_ptr",
- visibility = ["//upb:friends"],
-)
-
-alias(
- name = "message_types",
- actual = "//upb/message:types",
- visibility = ["//visibility:public"],
-)
-
-alias(
- name = "message_value",
- actual = "//upb/message:value",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "mini_descriptor",
actual = "//upb/mini_descriptor",
visibility = ["//visibility:public"],
)
alias(
- name = "mini_descriptor_internal",
- actual = "//upb/mini_descriptor:internal",
- visibility = ["//upb:__subpackages__"],
-)
-
-alias(
name = "mini_table",
actual = "//upb/mini_table",
visibility = ["//upb:friends"],
@@ -298,12 +229,6 @@
)
alias(
- name = "mini_table_internal",
- actual = "//upb/mini_table:internal",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "port",
actual = "//upb/port",
visibility = ["//visibility:public"],
@@ -322,12 +247,6 @@
)
alias(
- name = "reflection_internal",
- actual = "//upb/reflection:internal",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "text",
actual = "//upb/text",
visibility = ["//visibility:public"],
@@ -340,24 +259,12 @@
)
alias(
- name = "wire_internal",
- actual = "//upb/wire:internal",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "wire_reader",
actual = "//upb/wire:reader",
visibility = ["//visibility:public"],
)
alias(
- name = "wire_types",
- actual = "//upb/wire:types",
- visibility = ["//visibility:public"],
-)
-
-alias(
name = "eps_copy_input_stream",
actual = "//upb/wire:eps_copy_input_stream",
visibility = ["//visibility:public"],
@@ -375,11 +282,12 @@
deps = [
":mem",
":message",
- ":message_accessors",
+ ":message_compare",
":message_split64",
":mini_descriptor",
":mini_table",
":port",
+ ":wire",
],
)
@@ -395,35 +303,29 @@
],
libs = [
":base",
- ":base_internal",
":descriptor_upb_minitable_proto",
":descriptor_upb_proto",
":eps_copy_input_stream",
":generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me",
- ":hash",
- ":lex",
":mem",
- ":mem_internal",
":message",
- ":message_accessors",
+ ":message_compare",
":message_copy",
- ":message_internal",
- ":message_internal_types",
- ":message_tagged_ptr",
- ":message_types",
- ":message_value",
":mini_descriptor",
- ":mini_descriptor_internal",
":mini_table",
":mini_table_compat",
- ":mini_table_internal",
":port",
":reflection",
- ":reflection_internal",
":wire",
- ":wire_internal",
":wire_reader",
- ":wire_types",
+ "//upb/base:internal",
+ "//upb/hash:hash",
+ "//upb/lex:lex",
+ "//upb/mem:internal",
+ "//upb/message:internal",
+ "//upb/mini_descriptor:internal",
+ "//upb/mini_table:internal",
+ "//upb/reflection:internal",
],
strip_import_prefix = ["src"],
)
@@ -444,36 +346,31 @@
],
libs = [
":base",
- ":base_internal",
":descriptor_upb_minitable_proto",
":descriptor_upb_proto_reflection",
":descriptor_upb_proto",
":eps_copy_input_stream",
":generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me",
- ":hash",
":json",
- ":lex",
":mem",
- ":mem_internal",
":message",
- ":message_accessors",
+ ":message_compare",
":message_copy",
- ":message_internal",
- ":message_internal_types",
- ":message_tagged_ptr",
- ":message_types",
- ":message_value",
":mini_descriptor",
- ":mini_descriptor_internal",
":mini_table",
- ":mini_table_internal",
+ ":mini_table_compat",
":port",
":reflection",
- ":reflection_internal",
":wire",
- ":wire_internal",
":wire_reader",
- ":wire_types",
+ "//upb/base:internal",
+ "//upb/hash:hash",
+ "//upb/lex:lex",
+ "//upb/mem:internal",
+ "//upb/message:internal",
+ "//upb/mini_descriptor:internal",
+ "//upb/mini_table:internal",
+ "//upb/reflection:internal",
],
prefix = "php-",
strip_import_prefix = ["src"],
@@ -496,35 +393,30 @@
],
libs = [
":base",
- ":base_internal",
":descriptor_upb_minitable_proto",
":descriptor_upb_proto",
":eps_copy_input_stream",
":generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me",
- ":hash",
":json",
- ":lex",
":mem",
- ":mem_internal",
":message",
- ":message_accessors",
+ ":message_compare",
":message_copy",
- ":message_internal",
- ":message_internal_types",
- ":message_tagged_ptr",
- ":message_types",
- ":message_value",
":mini_descriptor",
- ":mini_descriptor_internal",
":mini_table",
- ":mini_table_internal",
+ ":mini_table_compat",
":port",
":reflection",
- ":reflection_internal",
":wire",
- ":wire_internal",
":wire_reader",
- ":wire_types",
+ "//upb/base:internal",
+ "//upb/hash:hash",
+ "//upb/lex:lex",
+ "//upb/mem:internal",
+ "//upb/message:internal",
+ "//upb/mini_descriptor:internal",
+ "//upb/mini_table:internal",
+ "//upb/reflection:internal",
],
prefix = "ruby-",
strip_import_prefix = ["src"],
@@ -554,16 +446,16 @@
"**/*.c",
"**/*.h",
"**/*.hpp",
- ],
+ ],
exclude = [
"**/conformance_upb.c",
"reflection/stage0/**/*",
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
)
# end:github_only
diff --git a/upb/base/BUILD b/upb/base/BUILD
index 54ef6d1..c1ab1d3 100644
--- a/upb/base/BUILD
+++ b/upb/base/BUILD
@@ -17,6 +17,7 @@
"status.h",
"status.hpp",
"string_view.h",
+ "upcast.h",
],
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
@@ -28,6 +29,7 @@
cc_library(
name = "internal",
hdrs = [
+ "internal/endian.h",
"internal/log2.h",
],
copts = UPB_DEFAULT_COPTS,
@@ -46,8 +48,8 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
)
# end:github_only
diff --git a/upb/base/descriptor_constants.h b/upb/base/descriptor_constants.h
index 638649a..6aa2140 100644
--- a/upb/base/descriptor_constants.h
+++ b/upb/base/descriptor_constants.h
@@ -64,7 +64,34 @@
extern "C" {
#endif
-UPB_INLINE bool upb_FieldType_IsPackable(upb_FieldType type) {
+// Convert from upb_FieldType to upb_CType
+UPB_INLINE upb_CType upb_FieldType_CType(upb_FieldType field_type) {
+ static const upb_CType c_type[] = {
+ kUpb_CType_Double, // kUpb_FieldType_Double
+ kUpb_CType_Float, // kUpb_FieldType_Float
+ kUpb_CType_Int64, // kUpb_FieldType_Int64
+ kUpb_CType_UInt64, // kUpb_FieldType_UInt64
+ kUpb_CType_Int32, // kUpb_FieldType_Int32
+ kUpb_CType_UInt64, // kUpb_FieldType_Fixed64
+ kUpb_CType_UInt32, // kUpb_FieldType_Fixed32
+ kUpb_CType_Bool, // kUpb_FieldType_Bool
+ kUpb_CType_String, // kUpb_FieldType_String
+ kUpb_CType_Message, // kUpb_FieldType_Group
+ kUpb_CType_Message, // kUpb_FieldType_Message
+ kUpb_CType_Bytes, // kUpb_FieldType_Bytes
+ kUpb_CType_UInt32, // kUpb_FieldType_UInt32
+ kUpb_CType_Enum, // kUpb_FieldType_Enum
+ kUpb_CType_Int32, // kUpb_FieldType_SFixed32
+ kUpb_CType_Int64, // kUpb_FieldType_SFixed64
+ kUpb_CType_Int32, // kUpb_FieldType_SInt32
+ kUpb_CType_Int64, // kUpb_FieldType_SInt64
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return c_type[field_type - 1];
+}
+
+UPB_INLINE bool upb_FieldType_IsPackable(upb_FieldType field_type) {
// clang-format off
const unsigned kUnpackableTypes =
(1 << kUpb_FieldType_String) |
@@ -72,7 +99,7 @@
(1 << kUpb_FieldType_Message) |
(1 << kUpb_FieldType_Group);
// clang-format on
- return (1 << type) & ~kUnpackableTypes;
+ return (1 << field_type) & ~kUnpackableTypes;
}
#ifdef __cplusplus
diff --git a/upb/base/internal/endian.h b/upb/base/internal/endian.h
new file mode 100644
index 0000000..0897427
--- /dev/null
+++ b/upb/base/internal/endian.h
@@ -0,0 +1,46 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_BASE_INTERNAL_ENDIAN_H_
+#define UPB_BASE_INTERNAL_ENDIAN_H_
+
+#include <stdint.h>
+
+// Must be last.
+#include "upb/port/def.inc"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE bool upb_IsLittleEndian(void) {
+ const int x = 1;
+ return *(char*)&x == 1;
+}
+
+UPB_INLINE uint32_t upb_BigEndian32(uint32_t val) {
+ if (upb_IsLittleEndian()) return val;
+
+ return ((val & 0xff) << 24) | ((val & 0xff00) << 8) |
+ ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);
+}
+
+UPB_INLINE uint64_t upb_BigEndian64(uint64_t val) {
+ if (upb_IsLittleEndian()) return val;
+
+ const uint64_t hi = ((uint64_t)upb_BigEndian32((uint32_t)val)) << 32;
+ const uint64_t lo = upb_BigEndian32((uint32_t)(val >> 32));
+ return hi | lo;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif /* UPB_BASE_INTERNAL_ENDIAN_H_ */
diff --git a/upb/base/string_view.h b/upb/base/string_view.h
index 28b1796..2a7fe37 100644
--- a/upb/base/string_view.h
+++ b/upb/base/string_view.h
@@ -24,10 +24,6 @@
const char* data;
size_t size;
} upb_StringView;
-// LINT.ThenChange(
-// GoogleInternalName0,
-// //depot/google3/third_party/upb/bits/golang/accessor.go:map_go_string
-// )
#ifdef __cplusplus
extern "C" {
@@ -46,9 +42,15 @@
}
UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b) {
- return a.size == b.size && memcmp(a.data, b.data, a.size) == 0;
+ return (a.size == b.size) && (!a.size || !memcmp(a.data, b.data, a.size));
}
+// LINT.ThenChange(
+// GoogleInternalName0,
+// //depot/google3/third_party/upb/bits/golang/accessor.go:map_go_string,
+// //depot/google3/third_party/upb/bits/typescript/string_view.ts
+// )
+
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/upb/base/upcast.h b/upb/base/upcast.h
new file mode 100644
index 0000000..92d699d
--- /dev/null
+++ b/upb/base/upcast.h
@@ -0,0 +1,29 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_BASE_UPCAST_H_
+#define UPB_BASE_UPCAST_H_
+
+// Must be last.
+#include "upb/port/def.inc"
+
+// This macro provides a way to upcast message pointers in a way that is
+// somewhat more bulletproof than blindly casting a pointer. Example:
+//
+// typedef struct {
+// upb_Message UPB_PRIVATE(base);
+// } pkg_FooMessage;
+//
+// void f(pkg_FooMessage* msg) {
+// upb_Decode(UPB_UPCAST(msg), ...);
+// }
+
+#define UPB_UPCAST(x) (&(x)->base##_dont_copy_me__upb_internal_use_only)
+
+#include "upb/port/undef.inc"
+
+#endif /* UPB_BASE_UPCAST_H_ */
diff --git a/upb/cmake/CMakeLists.txt b/upb/cmake/CMakeLists.txt
index 61d3650..0dc98ec 100644
--- a/upb/cmake/CMakeLists.txt
+++ b/upb/cmake/CMakeLists.txt
@@ -91,13 +91,10 @@
base
mem
message
- message_accessors
- message_accessors_internal
- message_internal
mini_descriptor
mini_table
wire
- wire_internal)
+ /upb/message:internal)
add_library(generated_cpp_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me INTERFACE
diff --git a/upb/cmake/google/protobuf/descriptor.upb.h b/upb/cmake/google/protobuf/descriptor.upb.h
index 44a98a3..b872bb6 100644
--- a/upb/cmake/google/protobuf/descriptor.upb.h
+++ b/upb/cmake/google/protobuf/descriptor.upb.h
@@ -19,38 +19,38 @@
extern "C" {
#endif
-typedef struct google_protobuf_FileDescriptorSet google_protobuf_FileDescriptorSet;
-typedef struct google_protobuf_FileDescriptorProto google_protobuf_FileDescriptorProto;
-typedef struct google_protobuf_DescriptorProto google_protobuf_DescriptorProto;
-typedef struct google_protobuf_DescriptorProto_ExtensionRange google_protobuf_DescriptorProto_ExtensionRange;
-typedef struct google_protobuf_DescriptorProto_ReservedRange google_protobuf_DescriptorProto_ReservedRange;
-typedef struct google_protobuf_ExtensionRangeOptions google_protobuf_ExtensionRangeOptions;
-typedef struct google_protobuf_ExtensionRangeOptions_Declaration google_protobuf_ExtensionRangeOptions_Declaration;
-typedef struct google_protobuf_FieldDescriptorProto google_protobuf_FieldDescriptorProto;
-typedef struct google_protobuf_OneofDescriptorProto google_protobuf_OneofDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto google_protobuf_EnumDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange google_protobuf_EnumDescriptorProto_EnumReservedRange;
-typedef struct google_protobuf_EnumValueDescriptorProto google_protobuf_EnumValueDescriptorProto;
-typedef struct google_protobuf_ServiceDescriptorProto google_protobuf_ServiceDescriptorProto;
-typedef struct google_protobuf_MethodDescriptorProto google_protobuf_MethodDescriptorProto;
-typedef struct google_protobuf_FileOptions google_protobuf_FileOptions;
-typedef struct google_protobuf_MessageOptions google_protobuf_MessageOptions;
-typedef struct google_protobuf_FieldOptions google_protobuf_FieldOptions;
-typedef struct google_protobuf_FieldOptions_EditionDefault google_protobuf_FieldOptions_EditionDefault;
-typedef struct google_protobuf_OneofOptions google_protobuf_OneofOptions;
-typedef struct google_protobuf_EnumOptions google_protobuf_EnumOptions;
-typedef struct google_protobuf_EnumValueOptions google_protobuf_EnumValueOptions;
-typedef struct google_protobuf_ServiceOptions google_protobuf_ServiceOptions;
-typedef struct google_protobuf_MethodOptions google_protobuf_MethodOptions;
-typedef struct google_protobuf_UninterpretedOption google_protobuf_UninterpretedOption;
-typedef struct google_protobuf_UninterpretedOption_NamePart google_protobuf_UninterpretedOption_NamePart;
-typedef struct google_protobuf_FeatureSet google_protobuf_FeatureSet;
-typedef struct google_protobuf_FeatureSetDefaults google_protobuf_FeatureSetDefaults;
-typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
-typedef struct google_protobuf_SourceCodeInfo google_protobuf_SourceCodeInfo;
-typedef struct google_protobuf_SourceCodeInfo_Location google_protobuf_SourceCodeInfo_Location;
-typedef struct google_protobuf_GeneratedCodeInfo google_protobuf_GeneratedCodeInfo;
-typedef struct google_protobuf_GeneratedCodeInfo_Annotation google_protobuf_GeneratedCodeInfo_Annotation;
+typedef struct google_protobuf_FileDescriptorSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorSet;
+typedef struct google_protobuf_FileDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorProto;
+typedef struct google_protobuf_DescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto;
+typedef struct google_protobuf_DescriptorProto_ExtensionRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ExtensionRange;
+typedef struct google_protobuf_DescriptorProto_ReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ReservedRange;
+typedef struct google_protobuf_ExtensionRangeOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions;
+typedef struct google_protobuf_ExtensionRangeOptions_Declaration { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions_Declaration;
+typedef struct google_protobuf_FieldDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldDescriptorProto;
+typedef struct google_protobuf_OneofDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto_EnumReservedRange;
+typedef struct google_protobuf_EnumValueDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueDescriptorProto;
+typedef struct google_protobuf_ServiceDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceDescriptorProto;
+typedef struct google_protobuf_MethodDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodDescriptorProto;
+typedef struct google_protobuf_FileOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FileOptions;
+typedef struct google_protobuf_MessageOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MessageOptions;
+typedef struct google_protobuf_FieldOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions;
+typedef struct google_protobuf_FieldOptions_EditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions_EditionDefault;
+typedef struct google_protobuf_OneofOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofOptions;
+typedef struct google_protobuf_EnumOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumOptions;
+typedef struct google_protobuf_EnumValueOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueOptions;
+typedef struct google_protobuf_ServiceOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceOptions;
+typedef struct google_protobuf_MethodOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodOptions;
+typedef struct google_protobuf_UninterpretedOption { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption;
+typedef struct google_protobuf_UninterpretedOption_NamePart { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption_NamePart;
+typedef struct google_protobuf_FeatureSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSet;
+typedef struct google_protobuf_FeatureSetDefaults { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults;
+typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
+typedef struct google_protobuf_SourceCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo;
+typedef struct google_protobuf_SourceCodeInfo_Location { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo_Location;
+typedef struct google_protobuf_GeneratedCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo;
+typedef struct google_protobuf_GeneratedCodeInfo_Annotation { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo_Annotation;
typedef enum {
google_protobuf_EDITION_UNKNOWN = 0,
@@ -61,7 +61,8 @@
google_protobuf_EDITION_2023 = 1000,
google_protobuf_EDITION_99997_TEST_ONLY = 99997,
google_protobuf_EDITION_99998_TEST_ONLY = 99998,
- google_protobuf_EDITION_99999_TEST_ONLY = 99999
+ google_protobuf_EDITION_99999_TEST_ONLY = 99999,
+ google_protobuf_EDITION_MAX = 2147483647
} google_protobuf_Edition;
typedef enum {
@@ -102,8 +103,8 @@
typedef enum {
google_protobuf_FeatureSet_UTF8_VALIDATION_UNKNOWN = 0,
- google_protobuf_FeatureSet_NONE = 1,
- google_protobuf_FeatureSet_VERIFY = 2
+ google_protobuf_FeatureSet_VERIFY = 2,
+ google_protobuf_FeatureSet_NONE = 3
} google_protobuf_FeatureSet_Utf8Validation;
typedef enum {
@@ -192,7 +193,8 @@
UPB_INLINE google_protobuf_FileDescriptorSet* google_protobuf_FileDescriptorSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorSet_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorSet_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -202,32 +204,32 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorSet_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorSet_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize(const google_protobuf_FileDescriptorSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorSet_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorSet_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize_ex(const google_protobuf_FileDescriptorSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorSet_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorSet_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorSet_clear_file(google_protobuf_FileDescriptorSet* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileDescriptorProto* const* google_protobuf_FileDescriptorSet_file(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -236,32 +238,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorSet_file_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorSet_has_file(const google_protobuf_FileDescriptorSet* msg) {
- size_t size;
- google_protobuf_FileDescriptorSet_file(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_mutable_file(google_protobuf_FileDescriptorSet* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -270,17 +267,21 @@
}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_resize_file(google_protobuf_FileDescriptorSet* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorSet_add_file(google_protobuf_FileDescriptorSet* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FileDescriptorProto* sub = (struct google_protobuf_FileDescriptorProto*)_upb_Message_New(&google__protobuf__FileDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -292,7 +293,8 @@
UPB_INLINE google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -302,62 +304,64 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize(const google_protobuf_FileDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize_ex(const google_protobuf_FileDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_name(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_name(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_name(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_package(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_package(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_package(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_FileDescriptorProto_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -366,35 +370,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_message_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_FileDescriptorProto_message_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -403,35 +402,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_message_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_message_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_message_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_enum_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_FileDescriptorProto_enum_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -440,35 +434,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_enum_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_enum_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_service(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceDescriptorProto* const* google_protobuf_FileDescriptorProto_service(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ServiceDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -477,35 +466,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_service_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_service(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_service(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_extension(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_FileDescriptorProto_extension(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -514,65 +498,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_extension_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_extension(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_options(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_options(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_FileOptions* default_val = NULL;
const google_protobuf_FileOptions* ret;
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_options(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_source_code_info(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_SourceCodeInfo* default_val = NULL;
const google_protobuf_SourceCodeInfo* ret;
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_public_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_public_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -581,35 +562,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_public_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_public_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_weak_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_weak_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -618,70 +594,67 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_weak_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_weak_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_syntax(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_syntax(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_syntax(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_edition(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileDescriptorProto_edition(const google_protobuf_FileDescriptorProto* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_edition(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_name(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(44, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_package(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(52, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_mutable_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -690,22 +663,26 @@
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_resize_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_dependency(google_protobuf_FileDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(4, 40), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_mutable_message_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -714,24 +691,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_resize_message_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_FileDescriptorProto_add_message_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(8, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(&google__protobuf__DescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_mutable_enum_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -740,24 +721,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_resize_enum_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_FileDescriptorProto_add_enum_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(12, 56), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(&google__protobuf__EnumDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_mutable_service(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ServiceDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -766,24 +751,28 @@
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_resize_service(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ServiceDescriptorProto* google_protobuf_FileDescriptorProto_add_service(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(16, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ServiceDescriptorProto* sub = (struct google_protobuf_ServiceDescriptorProto*)_upb_Message_New(&google__protobuf__ServiceDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_mutable_extension(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -792,22 +781,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_resize_extension(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_FileDescriptorProto_add_extension(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {7, UPB_SIZE(20, 72), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_options(google_protobuf_FileDescriptorProto *msg, google_protobuf_FileOptions* value) {
const upb_MiniTableField field = {8, UPB_SIZE(24, 80), 3, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_mutable_options(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FileOptions* sub = (struct google_protobuf_FileOptions*)google_protobuf_FileDescriptorProto_options(msg);
@@ -819,7 +812,7 @@
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_source_code_info(google_protobuf_FileDescriptorProto *msg, google_protobuf_SourceCodeInfo* value) {
const upb_MiniTableField field = {9, UPB_SIZE(28, 88), 4, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_mutable_source_code_info(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_SourceCodeInfo* sub = (struct google_protobuf_SourceCodeInfo*)google_protobuf_FileDescriptorProto_source_code_info(msg);
@@ -831,9 +824,9 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -842,22 +835,26 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_public_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(32, 96), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -866,24 +863,28 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_weak_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {11, UPB_SIZE(36, 104), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_syntax(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {12, UPB_SIZE(60, 112), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_edition(google_protobuf_FileDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {14, UPB_SIZE(40, 4), 6, 6, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.DescriptorProto */
@@ -894,7 +895,8 @@
UPB_INLINE google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -904,47 +906,48 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize(const google_protobuf_DescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize_ex(const google_protobuf_DescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_DescriptorProto_name(const google_protobuf_DescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_name(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_field(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_field(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -953,35 +956,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_field_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_field(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_field(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_nested_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_DescriptorProto_nested_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -990,35 +988,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_nested_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_nested_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_nested_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_enum_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_DescriptorProto_enum_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1027,35 +1020,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_enum_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_enum_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ExtensionRange* const* google_protobuf_DescriptorProto_extension_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ExtensionRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1064,35 +1052,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_extension(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1101,50 +1084,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_options(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MessageOptions* google_protobuf_DescriptorProto_options(const google_protobuf_DescriptorProto* msg) {
const google_protobuf_MessageOptions* default_val = NULL;
const google_protobuf_MessageOptions* ret;
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_options(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_oneof_decl(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofDescriptorProto* const* google_protobuf_DescriptorProto_oneof_decl(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_OneofDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1153,35 +1132,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_oneof_decl_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_oneof_decl(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_oneof_decl(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ReservedRange* const* google_protobuf_DescriptorProto_reserved_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1190,35 +1164,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_DescriptorProto_reserved_name(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1227,36 +1196,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_name_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_name(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_set_name(google_protobuf_DescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(40, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_field(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1265,24 +1229,28 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_field(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_field(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_mutable_nested_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1291,24 +1259,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_resize_nested_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_add_nested_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {3, UPB_SIZE(8, 32), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(&google__protobuf__DescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_mutable_enum_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1317,24 +1289,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_resize_enum_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_DescriptorProto_add_enum_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(&google__protobuf__EnumDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_mutable_extension_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ExtensionRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1343,24 +1319,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_resize_extension_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_add_extension_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, 3, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ExtensionRange* sub = (struct google_protobuf_DescriptorProto_ExtensionRange*)_upb_Message_New(&google__protobuf__DescriptorProto__ExtensionRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_extension(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1369,22 +1349,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_extension(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_extension(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(20, 56), 0, 4, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(&google__protobuf__FieldDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_DescriptorProto_set_options(google_protobuf_DescriptorProto *msg, google_protobuf_MessageOptions* value) {
const upb_MiniTableField field = {7, UPB_SIZE(24, 64), 2, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MessageOptions* google_protobuf_DescriptorProto_mutable_options(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MessageOptions* sub = (struct google_protobuf_MessageOptions*)google_protobuf_DescriptorProto_options(msg);
@@ -1396,9 +1380,9 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_mutable_oneof_decl(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_OneofDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1407,24 +1391,28 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_resize_oneof_decl(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_OneofDescriptorProto* google_protobuf_DescriptorProto_add_oneof_decl(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {8, UPB_SIZE(28, 72), 0, 6, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_OneofDescriptorProto* sub = (struct google_protobuf_OneofDescriptorProto*)_upb_Message_New(&google__protobuf__OneofDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_mutable_reserved_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1433,24 +1421,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_resize_reserved_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_add_reserved_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {9, UPB_SIZE(32, 80), 0, 7, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ReservedRange* sub = (struct google_protobuf_DescriptorProto_ReservedRange*)_upb_Message_New(&google__protobuf__DescriptorProto__ReservedRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_mutable_reserved_name(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1459,15 +1451,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_resize_reserved_name(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_DescriptorProto_add_reserved_name(google_protobuf_DescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {10, UPB_SIZE(36, 88), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -1479,7 +1475,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_ExtensionRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1489,80 +1486,83 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize(const google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize_ex(const google_protobuf_DescriptorProto_ExtensionRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ExtensionRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ExtensionRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_start(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_end(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_options(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const google_protobuf_ExtensionRangeOptions* default_val = NULL;
const google_protobuf_ExtensionRangeOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_start(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_end(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_options(google_protobuf_DescriptorProto_ExtensionRange *msg, google_protobuf_ExtensionRangeOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(12, 16), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_mutable_options(google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena) {
struct google_protobuf_ExtensionRangeOptions* sub = (struct google_protobuf_ExtensionRangeOptions*)google_protobuf_DescriptorProto_ExtensionRange_options(msg);
@@ -1581,7 +1581,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_ReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ReservedRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ReservedRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1591,61 +1592,63 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__DescriptorProto__ReservedRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__DescriptorProto__ReservedRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize(const google_protobuf_DescriptorProto_ReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ReservedRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ReservedRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize_ex(const google_protobuf_DescriptorProto_ReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__DescriptorProto__ReservedRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__DescriptorProto__ReservedRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_start(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_end(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_start(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_end(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.ExtensionRangeOptions */
@@ -1656,7 +1659,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions* google_protobuf_ExtensionRangeOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1666,32 +1670,32 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize(const google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize_ex(const google_protobuf_ExtensionRangeOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_declaration(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions_Declaration* const* google_protobuf_ExtensionRangeOptions_declaration(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ExtensionRangeOptions_Declaration* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1700,65 +1704,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_declaration(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_declaration(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_verification(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_verification(const google_protobuf_ExtensionRangeOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_verification(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_features(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_features(const google_protobuf_ExtensionRangeOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_features(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ExtensionRangeOptions_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1767,32 +1768,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_mutable_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ExtensionRangeOptions_Declaration**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1801,26 +1797,30 @@
}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_resize_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_add_declaration(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ExtensionRangeOptions_Declaration* sub = (struct google_protobuf_ExtensionRangeOptions_Declaration*)_upb_Message_New(&google__protobuf__ExtensionRangeOptions__Declaration_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_verification(google_protobuf_ExtensionRangeOptions *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_features(google_protobuf_ExtensionRangeOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {50, UPB_SIZE(12, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_mutable_features(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ExtensionRangeOptions_features(msg);
@@ -1832,9 +1832,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_mutable_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1843,17 +1843,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_resize_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ExtensionRangeOptions_add_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(16, 24), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -1865,7 +1869,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_Declaration_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1875,118 +1880,123 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize(const google_protobuf_ExtensionRangeOptions_Declaration* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize_ex(const google_protobuf_ExtensionRangeOptions_Declaration* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ExtensionRangeOptions__Declaration_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_number(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_Declaration_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_full_name(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_type(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_reserved(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_repeated(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_number(google_protobuf_ExtensionRangeOptions_Declaration *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_full_name(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_type(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(20, 32), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_reserved(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = {5, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_repeated(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = {6, 9, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FieldDescriptorProto */
@@ -1997,7 +2007,8 @@
UPB_INLINE google_protobuf_FieldDescriptorProto* google_protobuf_FieldDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2007,220 +2018,231 @@
int options, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize(const google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize_ex(const google_protobuf_FieldDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_extendee(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_extendee(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_extendee(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_number(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_number(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_number(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_label(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_label(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_label(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_type(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_type_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_default_value(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_default_value(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_default_value(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_options(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_options(const google_protobuf_FieldDescriptorProto* msg) {
const google_protobuf_FieldOptions* default_val = NULL;
const google_protobuf_FieldOptions* ret;
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_options(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_oneof_index(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_json_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_json_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_json_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_proto3_optional(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_extendee(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_number(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {3, 4, 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_label(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {4, 8, 4, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {5, 12, 5, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {6, UPB_SIZE(44, 56), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_default_value(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {7, UPB_SIZE(52, 72), 7, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_options(google_protobuf_FieldDescriptorProto *msg, google_protobuf_FieldOptions* value) {
const upb_MiniTableField field = {8, UPB_SIZE(16, 88), 8, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_mutable_options(google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FieldOptions* sub = (struct google_protobuf_FieldOptions*)google_protobuf_FieldDescriptorProto_options(msg);
@@ -2232,15 +2254,15 @@
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_oneof_index(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {9, UPB_SIZE(20, 16), 9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_json_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {10, UPB_SIZE(60, 96), 10, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_proto3_optional(google_protobuf_FieldDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {17, UPB_SIZE(24, 20), 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofDescriptorProto */
@@ -2251,7 +2273,8 @@
UPB_INLINE google_protobuf_OneofDescriptorProto* google_protobuf_OneofDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2261,61 +2284,63 @@
int options, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize(const google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize_ex(const google_protobuf_OneofDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_name(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_OneofDescriptorProto_name(const google_protobuf_OneofDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_name(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_options(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_options(const google_protobuf_OneofDescriptorProto* msg) {
const google_protobuf_OneofOptions* default_val = NULL;
const google_protobuf_OneofOptions* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_options(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_name(google_protobuf_OneofDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_options(google_protobuf_OneofDescriptorProto *msg, google_protobuf_OneofOptions* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_mutable_options(google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_OneofOptions* sub = (struct google_protobuf_OneofOptions*)google_protobuf_OneofDescriptorProto_options(msg);
@@ -2334,7 +2359,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto* google_protobuf_EnumDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2344,47 +2370,48 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize(const google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize_ex(const google_protobuf_EnumDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumDescriptorProto_name(const google_protobuf_EnumDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_name(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_value(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueDescriptorProto* const* google_protobuf_EnumDescriptorProto_value(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumValueDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2393,50 +2420,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_value_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_value(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_value(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_options(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_options(const google_protobuf_EnumDescriptorProto* msg) {
const google_protobuf_EnumOptions* default_val = NULL;
const google_protobuf_EnumOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_options(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_range(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto_EnumReservedRange* const* google_protobuf_EnumDescriptorProto_reserved_range(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto_EnumReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2445,35 +2468,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_range(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_EnumDescriptorProto_reserved_name(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2482,36 +2500,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_name(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_name(google_protobuf_EnumDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(20, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_mutable_value(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumValueDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2520,22 +2533,26 @@
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_resize_value(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumDescriptorProto_add_value(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumValueDescriptorProto* sub = (struct google_protobuf_EnumValueDescriptorProto*)_upb_Message_New(&google__protobuf__EnumValueDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_options(google_protobuf_EnumDescriptorProto *msg, google_protobuf_EnumOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_mutable_options(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumOptions* sub = (struct google_protobuf_EnumOptions*)google_protobuf_EnumDescriptorProto_options(msg);
@@ -2547,9 +2564,9 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_mutable_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2558,24 +2575,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_resize_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_add_reserved_range(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {4, UPB_SIZE(12, 40), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto_EnumReservedRange* sub = (struct google_protobuf_EnumDescriptorProto_EnumReservedRange*)_upb_Message_New(&google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_mutable_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2584,15 +2605,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_resize_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_add_reserved_name(google_protobuf_EnumDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {5, UPB_SIZE(16, 48), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -2604,7 +2629,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_EnumReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2614,61 +2640,63 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize_ex(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_start(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_end(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_start(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_end(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.EnumValueDescriptorProto */
@@ -2679,7 +2707,8 @@
UPB_INLINE google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumValueDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2689,80 +2718,83 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize(const google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize_ex(const google_protobuf_EnumValueDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_name(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumValueDescriptorProto_name(const google_protobuf_EnumValueDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_name(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_number(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumValueDescriptorProto_number(const google_protobuf_EnumValueDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_number(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_options(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const google_protobuf_EnumValueOptions* default_val = NULL;
const google_protobuf_EnumValueOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_name(google_protobuf_EnumValueDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_number(google_protobuf_EnumValueDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = {2, 4, 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_options(google_protobuf_EnumValueDescriptorProto *msg, google_protobuf_EnumValueOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 24), 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_mutable_options(google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumValueOptions* sub = (struct google_protobuf_EnumValueOptions*)google_protobuf_EnumValueDescriptorProto_options(msg);
@@ -2781,7 +2813,8 @@
UPB_INLINE google_protobuf_ServiceDescriptorProto* google_protobuf_ServiceDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2791,47 +2824,48 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize(const google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize_ex(const google_protobuf_ServiceDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_name(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ServiceDescriptorProto_name(const google_protobuf_ServiceDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_name(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_method(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodDescriptorProto* const* google_protobuf_ServiceDescriptorProto_method(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_MethodDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2840,51 +2874,47 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceDescriptorProto_method_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_method(const google_protobuf_ServiceDescriptorProto* msg) {
- size_t size;
- google_protobuf_ServiceDescriptorProto_method(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_options(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_options(const google_protobuf_ServiceDescriptorProto* msg) {
const google_protobuf_ServiceOptions* default_val = NULL;
const google_protobuf_ServiceOptions* ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_options(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_name(google_protobuf_ServiceDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_mutable_method(google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_MethodDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2893,22 +2923,26 @@
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_resize_method(google_protobuf_ServiceDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_MethodDescriptorProto* google_protobuf_ServiceDescriptorProto_add_method(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_MethodDescriptorProto* sub = (struct google_protobuf_MethodDescriptorProto*)_upb_Message_New(&google__protobuf__MethodDescriptorProto_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_options(google_protobuf_ServiceDescriptorProto *msg, google_protobuf_ServiceOptions* value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 32), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_mutable_options(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_ServiceOptions* sub = (struct google_protobuf_ServiceOptions*)google_protobuf_ServiceDescriptorProto_options(msg);
@@ -2927,7 +2961,8 @@
UPB_INLINE google_protobuf_MethodDescriptorProto* google_protobuf_MethodDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodDescriptorProto_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodDescriptorProto_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2937,129 +2972,135 @@
int options, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodDescriptorProto_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodDescriptorProto_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize(const google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodDescriptorProto_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodDescriptorProto_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize_ex(const google_protobuf_MethodDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodDescriptorProto_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodDescriptorProto_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_name(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_name(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_name(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_input_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_input_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_input_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_output_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_output_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_output_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_options(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_options(const google_protobuf_MethodDescriptorProto* msg) {
const google_protobuf_MethodOptions* default_val = NULL;
const google_protobuf_MethodOptions* ret;
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_options(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_client_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_server_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_name(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_input_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_output_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(28, 40), 3, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_options(google_protobuf_MethodDescriptorProto *msg, google_protobuf_MethodOptions* value) {
const upb_MiniTableField field = {4, UPB_SIZE(4, 56), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_mutable_options(google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MethodOptions* sub = (struct google_protobuf_MethodOptions*)google_protobuf_MethodDescriptorProto_options(msg);
@@ -3071,11 +3112,11 @@
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_client_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {5, UPB_SIZE(8, 1), 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_server_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = {6, UPB_SIZE(9, 2), 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FileOptions */
@@ -3086,7 +3127,8 @@
UPB_INLINE google_protobuf_FileOptions* google_protobuf_FileOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3096,347 +3138,352 @@
int options, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FileOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FileOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize(const google_protobuf_FileOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize_ex(const google_protobuf_FileOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FileOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FileOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_outer_classname(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_outer_classname(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_outer_classname(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_optimize_for(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileOptions_optimize_for(const google_protobuf_FileOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_optimize_for(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_multiple_files(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_multiple_files(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_multiple_files(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_go_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_go_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_go_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_py_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_py_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_py_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generate_equals_and_hash(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_deprecated(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_deprecated(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_deprecated(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_string_check_utf8(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_enable_arenas(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
bool default_val = true;
bool ret;
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_objc_class_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_objc_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_objc_class_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_csharp_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_csharp_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_csharp_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_swift_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_swift_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_swift_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_class_prefix(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_class_prefix(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
-}
-UPB_INLINE void google_protobuf_FileOptions_clear_php_generic_services(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
-}
-UPB_INLINE bool google_protobuf_FileOptions_php_generic_services(const google_protobuf_FileOptions* msg) {
- bool default_val = false;
- bool ret;
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
- return ret;
-}
-UPB_INLINE bool google_protobuf_FileOptions_has_php_generic_services(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_metadata_namespace(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_ruby_package(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_ruby_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_ruby_package(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_features(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FileOptions_features(const google_protobuf_FileOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_features(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_uninterpreted_option(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FileOptions_uninterpreted_option(const google_protobuf_FileOptions* msg, size_t* size) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -3444,111 +3491,102 @@
}
}
UPB_INLINE const upb_Array* _google_protobuf_FileOptions_uninterpreted_option_upb_array(const google_protobuf_FileOptions* msg, size_t* size) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
- const upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
+ const upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileOptions_has_uninterpreted_option(const google_protobuf_FileOptions* msg) {
- size_t size;
- google_protobuf_FileOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileOptions_set_java_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_outer_classname(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_optimize_for(google_protobuf_FileOptions *msg, int32_t value) {
const upb_MiniTableField field = {9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_multiple_files(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_go_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_py_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generate_equals_and_hash(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {20, 12, 9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_deprecated(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_string_check_utf8(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_enable_arenas(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = {31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_objc_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_csharp_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_swift_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
-}
-UPB_INLINE void google_protobuf_FileOptions_set_php_generic_services(google_protobuf_FileOptions *msg, bool value) {
- const upb_MiniTableField field = {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_metadata_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_ruby_package(google_protobuf_FileOptions *msg, upb_StringView value) {
- const upb_MiniTableField field = {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_features(google_protobuf_FileOptions *msg, google_protobuf_FeatureSet* value) {
- const upb_MiniTableField field = {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ const upb_MiniTableField field = {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FileOptions_mutable_features(google_protobuf_FileOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FileOptions_features(msg);
@@ -3559,10 +3597,10 @@
return sub;
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_mutable_uninterpreted_option(google_protobuf_FileOptions* msg, size_t* size) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -3570,18 +3608,22 @@
}
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_resize_uninterpreted_option(google_protobuf_FileOptions* msg, size_t size, upb_Arena* arena) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FileOptions_add_uninterpreted_option(google_protobuf_FileOptions* msg, upb_Arena* arena) {
- upb_MiniTableField field = {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_MiniTableField field = {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -3593,7 +3635,8 @@
UPB_INLINE google_protobuf_MessageOptions* google_protobuf_MessageOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MessageOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MessageOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3603,122 +3646,128 @@
int options, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MessageOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MessageOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize(const google_protobuf_MessageOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MessageOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MessageOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize_ex(const google_protobuf_MessageOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MessageOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MessageOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MessageOptions_clear_message_set_wire_format(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_no_standard_descriptor_accessor(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_map_entry(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_map_entry(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_map_entry(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_features(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MessageOptions_features(const google_protobuf_MessageOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_features(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_uninterpreted_option(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MessageOptions_uninterpreted_option(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -3727,50 +3776,45 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_upb_array(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MessageOptions_has_uninterpreted_option(const google_protobuf_MessageOptions* msg) {
- size_t size;
- google_protobuf_MessageOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MessageOptions_set_message_set_wire_format(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_no_standard_descriptor_accessor(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {2, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {3, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_map_entry(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {7, 4, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = {11, 5, 5, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_features(google_protobuf_MessageOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {12, 8, 6, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MessageOptions_mutable_features(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MessageOptions_features(msg);
@@ -3782,9 +3826,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_mutable_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -3793,17 +3837,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_resize_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MessageOptions_add_uninterpreted_option(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -3815,7 +3863,8 @@
UPB_INLINE google_protobuf_FieldOptions* google_protobuf_FieldOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3825,167 +3874,176 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize(const google_protobuf_FieldOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize_ex(const google_protobuf_FieldOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_clear_ctype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_ctype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_ctype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_packed(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_packed(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_packed(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_deprecated(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_deprecated(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_deprecated(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_jstype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_jstype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_jstype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_weak(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_weak(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_weak(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_unverified_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_unverified_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_unverified_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_debug_redact(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_debug_redact(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_debug_redact(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_retention(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_retention(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_retention(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_targets(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FieldOptions_targets(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -3994,35 +4052,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_targets_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_targets(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_targets(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_edition_defaults(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions_EditionDefault* const* google_protobuf_FieldOptions_edition_defaults(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldOptions_EditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4031,50 +4084,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_edition_defaults_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_edition_defaults(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_edition_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_features(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FieldOptions_features(const google_protobuf_FieldOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_features(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_uninterpreted_option(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FieldOptions_uninterpreted_option(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4083,68 +4132,63 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_uninterpreted_option(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_set_ctype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_packed(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {2, 8, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_deprecated(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {3, 9, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {5, 10, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_jstype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {6, 12, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_weak(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {10, 16, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_unverified_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {15, 17, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_debug_redact(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = {16, 18, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_retention(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = {17, 20, 9, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_mutable_targets(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4153,22 +4197,26 @@
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_resize_targets(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FieldOptions_add_targets(google_protobuf_FieldOptions* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {19, 24, 0, 6, 14, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_mutable_edition_defaults(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldOptions_EditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4177,22 +4225,26 @@
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_resize_edition_defaults(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_add_edition_defaults(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {20, UPB_SIZE(28, 32), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldOptions_EditionDefault* sub = (struct google_protobuf_FieldOptions_EditionDefault*)_upb_Message_New(&google__protobuf__FieldOptions__EditionDefault_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FieldOptions_set_features(google_protobuf_FieldOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {21, UPB_SIZE(32, 40), 10, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FieldOptions_mutable_features(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FieldOptions_features(msg);
@@ -4204,9 +4256,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_mutable_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4215,17 +4267,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_resize_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FieldOptions_add_uninterpreted_option(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(36, 48), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4237,7 +4293,8 @@
UPB_INLINE google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_EditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions__EditionDefault_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions__EditionDefault_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4247,61 +4304,63 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FieldOptions__EditionDefault_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FieldOptions__EditionDefault_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize(const google_protobuf_FieldOptions_EditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions__EditionDefault_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions__EditionDefault_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize_ex(const google_protobuf_FieldOptions_EditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FieldOptions__EditionDefault_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FieldOptions__EditionDefault_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_value(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldOptions_EditionDefault_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_edition(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_EditionDefault_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_value(google_protobuf_FieldOptions_EditionDefault *msg, upb_StringView value) {
const upb_MiniTableField field = {2, 8, 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_edition(google_protobuf_FieldOptions_EditionDefault *msg, int32_t value) {
const upb_MiniTableField field = {3, 4, 2, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofOptions */
@@ -4312,7 +4371,8 @@
UPB_INLINE google_protobuf_OneofOptions* google_protobuf_OneofOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4322,47 +4382,48 @@
int options, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__OneofOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__OneofOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize(const google_protobuf_OneofOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize_ex(const google_protobuf_OneofOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__OneofOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__OneofOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofOptions_clear_features(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_OneofOptions_features(const google_protobuf_OneofOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofOptions_has_features(const google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofOptions_clear_uninterpreted_option(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_OneofOptions_uninterpreted_option(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4371,30 +4432,25 @@
}
UPB_INLINE const upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_upb_array(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_OneofOptions_has_uninterpreted_option(const google_protobuf_OneofOptions* msg) {
- size_t size;
- google_protobuf_OneofOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_OneofOptions_set_features(google_protobuf_OneofOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_OneofOptions_mutable_features(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_OneofOptions_features(msg);
@@ -4406,9 +4462,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_mutable_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4417,17 +4473,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_resize_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_OneofOptions_add_uninterpreted_option(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4439,7 +4499,8 @@
UPB_INLINE google_protobuf_EnumOptions* google_protobuf_EnumOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4449,92 +4510,96 @@
int options, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize(const google_protobuf_EnumOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize_ex(const google_protobuf_EnumOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumOptions_clear_allow_alias(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_allow_alias(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_allow_alias(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_features(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumOptions_features(const google_protobuf_EnumOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_features(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_uninterpreted_option(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumOptions_uninterpreted_option(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4543,42 +4608,37 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_upb_array(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumOptions_has_uninterpreted_option(const google_protobuf_EnumOptions* msg) {
- size_t size;
- google_protobuf_EnumOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumOptions_set_allow_alias(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {2, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {3, 2, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = {6, 3, 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_features(google_protobuf_EnumOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {7, UPB_SIZE(4, 8), 4, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumOptions_mutable_features(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumOptions_features(msg);
@@ -4590,9 +4650,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_mutable_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4601,17 +4661,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_resize_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumOptions_add_uninterpreted_option(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4623,7 +4687,8 @@
UPB_INLINE google_protobuf_EnumValueOptions* google_protobuf_EnumValueOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4633,77 +4698,80 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__EnumValueOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__EnumValueOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize(const google_protobuf_EnumValueOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize_ex(const google_protobuf_EnumValueOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__EnumValueOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__EnumValueOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_deprecated(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_deprecated(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_deprecated(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_features(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_features(const google_protobuf_EnumValueOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_features(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_debug_redact(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_debug_redact(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_debug_redact(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_uninterpreted_option(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumValueOptions_uninterpreted_option(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4712,34 +4780,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumValueOptions_has_uninterpreted_option(const google_protobuf_EnumValueOptions* msg) {
- size_t size;
- google_protobuf_EnumValueOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumValueOptions_set_deprecated(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = {1, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_features(google_protobuf_EnumValueOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_mutable_features(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumValueOptions_features(msg);
@@ -4751,13 +4814,13 @@
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_debug_redact(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 2), 3, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_mutable_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4766,17 +4829,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_resize_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumValueOptions_add_uninterpreted_option(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4788,7 +4855,8 @@
UPB_INLINE google_protobuf_ServiceOptions* google_protobuf_ServiceOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4798,62 +4866,64 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__ServiceOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__ServiceOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize(const google_protobuf_ServiceOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize_ex(const google_protobuf_ServiceOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__ServiceOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__ServiceOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_deprecated(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ServiceOptions_deprecated(const google_protobuf_ServiceOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_deprecated(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_features(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ServiceOptions_features(const google_protobuf_ServiceOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_features(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_uninterpreted_option(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ServiceOptions_uninterpreted_option(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4862,34 +4932,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceOptions_has_uninterpreted_option(const google_protobuf_ServiceOptions* msg) {
- size_t size;
- google_protobuf_ServiceOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceOptions_set_deprecated(google_protobuf_ServiceOptions *msg, bool value) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ServiceOptions_set_features(google_protobuf_ServiceOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {34, UPB_SIZE(4, 8), 2, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ServiceOptions_mutable_features(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ServiceOptions_features(msg);
@@ -4901,9 +4966,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_mutable_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4912,17 +4977,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_resize_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ServiceOptions_add_uninterpreted_option(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(8, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4934,7 +5003,8 @@
UPB_INLINE google_protobuf_MethodOptions* google_protobuf_MethodOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodOptions_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4944,77 +5014,80 @@
int options, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__MethodOptions_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__MethodOptions_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize(const google_protobuf_MethodOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodOptions_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodOptions_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize_ex(const google_protobuf_MethodOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__MethodOptions_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__MethodOptions_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodOptions_clear_deprecated(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodOptions_deprecated(const google_protobuf_MethodOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_deprecated(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_idempotency_level(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_MethodOptions_idempotency_level(const google_protobuf_MethodOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_idempotency_level(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_features(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MethodOptions_features(const google_protobuf_MethodOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_features(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_uninterpreted_option(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MethodOptions_uninterpreted_option(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5023,38 +5096,33 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_upb_array(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MethodOptions_has_uninterpreted_option(const google_protobuf_MethodOptions* msg) {
- size_t size;
- google_protobuf_MethodOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MethodOptions_set_deprecated(google_protobuf_MethodOptions *msg, bool value) {
const upb_MiniTableField field = {33, 1, 1, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_idempotency_level(google_protobuf_MethodOptions *msg, int32_t value) {
const upb_MiniTableField field = {34, 4, 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_features(google_protobuf_MethodOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {35, 8, 3, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MethodOptions_mutable_features(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MethodOptions_features(msg);
@@ -5066,9 +5134,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_mutable_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t* size) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5077,17 +5145,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_resize_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MethodOptions_add_uninterpreted_option(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = {999, UPB_SIZE(12, 16), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(&google__protobuf__UninterpretedOption_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -5099,7 +5171,8 @@
UPB_INLINE google_protobuf_UninterpretedOption* google_protobuf_UninterpretedOption_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5109,32 +5182,32 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize(const google_protobuf_UninterpretedOption* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize_ex(const google_protobuf_UninterpretedOption* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_name(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption_NamePart* const* google_protobuf_UninterpretedOption_name(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption_NamePart* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5143,122 +5216,123 @@
}
UPB_INLINE const upb_Array* _google_protobuf_UninterpretedOption_name_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_UninterpretedOption_has_name(const google_protobuf_UninterpretedOption* msg) {
- size_t size;
- google_protobuf_UninterpretedOption_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_identifier_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_identifier_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_identifier_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_positive_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE uint64_t google_protobuf_UninterpretedOption_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
uint64_t default_val = (uint64_t)0ull;
uint64_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_negative_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int64_t google_protobuf_UninterpretedOption_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
int64_t default_val = (int64_t)0ll;
int64_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_double_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE double google_protobuf_UninterpretedOption_double_value(const google_protobuf_UninterpretedOption* msg) {
double default_val = 0;
double ret;
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_double_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_string_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_string_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_string_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_aggregate_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_mutable_name(google_protobuf_UninterpretedOption* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption_NamePart**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5267,42 +5341,46 @@
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_resize_name(google_protobuf_UninterpretedOption* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_add_name(google_protobuf_UninterpretedOption* msg, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(4, 8), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption_NamePart* sub = (struct google_protobuf_UninterpretedOption_NamePart*)_upb_Message_New(&google__protobuf__UninterpretedOption__NamePart_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_identifier_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_positive_int_value(google_protobuf_UninterpretedOption *msg, uint64_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 2, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_negative_int_value(google_protobuf_UninterpretedOption *msg, int64_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), 3, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_double_value(google_protobuf_UninterpretedOption *msg, double value) {
const upb_MiniTableField field = {6, UPB_SIZE(32, 48), 4, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_string_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {7, UPB_SIZE(40, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_aggregate_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = {8, UPB_SIZE(48, 72), 6, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.UninterpretedOption.NamePart */
@@ -5313,7 +5391,8 @@
UPB_INLINE google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_NamePart_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption__NamePart_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption__NamePart_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5323,61 +5402,63 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__UninterpretedOption__NamePart_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__UninterpretedOption__NamePart_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize(const google_protobuf_UninterpretedOption_NamePart* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption__NamePart_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption__NamePart_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize_ex(const google_protobuf_UninterpretedOption_NamePart* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__UninterpretedOption__NamePart_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__UninterpretedOption__NamePart_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_name_part(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_NamePart_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_is_extension(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_name_part(google_protobuf_UninterpretedOption_NamePart *msg, upb_StringView value) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_is_extension(google_protobuf_UninterpretedOption_NamePart *msg, bool value) {
const upb_MiniTableField field = {2, 1, 2, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSet */
@@ -5388,7 +5469,8 @@
UPB_INLINE google_protobuf_FeatureSet* google_protobuf_FeatureSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSet_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSet_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5398,137 +5480,143 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSet_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSet_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize(const google_protobuf_FeatureSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSet_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSet_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize_ex(const google_protobuf_FeatureSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSet_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSet_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSet_clear_field_presence(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_field_presence(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_field_presence(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_enum_type(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_enum_type(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_enum_type(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_repeated_field_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_utf8_validation(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_utf8_validation(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_utf8_validation(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_message_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_message_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_message_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_json_format(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_json_format(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_json_format(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_set_field_presence(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {1, 4, 1, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_enum_type(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {2, 8, 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_repeated_field_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {3, 12, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_utf8_validation(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {4, 16, 4, 3, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_message_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {5, 20, 5, 4, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_json_format(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = {6, 24, 6, 5, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults */
@@ -5539,7 +5627,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults* google_protobuf_FeatureSetDefaults_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5549,32 +5638,32 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize(const google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize_ex(const google_protobuf_FeatureSetDefaults* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_defaults(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const* google_protobuf_FeatureSetDefaults_defaults(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5583,62 +5672,59 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FeatureSetDefaults_defaults_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_defaults(const google_protobuf_FeatureSetDefaults* msg) {
- size_t size;
- google_protobuf_FeatureSetDefaults_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_minimum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_maximum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_mutable_defaults(google_protobuf_FeatureSetDefaults* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5647,26 +5733,30 @@
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_resize_defaults(google_protobuf_FeatureSetDefaults* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_add_defaults(google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* sub = (struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault*)_upb_Message_New(&google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_minimum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(8, 4), 1, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_maximum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(12, 8), 2, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault */
@@ -5677,7 +5767,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5687,57 +5778,59 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize_ex(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_mutable_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(msg);
@@ -5749,7 +5842,7 @@
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, 1, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.SourceCodeInfo */
@@ -5760,7 +5853,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo* google_protobuf_SourceCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5770,32 +5864,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize(const google_protobuf_SourceCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize_ex(const google_protobuf_SourceCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_clear_location(google_protobuf_SourceCodeInfo* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo_Location* const* google_protobuf_SourceCodeInfo_location(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_SourceCodeInfo_Location* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5804,32 +5898,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_location_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_has_location(const google_protobuf_SourceCodeInfo* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_location(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_mutable_location(google_protobuf_SourceCodeInfo* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_SourceCodeInfo_Location**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5838,17 +5927,21 @@
}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_resize_location(google_protobuf_SourceCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_add_location(google_protobuf_SourceCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_SourceCodeInfo_Location* sub = (struct google_protobuf_SourceCodeInfo_Location*)_upb_Message_New(&google__protobuf__SourceCodeInfo__Location_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -5860,7 +5953,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_Location_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo__Location_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo__Location_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5870,32 +5964,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__SourceCodeInfo__Location_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__SourceCodeInfo__Location_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize(const google_protobuf_SourceCodeInfo_Location* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo__Location_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo__Location_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize_ex(const google_protobuf_SourceCodeInfo_Location* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__SourceCodeInfo__Location_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__SourceCodeInfo__Location_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_path(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_path(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5904,35 +5998,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_path_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_path(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_span(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_span(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5941,65 +6030,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_span_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_span(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_span(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_trailing_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_SourceCodeInfo_Location_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6008,32 +6094,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_leading_detached_comments(msg, &size);
- return size != 0;
-}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_path(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6042,22 +6123,26 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_path(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_path(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 8), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_span(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6066,30 +6151,34 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_span(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_span(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {2, UPB_SIZE(8, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_leading_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_trailing_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_mutable_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6098,15 +6187,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_resize_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = {6, UPB_SIZE(12, 56), 0, kUpb_NoSub, 12, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -6118,7 +6211,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo* google_protobuf_GeneratedCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6128,32 +6222,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize(const google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize_ex(const google_protobuf_GeneratedCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_clear_annotation(google_protobuf_GeneratedCodeInfo* msg) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_GeneratedCodeInfo_Annotation* const* google_protobuf_GeneratedCodeInfo_annotation(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_GeneratedCodeInfo_Annotation* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6162,32 +6256,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_has_annotation(const google_protobuf_GeneratedCodeInfo* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_annotation(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_mutable_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_GeneratedCodeInfo_Annotation**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6196,17 +6285,21 @@
}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_resize_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_add_annotation(google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = {1, 0, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_GeneratedCodeInfo_Annotation* sub = (struct google_protobuf_GeneratedCodeInfo_Annotation*)_upb_Message_New(&google__protobuf__GeneratedCodeInfo__Annotation_msg_init, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -6218,7 +6311,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_Annotation_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6228,32 +6322,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize(const google_protobuf_GeneratedCodeInfo_Annotation* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize_ex(const google_protobuf_GeneratedCodeInfo_Annotation* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), &google__protobuf__GeneratedCodeInfo__Annotation_msg_init, options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_path(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_GeneratedCodeInfo_Annotation_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6262,92 +6356,91 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_Annotation_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_source_file(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_GeneratedCodeInfo_Annotation_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_begin(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_end(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_semantic(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_mutable_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6356,37 +6449,41 @@
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_resize_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_add_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = {1, UPB_SIZE(4, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_source_file(google_protobuf_GeneratedCodeInfo_Annotation *msg, upb_StringView value) {
const upb_MiniTableField field = {2, UPB_SIZE(20, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_begin(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {3, UPB_SIZE(8, 4), 2, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_end(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {4, UPB_SIZE(12, 8), 3, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_semantic(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = {5, UPB_SIZE(16, 12), 4, 0, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)};
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* Max size 32 is google.protobuf.FileOptions */
/* Max size 64 is google.protobuf.FileOptions */
-#define _UPB_MAXOPT_SIZE UPB_SIZE(112, 200)
+#define _UPB_MAXOPT_SIZE UPB_SIZE(104, 192)
#ifdef __cplusplus
} /* extern "C" */
diff --git a/upb/cmake/google/protobuf/descriptor.upb_minitable.c b/upb/cmake/google/protobuf/descriptor.upb_minitable.c
index e7cdf4c..15ce57c 100644
--- a/upb/cmake/google/protobuf/descriptor.upb_minitable.c
+++ b/upb/cmake/google/protobuf/descriptor.upb_minitable.c
@@ -13,7 +13,7 @@
#include "upb/port/def.inc"
static const upb_MiniTableSub google_protobuf_FileDescriptorSet_submsgs[1] = {
- {.submsg = &google__protobuf__FileDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FileDescriptorProto_msg_init},
};
static const upb_MiniTableField google_protobuf_FileDescriptorSet__fields[1] = {
@@ -31,13 +31,13 @@
};
static const upb_MiniTableSub google_protobuf_FileDescriptorProto_submsgs[7] = {
- {.submsg = &google__protobuf__DescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto_msg_init},
- {.submsg = &google__protobuf__ServiceDescriptorProto_msg_init},
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__FileOptions_msg_init},
- {.submsg = &google__protobuf__SourceCodeInfo_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ServiceDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FileOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__SourceCodeInfo_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FileDescriptorProto__fields[13] = {
@@ -81,14 +81,14 @@
};
static const upb_MiniTableSub google_protobuf_DescriptorProto_submsgs[8] = {
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto__ExtensionRange_msg_init},
- {.submsg = &google__protobuf__FieldDescriptorProto_msg_init},
- {.submsg = &google__protobuf__MessageOptions_msg_init},
- {.submsg = &google__protobuf__OneofDescriptorProto_msg_init},
- {.submsg = &google__protobuf__DescriptorProto__ReservedRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto__ExtensionRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MessageOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__OneofDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__DescriptorProto__ReservedRange_msg_init},
};
static const upb_MiniTableField google_protobuf_DescriptorProto__fields[10] = {
@@ -129,7 +129,7 @@
};
static const upb_MiniTableSub google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = {
- {.submsg = &google__protobuf__ExtensionRangeOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ExtensionRangeOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_DescriptorProto_ExtensionRange__fields[3] = {
@@ -168,10 +168,10 @@
};
static const upb_MiniTableSub google_protobuf_ExtensionRangeOptions_submsgs[4] = {
- {.submsg = &google__protobuf__ExtensionRangeOptions__Declaration_msg_init},
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_ExtensionRangeOptions_VerificationState_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ExtensionRangeOptions__Declaration_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_ExtensionRangeOptions_VerificationState_enum_init},
};
static const upb_MiniTableField google_protobuf_ExtensionRangeOptions__fields[4] = {
@@ -246,9 +246,9 @@
};
static const upb_MiniTableSub google_protobuf_FieldDescriptorProto_submsgs[3] = {
- {.submsg = &google__protobuf__FieldOptions_msg_init},
- {.subenum = &google_protobuf_FieldDescriptorProto_Label_enum_init},
- {.subenum = &google_protobuf_FieldDescriptorProto_Type_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldOptions_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldDescriptorProto_Label_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldDescriptorProto_Type_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldDescriptorProto__fields[11] = {
@@ -306,7 +306,7 @@
};
static const upb_MiniTableSub google_protobuf_OneofDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__OneofOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__OneofOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_OneofDescriptorProto__fields[2] = {
@@ -327,9 +327,9 @@
};
static const upb_MiniTableSub google_protobuf_EnumDescriptorProto_submsgs[3] = {
- {.submsg = &google__protobuf__EnumValueDescriptorProto_msg_init},
- {.submsg = &google__protobuf__EnumOptions_msg_init},
- {.submsg = &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumValueDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumDescriptorProto__fields[5] = {
@@ -374,7 +374,7 @@
};
static const upb_MiniTableSub google_protobuf_EnumValueDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__EnumValueOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__EnumValueOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumValueDescriptorProto__fields[3] = {
@@ -396,8 +396,8 @@
};
static const upb_MiniTableSub google_protobuf_ServiceDescriptorProto_submsgs[2] = {
- {.submsg = &google__protobuf__MethodDescriptorProto_msg_init},
- {.submsg = &google__protobuf__ServiceOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MethodDescriptorProto_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__ServiceOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_ServiceDescriptorProto__fields[3] = {
@@ -419,7 +419,7 @@
};
static const upb_MiniTableSub google_protobuf_MethodDescriptorProto_submsgs[1] = {
- {.submsg = &google__protobuf__MethodOptions_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__MethodOptions_msg_init},
};
static const upb_MiniTableField google_protobuf_MethodDescriptorProto__fields[6] = {
@@ -448,17 +448,17 @@
};
static const upb_MiniTableSub google_protobuf_FileOptions_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_FileOptions_OptimizeMode_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FileOptions_OptimizeMode_enum_init},
};
-static const upb_MiniTableField google_protobuf_FileOptions__fields[22] = {
- {1, UPB_SIZE(28, 24), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {8, UPB_SIZE(36, 40), 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+static const upb_MiniTableField google_protobuf_FileOptions__fields[21] = {
+ {1, UPB_SIZE(24, 16), 1, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {8, 32, 2, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
{9, 4, 3, 2, 14, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)},
{10, 8, 4, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {11, UPB_SIZE(44, 56), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {11, UPB_SIZE(40, 48), 5, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
{16, 9, 6, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{17, 10, 7, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{18, 11, 8, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
@@ -466,35 +466,34 @@
{23, 13, 10, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{27, 14, 11, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
{31, 15, 12, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {36, UPB_SIZE(52, 72), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {37, UPB_SIZE(60, 88), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {39, UPB_SIZE(68, 104), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {40, UPB_SIZE(76, 120), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {41, UPB_SIZE(84, 136), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {42, 16, 18, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
- {44, UPB_SIZE(92, 152), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {45, UPB_SIZE(100, 168), 20, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
- {50, UPB_SIZE(20, 184), 21, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
- {999, UPB_SIZE(24, 192), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
+ {36, UPB_SIZE(48, 64), 13, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {37, UPB_SIZE(56, 80), 14, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {39, UPB_SIZE(64, 96), 15, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {40, UPB_SIZE(72, 112), 16, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {41, UPB_SIZE(80, 128), 17, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {44, UPB_SIZE(88, 144), 18, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {45, UPB_SIZE(96, 160), 19, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)},
+ {50, UPB_SIZE(16, 176), 20, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
+ {999, UPB_SIZE(20, 184), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
};
const upb_MiniTable google__protobuf__FileOptions_msg_init = {
&google_protobuf_FileOptions_submsgs[0],
&google_protobuf_FileOptions__fields[0],
- UPB_SIZE(112, 200), 22, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(248), 0,
+ UPB_SIZE(104, 192), 21, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(248), 0,
UPB_FASTTABLE_INIT({
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
- {0x001800000100000a, &upb_pss_1bt},
+ {0x001000000100000a, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
- {0x0028000002000042, &upb_pss_1bt},
+ {0x0020000002000042, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0008000004000050, &upb_psb1_1bt},
- {0x003800000500005a, &upb_pss_1bt},
+ {0x003000000500005a, &upb_pss_1bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
@@ -504,23 +503,23 @@
{0x000b000008000190, &upb_psb1_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000c0000090001a0, &upb_psb1_2bt},
- {0x005800000e0002aa, &upb_pss_2bt},
+ {0x005000000e0002aa, &upb_pss_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000d00000a0001b8, &upb_psb1_2bt},
- {0x00780000100002c2, &upb_pss_2bt},
- {0x00880000110002ca, &upb_pss_2bt},
- {0x00100000120002d0, &upb_psb1_2bt},
+ {0x00700000100002c2, &upb_pss_2bt},
+ {0x00800000110002ca, &upb_pss_2bt},
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000e00000b0001d8, &upb_psb1_2bt},
- {0x00980000130002e2, &upb_pss_2bt},
- {0x00a80000140002ea, &upb_pss_2bt},
+ {0x00900000120002e2, &upb_pss_2bt},
+ {0x00a00000130002ea, &upb_pss_2bt},
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
{0x000f00000c0001f8, &upb_psb1_2bt},
})
};
static const upb_MiniTableSub google_protobuf_MessageOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_MessageOptions__fields[7] = {
@@ -574,13 +573,13 @@
};
static const upb_MiniTableSub google_protobuf_FieldOptions_submsgs[7] = {
- {.submsg = &google__protobuf__FieldOptions__EditionDefault_msg_init},
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_FieldOptions_CType_enum_init},
- {.subenum = &google_protobuf_FieldOptions_JSType_enum_init},
- {.subenum = &google_protobuf_FieldOptions_OptionRetention_enum_init},
- {.subenum = &google_protobuf_FieldOptions_OptionTargetType_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FieldOptions__EditionDefault_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_CType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_JSType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_OptionRetention_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FieldOptions_OptionTargetType_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldOptions__fields[13] = {
@@ -640,7 +639,7 @@
};
static const upb_MiniTableSub google_protobuf_FieldOptions_EditionDefault_submsgs[1] = {
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FieldOptions_EditionDefault__fields[2] = {
@@ -661,8 +660,8 @@
};
static const upb_MiniTableSub google_protobuf_OneofOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_OneofOptions__fields[2] = {
@@ -711,8 +710,8 @@
};
static const upb_MiniTableSub google_protobuf_EnumOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumOptions__fields[5] = {
@@ -764,8 +763,8 @@
};
static const upb_MiniTableSub google_protobuf_EnumValueOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_EnumValueOptions__fields[4] = {
@@ -816,8 +815,8 @@
};
static const upb_MiniTableSub google_protobuf_ServiceOptions_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
};
static const upb_MiniTableField google_protobuf_ServiceOptions__fields[3] = {
@@ -867,9 +866,9 @@
};
static const upb_MiniTableSub google_protobuf_MethodOptions_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.submsg = &google__protobuf__UninterpretedOption_msg_init},
- {.subenum = &google_protobuf_MethodOptions_IdempotencyLevel_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_MethodOptions_IdempotencyLevel_enum_init},
};
static const upb_MiniTableField google_protobuf_MethodOptions__fields[4] = {
@@ -920,7 +919,7 @@
};
static const upb_MiniTableSub google_protobuf_UninterpretedOption_submsgs[1] = {
- {.submsg = &google__protobuf__UninterpretedOption__NamePart_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__UninterpretedOption__NamePart_msg_init},
};
static const upb_MiniTableField google_protobuf_UninterpretedOption__fields[7] = {
@@ -975,12 +974,12 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSet_submsgs[6] = {
- {.subenum = &google_protobuf_FeatureSet_FieldPresence_enum_init},
- {.subenum = &google_protobuf_FeatureSet_EnumType_enum_init},
- {.subenum = &google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init},
- {.subenum = &google_protobuf_FeatureSet_Utf8Validation_enum_init},
- {.subenum = &google_protobuf_FeatureSet_MessageEncoding_enum_init},
- {.subenum = &google_protobuf_FeatureSet_JsonFormat_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_FieldPresence_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_EnumType_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_Utf8Validation_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_MessageEncoding_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_FeatureSet_JsonFormat_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSet__fields[6] = {
@@ -999,9 +998,9 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSetDefaults_submsgs[3] = {
- {.submsg = &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSetDefaults__fields[3] = {
@@ -1021,8 +1020,8 @@
};
static const upb_MiniTableSub google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_submsgs[2] = {
- {.submsg = &google__protobuf__FeatureSet_msg_init},
- {.subenum = &google_protobuf_Edition_enum_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__FeatureSet_msg_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_Edition_enum_init},
};
static const upb_MiniTableField google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault__fields[2] = {
@@ -1043,7 +1042,7 @@
};
static const upb_MiniTableSub google_protobuf_SourceCodeInfo_submsgs[1] = {
- {.submsg = &google__protobuf__SourceCodeInfo__Location_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__SourceCodeInfo__Location_msg_init},
};
static const upb_MiniTableField google_protobuf_SourceCodeInfo__fields[1] = {
@@ -1085,7 +1084,7 @@
};
static const upb_MiniTableSub google_protobuf_GeneratedCodeInfo_submsgs[1] = {
- {.submsg = &google__protobuf__GeneratedCodeInfo__Annotation_msg_init},
+ {.UPB_PRIVATE(submsg) = &google__protobuf__GeneratedCodeInfo__Annotation_msg_init},
};
static const upb_MiniTableField google_protobuf_GeneratedCodeInfo__fields[1] = {
@@ -1103,7 +1102,7 @@
};
static const upb_MiniTableSub google_protobuf_GeneratedCodeInfo_Annotation_submsgs[1] = {
- {.subenum = &google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init},
+ {.UPB_PRIVATE(subenum) = &google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init},
};
static const upb_MiniTableField google_protobuf_GeneratedCodeInfo_Annotation__fields[5] = {
@@ -1167,7 +1166,7 @@
const upb_MiniTableEnum google_protobuf_Edition_enum_init = {
64,
- 6,
+ 7,
{
0x7,
0x0,
@@ -1177,6 +1176,7 @@
0x1869d,
0x1869e,
0x1869f,
+ 0x7fffffff,
},
};
@@ -1238,7 +1238,7 @@
64,
0,
{
- 0x7,
+ 0xd,
0x0,
},
};
diff --git a/upb/collections/BUILD b/upb/collections/BUILD
index 8437cd5..5a900c6 100644
--- a/upb/collections/BUILD
+++ b/upb/collections/BUILD
@@ -29,8 +29,8 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
)
# end:github_only
diff --git a/upb/conformance/BUILD b/upb/conformance/BUILD
index 18cfc57..8cdd3f7 100644
--- a/upb/conformance/BUILD
+++ b/upb/conformance/BUILD
@@ -73,6 +73,9 @@
":conformance_upb_proto_reflection",
":test_messages_proto2_upbdefs",
":test_messages_proto3_upbdefs",
+ "//src/google/protobuf/editions:test_messages_proto2_editions_upbdefs",
+ "//src/google/protobuf/editions:test_messages_proto3_editions_upbdefs",
+ "//upb:base",
"//upb:json",
"//upb:port",
"//upb:reflection",
@@ -84,7 +87,7 @@
make_shell_script(
name = "gen_test_conformance_upb",
out = "test_conformance_upb.sh",
- contents = "$1 --enforce_recommended --failure_list $2 $3",
+ contents = "$1 --maximum_edition 2023 --enforce_recommended --failure_list $2 $3",
)
sh_test(
@@ -124,6 +127,9 @@
":conformance_upb_proto_reflection",
":test_messages_proto2_upbdefs",
":test_messages_proto3_upbdefs",
+ "//src/google/protobuf/editions:test_messages_proto2_editions_upbdefs",
+ "//src/google/protobuf/editions:test_messages_proto3_editions_upbdefs",
+ "//upb:base",
"//upb:json",
"//upb:port",
"//upb:reflection",
@@ -135,7 +141,7 @@
make_shell_script(
name = "gen_test_conformance_upb_dynamic_minitable",
out = "test_conformance_upb_dynamic_minitable.sh",
- contents = "$1 --enforce_recommended --failure_list $2 $3",
+ contents = "$1 --maximum_edition 2023 --enforce_recommended --failure_list $2 $3",
)
sh_test(
diff --git a/upb/conformance/conformance_upb.c b/upb/conformance/conformance_upb.c
index a91224b..78cce52 100644
--- a/upb/conformance/conformance_upb.c
+++ b/upb/conformance/conformance_upb.c
@@ -16,8 +16,11 @@
#include "conformance/conformance.upb.h"
#include "conformance/conformance.upbdefs.h"
+#include "google/protobuf/editions/golden/test_messages_proto2_editions.upbdefs.h"
+#include "google/protobuf/editions/golden/test_messages_proto3_editions.upbdefs.h"
#include "google/protobuf/test_messages_proto2.upbdefs.h"
#include "google/protobuf/test_messages_proto3.upbdefs.h"
+#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/reflection/message.h"
@@ -289,9 +292,9 @@
test_count++;
if (verbose) {
- debug_print("Request", c.request,
+ debug_print("Request", UPB_UPCAST(c.request),
conformance_ConformanceRequest_getmsgdef(symtab), &c);
- debug_print("Response", c.response,
+ debug_print("Response", UPB_UPCAST(c.response),
conformance_ConformanceResponse_getmsgdef(symtab), &c);
fprintf(stderr, "\n");
}
@@ -309,9 +312,19 @@
symtab, &google_protobuf_test_messages_proto2_proto_upbdefinit, true);
_upb_DefPool_LoadDefInitEx(
symtab, &google_protobuf_test_messages_proto3_proto_upbdefinit, true);
+ _upb_DefPool_LoadDefInitEx(
+ symtab,
+ &google_protobuf_editions_golden_test_messages_proto2_editions_proto_upbdefinit,
+ true);
+ _upb_DefPool_LoadDefInitEx(
+ symtab,
+ &google_protobuf_editions_golden_test_messages_proto3_editions_proto_upbdefinit,
+ true);
#else
protobuf_test_messages_proto2_TestAllTypesProto2_getmsgdef(symtab);
+ protobuf_test_messages_editions_proto2_TestAllTypesProto2_getmsgdef(symtab);
protobuf_test_messages_proto3_TestAllTypesProto3_getmsgdef(symtab);
+ protobuf_test_messages_editions_proto3_TestAllTypesProto3_getmsgdef(symtab);
#endif
while (1) {
diff --git a/upb/conformance/conformance_upb_failures.txt b/upb/conformance/conformance_upb_failures.txt
index 2fb4dc8..e69de29 100644
--- a/upb/conformance/conformance_upb_failures.txt
+++ b/upb/conformance/conformance_upb_failures.txt
@@ -1,2 +0,0 @@
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInMapValue.ProtobufOutput
-Recommended.Proto3.JsonInput.IgnoreUnknownEnumStringValueInRepeatedField.ProtobufOutput
diff --git a/upb/generated_code_support.h b/upb/generated_code_support.h
index cbc7294..2a3d03d 100644
--- a/upb/generated_code_support.h
+++ b/upb/generated_code_support.h
@@ -9,6 +9,7 @@
#define UPB_GENERATED_CODE_SUPPORT_H_
// IWYU pragma: begin_exports
+#include "upb/base/upcast.h"
#include "upb/message/accessors.h"
#include "upb/message/array.h"
#include "upb/message/internal/accessors.h"
@@ -26,8 +27,8 @@
#include "upb/mini_table/message.h"
#include "upb/mini_table/sub.h"
#include "upb/wire/decode.h"
-#include "upb/wire/decode_fast.h"
#include "upb/wire/encode.h"
+#include "upb/wire/internal/decode_fast.h"
// IWYU pragma: end_exports
#endif // UPB_GENERATED_CODE_SUPPORT_H_
diff --git a/upb/hash/BUILD b/upb/hash/BUILD
index 4c18e0c..b061413 100644
--- a/upb/hash/BUILD
+++ b/upb/hash/BUILD
@@ -21,9 +21,9 @@
visibility = ["//visibility:public"],
deps = [
"//upb:base",
- "//upb:base_internal",
"//upb:mem",
"//upb:port",
+ "//upb/base:internal",
],
)
@@ -32,10 +32,11 @@
srcs = ["test.cc"],
deps = [
":hash",
- "@com_google_googletest//:gtest_main",
"//upb:mem",
"//upb:port",
"@com_google_absl//absl/container:flat_hash_map",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -49,8 +50,20 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/io/BUILD b/upb/io/BUILD
index 3164864..c188618 100644
--- a/upb/io/BUILD
+++ b/upb/io/BUILD
@@ -19,9 +19,9 @@
":string",
":zero_copy_stream",
"//upb:base",
- "//upb:lex",
"//upb:mem",
"//upb:port",
+ "//upb/lex",
],
)
@@ -64,8 +64,9 @@
srcs = ["string_test.cc"],
deps = [
":string",
- "@com_google_googletest//:gtest_main",
"//upb:mem",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -78,12 +79,13 @@
":string",
":tokenizer",
":zero_copy_stream",
- "@com_google_googletest//:gtest_main",
- "@com_google_absl//absl/strings",
- "@com_google_absl//absl/strings:str_format",
- "//upb:lex",
"//upb:mem",
"//upb:port",
+ "//upb/lex",
+ "@com_google_absl//absl/strings",
+ "@com_google_absl//absl/strings:str_format",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -96,8 +98,9 @@
deps = [
":chunked_stream",
":zero_copy_stream",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
diff --git a/upb/json/BUILD b/upb/json/BUILD
index 91c7dc1..61461be 100644
--- a/upb/json/BUILD
+++ b/upb/json/BUILD
@@ -21,14 +21,13 @@
visibility = ["//visibility:public"],
deps = [
"//upb:base",
- "//upb:lex",
"//upb:mem",
"//upb:message",
- "//upb:message_types",
"//upb:mini_table",
"//upb:port",
"//upb:reflection",
"//upb:wire",
+ "//upb/lex",
],
)
@@ -40,10 +39,11 @@
":struct_upb_proto",
":test_upb_proto",
":test_upb_proto_reflection",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:reflection",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -55,10 +55,11 @@
":struct_upb_proto",
":test_upb_proto",
":test_upb_proto_reflection",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:reflection",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -96,14 +97,35 @@
# ":json",
# ":test_upb_proto",
# ":test_upb_proto_reflection",
-# "@com_google_googletest//:gtest_main",
+# "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main",
# "//testing/fuzzing:fuzztest",
# "//upb:base",
# "//upb:mem",
# "//upb:message",
-# "//upb:message_types",
# "//upb:mini_table",
# "//upb:reflection",
# ],
# )
# end:google_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+
+filegroup(
+ name = "test_utils",
+ srcs = glob(
+ [
+ "**/*test.proto",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+# end:github_only
diff --git a/upb/json/decode.c b/upb/json/decode.c
index ce48948..66f0929 100644
--- a/upb/json/decode.c
+++ b/upb/json/decode.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/json/decode.h"
@@ -51,7 +28,6 @@
#include "upb/message/array.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
-#include "upb/message/types.h"
#include "upb/mini_table/message.h"
#include "upb/reflection/def.h"
#include "upb/reflection/message.h"
@@ -74,12 +50,17 @@
const upb_FieldDef* debug_field;
} jsondec;
+typedef struct {
+ upb_MessageValue value;
+ bool ignore;
+} upb_JsonMessageValue;
+
enum { JD_OBJECT, JD_ARRAY, JD_STRING, JD_NUMBER, JD_TRUE, JD_FALSE, JD_NULL };
/* Forward declarations of mutually-recursive functions. */
static void jsondec_wellknown(jsondec* d, upb_Message* msg,
const upb_MessageDef* m);
-static upb_MessageValue jsondec_value(jsondec* d, const upb_FieldDef* f);
+static upb_JsonMessageValue jsondec_value(jsondec* d, const upb_FieldDef* f);
static void jsondec_wellknownvalue(jsondec* d, upb_Message* msg,
const upb_MessageDef* m);
static void jsondec_object(jsondec* d, upb_Message* msg,
@@ -810,19 +791,19 @@
return val;
}
-static upb_MessageValue jsondec_enum(jsondec* d, const upb_FieldDef* f) {
+static upb_JsonMessageValue jsondec_enum(jsondec* d, const upb_FieldDef* f) {
switch (jsondec_peek(d)) {
case JD_STRING: {
upb_StringView str = jsondec_string(d);
const upb_EnumDef* e = upb_FieldDef_EnumSubDef(f);
const upb_EnumValueDef* ev =
upb_EnumDef_FindValueByNameWithSize(e, str.data, str.size);
- upb_MessageValue val;
+ upb_JsonMessageValue val = {.ignore = false};
if (ev) {
- val.int32_val = upb_EnumValueDef_Number(ev);
+ val.value.int32_val = upb_EnumValueDef_Number(ev);
} else {
if (d->options & upb_JsonDecode_IgnoreUnknown) {
- val.int32_val = 0;
+ val.ignore = true;
} else {
jsondec_errf(d, "Unknown enumerator: '" UPB_STRINGVIEW_FORMAT "'",
UPB_STRINGVIEW_ARGS(str));
@@ -832,15 +813,16 @@
}
case JD_NULL: {
if (jsondec_isnullvalue(f)) {
- upb_MessageValue val;
+ upb_JsonMessageValue val = {.ignore = false};
jsondec_null(d);
- val.int32_val = 0;
+ val.value.int32_val = 0;
return val;
}
}
/* Fallthrough. */
default:
- return jsondec_int(d, f);
+ return (upb_JsonMessageValue){.value = jsondec_int(d, f),
+ .ignore = false};
}
}
@@ -883,8 +865,10 @@
jsondec_arrstart(d);
while (jsondec_arrnext(d)) {
- upb_MessageValue elem = jsondec_value(d, f);
- upb_Array_Append(arr, elem, d->arena);
+ upb_JsonMessageValue elem = jsondec_value(d, f);
+ if (!elem.ignore) {
+ upb_Array_Append(arr, elem.value, d->arena);
+ }
}
jsondec_arrend(d);
}
@@ -897,11 +881,14 @@
jsondec_objstart(d);
while (jsondec_objnext(d)) {
- upb_MessageValue key, val;
+ upb_JsonMessageValue key, val;
key = jsondec_value(d, key_f);
+ UPB_ASSUME(!key.ignore); // Map key cannot be enum.
jsondec_entrysep(d);
val = jsondec_value(d, val_f);
- upb_Map_Set(map, key, val, d->arena);
+ if (!val.ignore) {
+ upb_Map_Set(map, key.value, val.value, d->arena);
+ }
}
jsondec_objend(d);
}
@@ -982,8 +969,10 @@
const upb_MessageDef* subm = upb_FieldDef_MessageSubDef(f);
jsondec_tomsg(d, submsg, subm);
} else {
- upb_MessageValue val = jsondec_value(d, f);
- upb_Message_SetFieldByDef(msg, f, val, d->arena);
+ upb_JsonMessageValue val = jsondec_value(d, f);
+ if (!val.ignore) {
+ upb_Message_SetFieldByDef(msg, f, val.value, d->arena);
+ }
}
d->debug_field = preserved;
@@ -998,7 +987,7 @@
jsondec_objend(d);
}
-static upb_MessageValue jsondec_value(jsondec* d, const upb_FieldDef* f) {
+static upb_MessageValue jsondec_nonenum(jsondec* d, const upb_FieldDef* f) {
switch (upb_FieldDef_CType(f)) {
case kUpb_CType_Bool:
return jsondec_bool(d, f);
@@ -1014,15 +1003,23 @@
case kUpb_CType_String:
case kUpb_CType_Bytes:
return jsondec_strfield(d, f);
- case kUpb_CType_Enum:
- return jsondec_enum(d, f);
case kUpb_CType_Message:
return jsondec_msg(d, f);
+ case kUpb_CType_Enum:
default:
UPB_UNREACHABLE();
}
}
+static upb_JsonMessageValue jsondec_value(jsondec* d, const upb_FieldDef* f) {
+ if (upb_FieldDef_CType(f) == kUpb_CType_Enum) {
+ return jsondec_enum(d, f);
+ } else {
+ return (upb_JsonMessageValue){.value = jsondec_nonenum(d, f),
+ .ignore = false};
+ }
+}
+
/* Well-known types ***********************************************************/
static int jsondec_tsdigits(jsondec* d, const char** ptr, size_t digits,
@@ -1447,8 +1444,9 @@
static void jsondec_wrapper(jsondec* d, upb_Message* msg,
const upb_MessageDef* m) {
const upb_FieldDef* value_f = upb_MessageDef_FindFieldByNumber(m, 1);
- upb_MessageValue val = jsondec_value(d, value_f);
- upb_Message_SetFieldByDef(msg, value_f, val, d->arena);
+ upb_JsonMessageValue val = jsondec_value(d, value_f);
+ UPB_ASSUME(val.ignore == false); // Wrapper cannot be an enum.
+ upb_Message_SetFieldByDef(msg, value_f, val.value, d->arena);
}
static void jsondec_wellknown(jsondec* d, upb_Message* msg,
diff --git a/upb/json/decode.h b/upb/json/decode.h
index 8f58797..cc17e84 100644
--- a/upb/json/decode.h
+++ b/upb/json/decode.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_JSON_DECODE_H_
#define UPB_JSON_DECODE_H_
diff --git a/upb/json/decode_test.cc b/upb/json/decode_test.cc
index b196bf9..e8a6e3d 100644
--- a/upb/json/decode_test.cc
+++ b/upb/json/decode_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/json/decode.h"
@@ -36,6 +13,7 @@
#include "google/protobuf/struct.upb.h"
#include <gtest/gtest.h>
#include "upb/base/status.hpp"
+#include "upb/base/upcast.h"
#include "upb/json/test.upb.h"
#include "upb/json/test.upbdefs.h"
#include "upb/mem/arena.h"
@@ -50,8 +28,8 @@
upb_test_Box* box = upb_test_Box_new(a);
int options = 0;
- bool ok = upb_JsonDecode(json, strlen(json), box, m.ptr(), defpool.ptr(),
- options, a, status.ptr());
+ bool ok = upb_JsonDecode(json, strlen(json), UPB_UPCAST(box), m.ptr(),
+ defpool.ptr(), options, a, status.ptr());
return ok ? box : nullptr;
}
diff --git a/upb/json/encode.c b/upb/json/encode.c
index 1ec9f83..c152393 100644
--- a/upb/json/encode.c
+++ b/upb/json/encode.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/json/encode.h"
diff --git a/upb/json/encode.h b/upb/json/encode.h
index ec8b25b..05c956e 100644
--- a/upb/json/encode.h
+++ b/upb/json/encode.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_JSON_ENCODE_H_
#define UPB_JSON_ENCODE_H_
diff --git a/upb/json/encode_test.cc b/upb/json/encode_test.cc
index a79c007..42ce6dd 100644
--- a/upb/json/encode_test.cc
+++ b/upb/json/encode_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/json/encode.h"
@@ -36,6 +13,7 @@
#include "google/protobuf/struct.upb.h"
#include <gtest/gtest.h>
#include "upb/base/status.hpp"
+#include "upb/base/upcast.h"
#include "upb/json/test.upb.h"
#include "upb/json/test.upbdefs.h"
#include "upb/mem/arena.h"
@@ -49,12 +27,12 @@
upb::MessageDefPtr m(upb_test_Box_getmsgdef(defpool.ptr()));
EXPECT_TRUE(m.ptr() != nullptr);
- size_t json_size = upb_JsonEncode(msg, m.ptr(), defpool.ptr(), options,
- nullptr, 0, status.ptr());
+ size_t json_size = upb_JsonEncode(UPB_UPCAST(msg), m.ptr(), defpool.ptr(),
+ options, nullptr, 0, status.ptr());
char* json_buf = (char*)upb_Arena_Malloc(a.ptr(), json_size + 1);
- size_t size = upb_JsonEncode(msg, m.ptr(), defpool.ptr(), options, json_buf,
- json_size + 1, status.ptr());
+ size_t size = upb_JsonEncode(UPB_UPCAST(msg), m.ptr(), defpool.ptr(), options,
+ json_buf, json_size + 1, status.ptr());
EXPECT_EQ(size, json_size);
return std::string(json_buf, json_size);
}
diff --git a/upb/json/fuzz_test.cc b/upb/json/fuzz_test.cc
index 381c8eb..d430d15 100644
--- a/upb/json/fuzz_test.cc
+++ b/upb/json/fuzz_test.cc
@@ -12,6 +12,7 @@
#include <gtest/gtest.h>
#include "testing/fuzzing/fuzztest.h"
#include "upb/base/status.hpp"
+#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/json/test.upb.h"
@@ -37,17 +38,17 @@
upb_test_Box* box = upb_test_Box_new(arena.ptr());
int options = 0;
- bool ok = upb_JsonDecode(json_heap, json.size(), box, m.ptr(), defpool.ptr(),
- options, arena.ptr(), status.ptr());
+ bool ok = upb_JsonDecode(json_heap, json.size(), UPB_UPCAST(box), m.ptr(),
+ defpool.ptr(), options, arena.ptr(), status.ptr());
delete[] json_heap;
if (!ok) return;
- size_t size = upb_JsonEncode(box, m.ptr(), defpool.ptr(), options, nullptr, 0,
- status.ptr());
+ size_t size = upb_JsonEncode(UPB_UPCAST(box), m.ptr(), defpool.ptr(), options,
+ nullptr, 0, status.ptr());
char* json_buf = (char*)upb_Arena_Malloc(arena.ptr(), size + 1);
- size_t written = upb_JsonEncode(box, m.ptr(), defpool.ptr(), options,
- json_buf, size + 1, status.ptr());
+ size_t written = upb_JsonEncode(UPB_UPCAST(box), m.ptr(), defpool.ptr(),
+ options, json_buf, size + 1, status.ptr());
EXPECT_EQ(written, size);
}
FUZZ_TEST(FuzzTest, DecodeEncodeArbitraryJson);
diff --git a/upb/json/test.proto b/upb/json/test.proto
index b3980a6..a0d56a7 100644
--- a/upb/json/test.proto
+++ b/upb/json/test.proto
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
syntax = "proto2";
diff --git a/upb/lex/BUILD b/upb/lex/BUILD
index 664074b..81c6c89 100644
--- a/upb/lex/BUILD
+++ b/upb/lex/BUILD
@@ -31,8 +31,9 @@
srcs = ["atoi_test.cc"],
deps = [
":lex",
- "@com_google_googletest//:gtest_main",
"@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -46,8 +47,20 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/mem/BUILD b/upb/mem/BUILD
index f6bc19e..9227a31 100644
--- a/upb/mem/BUILD
+++ b/upb/mem/BUILD
@@ -9,6 +9,10 @@
cc_library(
name = "mem",
+ srcs = [
+ "alloc.c",
+ "arena.c",
+ ],
hdrs = [
"alloc.h",
"arena.h",
@@ -24,17 +28,11 @@
cc_library(
name = "internal",
- srcs = [
- "alloc.c",
- "alloc.h",
- "arena.c",
- "arena.h",
- ],
hdrs = [
"internal/arena.h",
],
copts = UPB_DEFAULT_COPTS,
- visibility = ["//upb:__pkg__"],
+ visibility = ["//visibility:public"],
deps = [
"//upb:port",
],
@@ -44,14 +42,14 @@
name = "arena_test",
srcs = ["arena_test.cc"],
deps = [
- "@com_google_googletest//:gtest_main",
- "//upb:mem",
- "//upb:mem_internal",
+ ":mem",
"//upb:port",
"@com_google_absl//absl/random",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/synchronization",
"@com_google_absl//absl/time",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -66,8 +64,20 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/mem/arena.c b/upb/mem/arena.c
index 43a546a..a01421e 100644
--- a/upb/mem/arena.c
+++ b/upb/mem/arena.c
@@ -5,33 +5,124 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
-#include "upb/mem/internal/arena.h"
+#include "upb/mem/arena.h"
+#include <stddef.h>
+#include <stdint.h>
+
+#include "upb/mem/alloc.h"
+#include "upb/mem/internal/arena.h"
#include "upb/port/atomic.h"
// Must be last.
#include "upb/port/def.inc"
-struct _upb_MemBlock {
+typedef struct upb_MemBlock {
// Atomic only for the benefit of SpaceAllocated().
- UPB_ATOMIC(_upb_MemBlock*) next;
+ UPB_ATOMIC(struct upb_MemBlock*) next;
uint32_t size;
// Data follows.
-};
+} upb_MemBlock;
-static const size_t memblock_reserve =
- UPB_ALIGN_UP(sizeof(_upb_MemBlock), UPB_MALLOC_ALIGN);
+typedef struct upb_ArenaInternal {
+ // upb_alloc* together with a low bit which signals if there is an initial
+ // block.
+ uintptr_t block_alloc;
-typedef struct _upb_ArenaRoot {
- upb_Arena* root;
+ // When multiple arenas are fused together, each arena points to a parent
+ // arena (root points to itself). The root tracks how many live arenas
+ // reference it.
+
+ // The low bit is tagged:
+ // 0: pointer to parent
+ // 1: count, left shifted by one
+ UPB_ATOMIC(uintptr_t) parent_or_count;
+
+ // All nodes that are fused together are in a singly-linked list.
+ // == NULL at end of list.
+ UPB_ATOMIC(struct upb_ArenaInternal*) next;
+
+ // The last element of the linked list. This is present only as an
+ // optimization, so that we do not have to iterate over all members for every
+ // fuse. Only significant for an arena root. In other cases it is ignored.
+ // == self when no other list members.
+ UPB_ATOMIC(struct upb_ArenaInternal*) tail;
+
+ // Linked list of blocks to free/cleanup. Atomic only for the benefit of
+ // upb_Arena_SpaceAllocated().
+ UPB_ATOMIC(upb_MemBlock*) blocks;
+} upb_ArenaInternal;
+
+// All public + private state for an arena.
+typedef struct {
+ upb_Arena head;
+ upb_ArenaInternal body;
+} upb_ArenaState;
+
+typedef struct {
+ upb_ArenaInternal* root;
uintptr_t tagged_count;
-} _upb_ArenaRoot;
+} upb_ArenaRoot;
-static _upb_ArenaRoot _upb_Arena_FindRoot(upb_Arena* a) {
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
+static const size_t kUpb_MemblockReserve =
+ UPB_ALIGN_UP(sizeof(upb_MemBlock), UPB_MALLOC_ALIGN);
+
+// Extracts the (upb_ArenaInternal*) from a (upb_Arena*)
+static upb_ArenaInternal* upb_Arena_Internal(const upb_Arena* a) {
+ return &((upb_ArenaState*)a)->body;
+}
+
+static bool _upb_Arena_IsTaggedRefcount(uintptr_t parent_or_count) {
+ return (parent_or_count & 1) == 1;
+}
+
+static bool _upb_Arena_IsTaggedPointer(uintptr_t parent_or_count) {
+ return (parent_or_count & 1) == 0;
+}
+
+static uintptr_t _upb_Arena_RefCountFromTagged(uintptr_t parent_or_count) {
+ UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
+ return parent_or_count >> 1;
+}
+
+static uintptr_t _upb_Arena_TaggedFromRefcount(uintptr_t refcount) {
+ uintptr_t parent_or_count = (refcount << 1) | 1;
+ UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
+ return parent_or_count;
+}
+
+static upb_ArenaInternal* _upb_Arena_PointerFromTagged(
+ uintptr_t parent_or_count) {
+ UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
+ return (upb_ArenaInternal*)parent_or_count;
+}
+
+static uintptr_t _upb_Arena_TaggedFromPointer(upb_ArenaInternal* ai) {
+ uintptr_t parent_or_count = (uintptr_t)ai;
+ UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
+ return parent_or_count;
+}
+
+static upb_alloc* _upb_ArenaInternal_BlockAlloc(upb_ArenaInternal* ai) {
+ return (upb_alloc*)(ai->block_alloc & ~0x1);
+}
+
+static uintptr_t _upb_Arena_MakeBlockAlloc(upb_alloc* alloc, bool has_initial) {
+ uintptr_t alloc_uint = (uintptr_t)alloc;
+ UPB_ASSERT((alloc_uint & 1) == 0);
+ return alloc_uint | (has_initial ? 1 : 0);
+}
+
+static bool _upb_ArenaInternal_HasInitialBlock(upb_ArenaInternal* ai) {
+ return ai->block_alloc & 0x1;
+}
+
+static upb_ArenaRoot _upb_Arena_FindRoot(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
while (_upb_Arena_IsTaggedPointer(poc)) {
- upb_Arena* next = _upb_Arena_PointerFromTagged(poc);
- UPB_ASSERT(a != next);
+ upb_ArenaInternal* next = _upb_Arena_PointerFromTagged(poc);
+ UPB_ASSERT(ai != next);
uintptr_t next_poc =
upb_Atomic_Load(&next->parent_or_count, memory_order_acquire);
@@ -55,104 +146,108 @@
// further away over time, but the path towards that root will continue to
// be valid and the creation of the path carries all the memory orderings
// required.
- UPB_ASSERT(a != _upb_Arena_PointerFromTagged(next_poc));
- upb_Atomic_Store(&a->parent_or_count, next_poc, memory_order_relaxed);
+ UPB_ASSERT(ai != _upb_Arena_PointerFromTagged(next_poc));
+ upb_Atomic_Store(&ai->parent_or_count, next_poc, memory_order_relaxed);
}
- a = next;
+ ai = next;
poc = next_poc;
}
- return (_upb_ArenaRoot){.root = a, .tagged_count = poc};
+ return (upb_ArenaRoot){.root = ai, .tagged_count = poc};
}
size_t upb_Arena_SpaceAllocated(upb_Arena* arena) {
- arena = _upb_Arena_FindRoot(arena).root;
+ upb_ArenaInternal* ai = _upb_Arena_FindRoot(arena).root;
size_t memsize = 0;
- while (arena != NULL) {
- _upb_MemBlock* block =
- upb_Atomic_Load(&arena->blocks, memory_order_relaxed);
+ while (ai != NULL) {
+ upb_MemBlock* block = upb_Atomic_Load(&ai->blocks, memory_order_relaxed);
while (block != NULL) {
- memsize += sizeof(_upb_MemBlock) + block->size;
+ memsize += sizeof(upb_MemBlock) + block->size;
block = upb_Atomic_Load(&block->next, memory_order_relaxed);
}
- arena = upb_Atomic_Load(&arena->next, memory_order_relaxed);
+ ai = upb_Atomic_Load(&ai->next, memory_order_relaxed);
}
return memsize;
}
uint32_t upb_Arena_DebugRefCount(upb_Arena* a) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
// These loads could probably be relaxed, but given that this is debug-only,
// it's not worth introducing a new variant for it.
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
while (_upb_Arena_IsTaggedPointer(poc)) {
- a = _upb_Arena_PointerFromTagged(poc);
- poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
+ ai = _upb_Arena_PointerFromTagged(poc);
+ poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
}
return _upb_Arena_RefCountFromTagged(poc);
}
-static void upb_Arena_AddBlock(upb_Arena* a, void* ptr, size_t size) {
- _upb_MemBlock* block = ptr;
+static void _upb_Arena_AddBlock(upb_Arena* a, void* ptr, size_t size) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ upb_MemBlock* block = ptr;
// Insert into linked list.
block->size = (uint32_t)size;
- upb_Atomic_Init(&block->next, a->blocks);
- upb_Atomic_Store(&a->blocks, block, memory_order_release);
+ upb_Atomic_Init(&block->next, ai->blocks);
+ upb_Atomic_Store(&ai->blocks, block, memory_order_release);
- a->head.ptr = UPB_PTR_AT(block, memblock_reserve, char);
- a->head.end = UPB_PTR_AT(block, size, char);
+ a->UPB_PRIVATE(ptr) = UPB_PTR_AT(block, kUpb_MemblockReserve, char);
+ a->UPB_PRIVATE(end) = UPB_PTR_AT(block, size, char);
- UPB_POISON_MEMORY_REGION(a->head.ptr, a->head.end - a->head.ptr);
+ UPB_POISON_MEMORY_REGION(a->UPB_PRIVATE(ptr),
+ a->UPB_PRIVATE(end) - a->UPB_PRIVATE(ptr));
}
-static bool upb_Arena_AllocBlock(upb_Arena* a, size_t size) {
- if (!a->block_alloc) return false;
- _upb_MemBlock* last_block = upb_Atomic_Load(&a->blocks, memory_order_acquire);
+static bool _upb_Arena_AllocBlock(upb_Arena* a, size_t size) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ if (!ai->block_alloc) return false;
+ upb_MemBlock* last_block = upb_Atomic_Load(&ai->blocks, memory_order_acquire);
size_t last_size = last_block != NULL ? last_block->size : 128;
- size_t block_size = UPB_MAX(size, last_size * 2) + memblock_reserve;
- _upb_MemBlock* block = upb_malloc(upb_Arena_BlockAlloc(a), block_size);
+ size_t block_size = UPB_MAX(size, last_size * 2) + kUpb_MemblockReserve;
+ upb_MemBlock* block =
+ upb_malloc(_upb_ArenaInternal_BlockAlloc(ai), block_size);
if (!block) return false;
- upb_Arena_AddBlock(a, block, block_size);
+ _upb_Arena_AddBlock(a, block, block_size);
+ UPB_ASSERT(UPB_PRIVATE(_upb_ArenaHas)(a) >= size);
return true;
}
-void* _upb_Arena_SlowMalloc(upb_Arena* a, size_t size) {
- if (!upb_Arena_AllocBlock(a, size)) return NULL; /* Out of memory. */
- UPB_ASSERT(_upb_ArenaHas(a) >= size);
- return upb_Arena_Malloc(a, size);
+void* UPB_PRIVATE(_upb_Arena_SlowMalloc)(upb_Arena* a, size_t size) {
+ if (!_upb_Arena_AllocBlock(a, size)) return NULL; // OOM
+ return upb_Arena_Malloc(a, size - UPB_ASAN_GUARD_SIZE);
}
-/* Public Arena API ***********************************************************/
+static upb_Arena* _upb_Arena_InitSlow(upb_alloc* alloc) {
+ const size_t first_block_overhead =
+ sizeof(upb_ArenaState) + kUpb_MemblockReserve;
+ upb_ArenaState* a;
-static upb_Arena* upb_Arena_InitSlow(upb_alloc* alloc) {
- const size_t first_block_overhead = sizeof(upb_Arena) + memblock_reserve;
- upb_Arena* a;
-
- /* We need to malloc the initial block. */
+ // We need to malloc the initial block.
char* mem;
size_t n = first_block_overhead + 256;
if (!alloc || !(mem = upb_malloc(alloc, n))) {
return NULL;
}
- a = UPB_PTR_AT(mem, n - sizeof(*a), upb_Arena);
- n -= sizeof(*a);
+ a = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), upb_ArenaState);
+ n -= sizeof(upb_ArenaState);
- a->block_alloc = upb_Arena_MakeBlockAlloc(alloc, 0);
- upb_Atomic_Init(&a->parent_or_count, _upb_Arena_TaggedFromRefcount(1));
- upb_Atomic_Init(&a->next, NULL);
- upb_Atomic_Init(&a->tail, a);
- upb_Atomic_Init(&a->blocks, NULL);
+ a->body.block_alloc = _upb_Arena_MakeBlockAlloc(alloc, 0);
+ upb_Atomic_Init(&a->body.parent_or_count, _upb_Arena_TaggedFromRefcount(1));
+ upb_Atomic_Init(&a->body.next, NULL);
+ upb_Atomic_Init(&a->body.tail, &a->body);
+ upb_Atomic_Init(&a->body.blocks, NULL);
- upb_Arena_AddBlock(a, mem, n);
+ _upb_Arena_AddBlock(&a->head, mem, n);
- return a;
+ return &a->head;
}
upb_Arena* upb_Arena_Init(void* mem, size_t n, upb_alloc* alloc) {
- upb_Arena* a;
+ UPB_ASSERT(sizeof(void*) * UPB_ARENA_SIZE_HACK >= sizeof(upb_ArenaState));
+ upb_ArenaState* a;
if (n) {
/* Align initial pointer up so that we return properly-aligned pointers. */
@@ -164,63 +259,65 @@
/* Round block size down to alignof(*a) since we will allocate the arena
* itself at the end. */
- n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_Arena));
+ n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_ArenaState));
- if (UPB_UNLIKELY(n < sizeof(upb_Arena))) {
- return upb_Arena_InitSlow(alloc);
+ if (UPB_UNLIKELY(n < sizeof(upb_ArenaState))) {
+ return _upb_Arena_InitSlow(alloc);
}
- a = UPB_PTR_AT(mem, n - sizeof(*a), upb_Arena);
+ a = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), upb_ArenaState);
- upb_Atomic_Init(&a->parent_or_count, _upb_Arena_TaggedFromRefcount(1));
- upb_Atomic_Init(&a->next, NULL);
- upb_Atomic_Init(&a->tail, a);
- upb_Atomic_Init(&a->blocks, NULL);
- a->block_alloc = upb_Arena_MakeBlockAlloc(alloc, 1);
- a->head.ptr = mem;
- a->head.end = UPB_PTR_AT(mem, n - sizeof(*a), char);
+ upb_Atomic_Init(&a->body.parent_or_count, _upb_Arena_TaggedFromRefcount(1));
+ upb_Atomic_Init(&a->body.next, NULL);
+ upb_Atomic_Init(&a->body.tail, &a->body);
+ upb_Atomic_Init(&a->body.blocks, NULL);
- return a;
+ a->body.block_alloc = _upb_Arena_MakeBlockAlloc(alloc, 1);
+ a->head.UPB_PRIVATE(ptr) = mem;
+ a->head.UPB_PRIVATE(end) = UPB_PTR_AT(mem, n - sizeof(upb_ArenaState), char);
+
+ return &a->head;
}
-static void arena_dofree(upb_Arena* a) {
- UPB_ASSERT(_upb_Arena_RefCountFromTagged(a->parent_or_count) == 1);
+static void _upb_Arena_DoFree(upb_ArenaInternal* ai) {
+ UPB_ASSERT(_upb_Arena_RefCountFromTagged(ai->parent_or_count) == 1);
- while (a != NULL) {
+ while (ai != NULL) {
// Load first since arena itself is likely from one of its blocks.
- upb_Arena* next_arena =
- (upb_Arena*)upb_Atomic_Load(&a->next, memory_order_acquire);
- upb_alloc* block_alloc = upb_Arena_BlockAlloc(a);
- _upb_MemBlock* block = upb_Atomic_Load(&a->blocks, memory_order_acquire);
+ upb_ArenaInternal* next_arena =
+ (upb_ArenaInternal*)upb_Atomic_Load(&ai->next, memory_order_acquire);
+ upb_alloc* block_alloc = _upb_ArenaInternal_BlockAlloc(ai);
+ upb_MemBlock* block = upb_Atomic_Load(&ai->blocks, memory_order_acquire);
while (block != NULL) {
// Load first since we are deleting block.
- _upb_MemBlock* next_block =
+ upb_MemBlock* next_block =
upb_Atomic_Load(&block->next, memory_order_acquire);
upb_free(block_alloc, block);
block = next_block;
}
- a = next_arena;
+ ai = next_arena;
}
}
void upb_Arena_Free(upb_Arena* a) {
- uintptr_t poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ uintptr_t poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
retry:
while (_upb_Arena_IsTaggedPointer(poc)) {
- a = _upb_Arena_PointerFromTagged(poc);
- poc = upb_Atomic_Load(&a->parent_or_count, memory_order_acquire);
+ ai = _upb_Arena_PointerFromTagged(poc);
+ poc = upb_Atomic_Load(&ai->parent_or_count, memory_order_acquire);
}
// compare_exchange or fetch_sub are RMW operations, which are more
// expensive then direct loads. As an optimization, we only do RMW ops
// when we need to update things for other threads to see.
if (poc == _upb_Arena_TaggedFromRefcount(1)) {
- arena_dofree(a);
+ _upb_Arena_DoFree(ai);
return;
}
if (upb_Atomic_CompareExchangeWeak(
- &a->parent_or_count, &poc,
+ &ai->parent_or_count, &poc,
_upb_Arena_TaggedFromRefcount(_upb_Arena_RefCountFromTagged(poc) - 1),
memory_order_release, memory_order_acquire)) {
// We were >1 and we decremented it successfully, so we are done.
@@ -232,12 +329,14 @@
goto retry;
}
-static void _upb_Arena_DoFuseArenaLists(upb_Arena* const parent,
- upb_Arena* child) {
- upb_Arena* parent_tail = upb_Atomic_Load(&parent->tail, memory_order_relaxed);
+static void _upb_Arena_DoFuseArenaLists(upb_ArenaInternal* const parent,
+ upb_ArenaInternal* child) {
+ upb_ArenaInternal* parent_tail =
+ upb_Atomic_Load(&parent->tail, memory_order_relaxed);
+
do {
// Our tail might be stale, but it will always converge to the true tail.
- upb_Arena* parent_tail_next =
+ upb_ArenaInternal* parent_tail_next =
upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
while (parent_tail_next != NULL) {
parent_tail = parent_tail_next;
@@ -245,7 +344,7 @@
upb_Atomic_Load(&parent_tail->next, memory_order_relaxed);
}
- upb_Arena* displaced =
+ upb_ArenaInternal* displaced =
upb_Atomic_Exchange(&parent_tail->next, child, memory_order_relaxed);
parent_tail = upb_Atomic_Load(&child->tail, memory_order_relaxed);
@@ -257,8 +356,8 @@
upb_Atomic_Store(&parent->tail, parent_tail, memory_order_relaxed);
}
-static upb_Arena* _upb_Arena_DoFuse(upb_Arena* a1, upb_Arena* a2,
- uintptr_t* ref_delta) {
+static upb_ArenaInternal* _upb_Arena_DoFuse(upb_Arena* a1, upb_Arena* a2,
+ uintptr_t* ref_delta) {
// `parent_or_count` has two disctint modes
// - parent pointer mode
// - refcount mode
@@ -266,14 +365,14 @@
// In parent pointer mode, it may change what pointer it refers to in the
// tree, but it will always approach a root. Any operation that walks the
// tree to the root may collapse levels of the tree concurrently.
- _upb_ArenaRoot r1 = _upb_Arena_FindRoot(a1);
- _upb_ArenaRoot r2 = _upb_Arena_FindRoot(a2);
+ upb_ArenaRoot r1 = _upb_Arena_FindRoot(a1);
+ upb_ArenaRoot r2 = _upb_Arena_FindRoot(a2);
if (r1.root == r2.root) return r1.root; // Already fused.
// Avoid cycles by always fusing into the root with the lower address.
if ((uintptr_t)r1.root > (uintptr_t)r2.root) {
- _upb_ArenaRoot tmp = r1;
+ upb_ArenaRoot tmp = r1;
r1 = r2;
r2 = tmp;
}
@@ -316,7 +415,8 @@
return r1.root;
}
-static bool _upb_Arena_FixupRefs(upb_Arena* new_root, uintptr_t ref_delta) {
+static bool _upb_Arena_FixupRefs(upb_ArenaInternal* new_root,
+ uintptr_t ref_delta) {
if (ref_delta == 0) return true; // No fixup required.
uintptr_t poc =
upb_Atomic_Load(&new_root->parent_or_count, memory_order_relaxed);
@@ -331,28 +431,33 @@
bool upb_Arena_Fuse(upb_Arena* a1, upb_Arena* a2) {
if (a1 == a2) return true; // trivial fuse
+ upb_ArenaInternal* ai1 = upb_Arena_Internal(a1);
+ upb_ArenaInternal* ai2 = upb_Arena_Internal(a2);
+
// Do not fuse initial blocks since we cannot lifetime extend them.
// Any other fuse scenario is allowed.
- if (upb_Arena_HasInitialBlock(a1) || upb_Arena_HasInitialBlock(a2)) {
+ if (_upb_ArenaInternal_HasInitialBlock(ai1) ||
+ _upb_ArenaInternal_HasInitialBlock(ai2)) {
return false;
}
// The number of refs we ultimately need to transfer to the new root.
uintptr_t ref_delta = 0;
while (true) {
- upb_Arena* new_root = _upb_Arena_DoFuse(a1, a2, &ref_delta);
+ upb_ArenaInternal* new_root = _upb_Arena_DoFuse(a1, a2, &ref_delta);
if (new_root != NULL && _upb_Arena_FixupRefs(new_root, ref_delta)) {
return true;
}
}
}
-bool upb_Arena_IncRefFor(upb_Arena* arena, const void* owner) {
- _upb_ArenaRoot r;
- if (upb_Arena_HasInitialBlock(arena)) return false;
+bool upb_Arena_IncRefFor(upb_Arena* a, const void* owner) {
+ upb_ArenaInternal* ai = upb_Arena_Internal(a);
+ if (_upb_ArenaInternal_HasInitialBlock(ai)) return false;
+ upb_ArenaRoot r;
retry:
- r = _upb_Arena_FindRoot(arena);
+ r = _upb_Arena_FindRoot(a);
if (upb_Atomic_CompareExchangeWeak(
&r.root->parent_or_count, &r.tagged_count,
_upb_Arena_TaggedFromRefcount(
@@ -365,6 +470,23 @@
goto retry;
}
-void upb_Arena_DecRefFor(upb_Arena* arena, const void* owner) {
- upb_Arena_Free(arena);
+void upb_Arena_DecRefFor(upb_Arena* a, const void* owner) { upb_Arena_Free(a); }
+
+void UPB_PRIVATE(_upb_Arena_SwapIn)(upb_Arena* des, const upb_Arena* src) {
+ upb_ArenaInternal* desi = upb_Arena_Internal(des);
+ upb_ArenaInternal* srci = upb_Arena_Internal(src);
+
+ *des = *src;
+ desi->block_alloc = srci->block_alloc;
+ upb_MemBlock* blocks = upb_Atomic_Load(&srci->blocks, memory_order_relaxed);
+ upb_Atomic_Init(&desi->blocks, blocks);
+}
+
+void UPB_PRIVATE(_upb_Arena_SwapOut)(upb_Arena* des, const upb_Arena* src) {
+ upb_ArenaInternal* desi = upb_Arena_Internal(des);
+ upb_ArenaInternal* srci = upb_Arena_Internal(src);
+
+ *des = *src;
+ upb_MemBlock* blocks = upb_Atomic_Load(&srci->blocks, memory_order_relaxed);
+ upb_Atomic_Store(&desi->blocks, blocks, memory_order_relaxed);
}
diff --git a/upb/mem/arena.h b/upb/mem/arena.h
index 1cb9182..319707e 100644
--- a/upb/mem/arena.h
+++ b/upb/mem/arena.h
@@ -22,19 +22,15 @@
#include <stddef.h>
#include <stdint.h>
-#include <string.h>
#include "upb/mem/alloc.h"
+#include "upb/mem/internal/arena.h"
// Must be last.
#include "upb/port/def.inc"
typedef struct upb_Arena upb_Arena;
-typedef struct {
- char *ptr, *end;
-} _upb_ArenaHead;
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -47,35 +43,23 @@
UPB_API void upb_Arena_Free(upb_Arena* a);
UPB_API bool upb_Arena_Fuse(upb_Arena* a, upb_Arena* b);
-bool upb_Arena_IncRefFor(upb_Arena* arena, const void* owner);
-void upb_Arena_DecRefFor(upb_Arena* arena, const void* owner);
+bool upb_Arena_IncRefFor(upb_Arena* a, const void* owner);
+void upb_Arena_DecRefFor(upb_Arena* a, const void* owner);
-void* _upb_Arena_SlowMalloc(upb_Arena* a, size_t size);
-size_t upb_Arena_SpaceAllocated(upb_Arena* arena);
-uint32_t upb_Arena_DebugRefCount(upb_Arena* arena);
+size_t upb_Arena_SpaceAllocated(upb_Arena* a);
+uint32_t upb_Arena_DebugRefCount(upb_Arena* a);
-UPB_INLINE size_t _upb_ArenaHas(upb_Arena* a) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- return (size_t)(h->end - h->ptr);
+UPB_API_INLINE upb_Arena* upb_Arena_New(void) {
+ return upb_Arena_Init(NULL, 0, &upb_alloc_global);
}
-UPB_API_INLINE void* upb_Arena_Malloc(upb_Arena* a, size_t size) {
- size = UPB_ALIGN_MALLOC(size);
- size_t span = size + UPB_ASAN_GUARD_SIZE;
- if (UPB_UNLIKELY(_upb_ArenaHas(a) < span)) {
- return _upb_Arena_SlowMalloc(a, size);
- }
+UPB_API_INLINE void* upb_Arena_Malloc(struct upb_Arena* a, size_t size) {
+ return UPB_PRIVATE(_upb_Arena_Malloc)(a, size);
+}
- // We have enough space to do a fast malloc.
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- void* ret = h->ptr;
- UPB_ASSERT(UPB_ALIGN_MALLOC((uintptr_t)ret) == (uintptr_t)ret);
- UPB_ASSERT(UPB_ALIGN_MALLOC(size) == size);
- UPB_UNPOISON_MEMORY_REGION(ret, size);
-
- h->ptr += span;
-
- return ret;
+UPB_API_INLINE void* upb_Arena_Realloc(upb_Arena* a, void* ptr, size_t oldsize,
+ size_t size) {
+ return UPB_PRIVATE(_upb_Arena_Realloc)(a, ptr, oldsize, size);
}
// Shrinks the last alloc from arena.
@@ -84,43 +68,7 @@
// this was not the last alloc.
UPB_API_INLINE void upb_Arena_ShrinkLast(upb_Arena* a, void* ptr,
size_t oldsize, size_t size) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- oldsize = UPB_ALIGN_MALLOC(oldsize);
- size = UPB_ALIGN_MALLOC(size);
- // Must be the last alloc.
- UPB_ASSERT((char*)ptr + oldsize == h->ptr - UPB_ASAN_GUARD_SIZE);
- UPB_ASSERT(size <= oldsize);
- h->ptr = (char*)ptr + size;
-}
-
-UPB_API_INLINE void* upb_Arena_Realloc(upb_Arena* a, void* ptr, size_t oldsize,
- size_t size) {
- _upb_ArenaHead* h = (_upb_ArenaHead*)a;
- oldsize = UPB_ALIGN_MALLOC(oldsize);
- size = UPB_ALIGN_MALLOC(size);
- bool is_most_recent_alloc = (uintptr_t)ptr + oldsize == (uintptr_t)h->ptr;
-
- if (is_most_recent_alloc) {
- ptrdiff_t diff = size - oldsize;
- if ((ptrdiff_t)_upb_ArenaHas(a) >= diff) {
- h->ptr += diff;
- return ptr;
- }
- } else if (size <= oldsize) {
- return ptr;
- }
-
- void* ret = upb_Arena_Malloc(a, size);
-
- if (ret && oldsize > 0) {
- memcpy(ret, ptr, UPB_MIN(oldsize, size));
- }
-
- return ret;
-}
-
-UPB_API_INLINE upb_Arena* upb_Arena_New(void) {
- return upb_Arena_Init(NULL, 0, &upb_alloc_global);
+ UPB_PRIVATE(_upb_Arena_ShrinkLast)(a, ptr, oldsize, size);
}
#ifdef __cplusplus
diff --git a/upb/mem/internal/arena.h b/upb/mem/internal/arena.h
index 21741c5..bff2b60 100644
--- a/upb/mem/internal/arena.h
+++ b/upb/mem/internal/arena.h
@@ -8,86 +8,104 @@
#ifndef UPB_MEM_INTERNAL_ARENA_H_
#define UPB_MEM_INTERNAL_ARENA_H_
-#include "upb/mem/arena.h"
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
// Must be last.
#include "upb/port/def.inc"
-typedef struct _upb_MemBlock _upb_MemBlock;
+// This is QUITE an ugly hack, which specifies the number of pointers needed
+// to equal (or exceed) the storage required for one upb_Arena.
+//
+// We need this because the decoder inlines a upb_Arena for performance but
+// the full struct is not visible outside of arena.c. Yes, I know, it's awful.
+#define UPB_ARENA_SIZE_HACK 7
+
+// LINT.IfChange(upb_Arena)
struct upb_Arena {
- _upb_ArenaHead head;
-
- // upb_alloc* together with a low bit which signals if there is an initial
- // block.
- uintptr_t block_alloc;
-
- // When multiple arenas are fused together, each arena points to a parent
- // arena (root points to itself). The root tracks how many live arenas
- // reference it.
-
- // The low bit is tagged:
- // 0: pointer to parent
- // 1: count, left shifted by one
- UPB_ATOMIC(uintptr_t) parent_or_count;
-
- // All nodes that are fused together are in a singly-linked list.
- UPB_ATOMIC(upb_Arena*) next; // NULL at end of list.
-
- // The last element of the linked list. This is present only as an
- // optimization, so that we do not have to iterate over all members for every
- // fuse. Only significant for an arena root. In other cases it is ignored.
- UPB_ATOMIC(upb_Arena*) tail; // == self when no other list members.
-
- // Linked list of blocks to free/cleanup. Atomic only for the benefit of
- // upb_Arena_SpaceAllocated().
- UPB_ATOMIC(_upb_MemBlock*) blocks;
+ char* UPB_ONLYBITS(ptr);
+ char* UPB_ONLYBITS(end);
};
-UPB_INLINE bool _upb_Arena_IsTaggedRefcount(uintptr_t parent_or_count) {
- return (parent_or_count & 1) == 1;
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/arena.ts:upb_Arena)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void UPB_PRIVATE(_upb_Arena_SwapIn)(struct upb_Arena* des,
+ const struct upb_Arena* src);
+void UPB_PRIVATE(_upb_Arena_SwapOut)(struct upb_Arena* des,
+ const struct upb_Arena* src);
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_ArenaHas)(const struct upb_Arena* a) {
+ return (size_t)(a->UPB_ONLYBITS(end) - a->UPB_ONLYBITS(ptr));
}
-UPB_INLINE bool _upb_Arena_IsTaggedPointer(uintptr_t parent_or_count) {
- return (parent_or_count & 1) == 0;
+UPB_INLINE void* UPB_PRIVATE(_upb_Arena_Malloc)(struct upb_Arena* a,
+ size_t size) {
+ void* UPB_PRIVATE(_upb_Arena_SlowMalloc)(struct upb_Arena * a, size_t size);
+
+ size = UPB_ALIGN_MALLOC(size);
+ const size_t span = size + UPB_ASAN_GUARD_SIZE;
+ if (UPB_UNLIKELY(UPB_PRIVATE(_upb_ArenaHas)(a) < span)) {
+ return UPB_PRIVATE(_upb_Arena_SlowMalloc)(a, span);
+ }
+
+ // We have enough space to do a fast malloc.
+ void* ret = a->UPB_ONLYBITS(ptr);
+ UPB_ASSERT(UPB_ALIGN_MALLOC((uintptr_t)ret) == (uintptr_t)ret);
+ UPB_ASSERT(UPB_ALIGN_MALLOC(size) == size);
+ UPB_UNPOISON_MEMORY_REGION(ret, size);
+
+ a->UPB_ONLYBITS(ptr) += span;
+
+ return ret;
}
-UPB_INLINE uintptr_t _upb_Arena_RefCountFromTagged(uintptr_t parent_or_count) {
- UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
- return parent_or_count >> 1;
+UPB_INLINE void* UPB_PRIVATE(_upb_Arena_Realloc)(struct upb_Arena* a, void* ptr,
+ size_t oldsize, size_t size) {
+ oldsize = UPB_ALIGN_MALLOC(oldsize);
+ size = UPB_ALIGN_MALLOC(size);
+ bool is_most_recent_alloc =
+ (uintptr_t)ptr + oldsize == (uintptr_t)a->UPB_ONLYBITS(ptr);
+
+ if (is_most_recent_alloc) {
+ ptrdiff_t diff = size - oldsize;
+ if ((ptrdiff_t)UPB_PRIVATE(_upb_ArenaHas)(a) >= diff) {
+ a->UPB_ONLYBITS(ptr) += diff;
+ return ptr;
+ }
+ } else if (size <= oldsize) {
+ return ptr;
+ }
+
+ void* ret = UPB_PRIVATE(_upb_Arena_Malloc)(a, size);
+
+ if (ret && oldsize > 0) {
+ memcpy(ret, ptr, UPB_MIN(oldsize, size));
+ }
+
+ return ret;
}
-UPB_INLINE uintptr_t _upb_Arena_TaggedFromRefcount(uintptr_t refcount) {
- uintptr_t parent_or_count = (refcount << 1) | 1;
- UPB_ASSERT(_upb_Arena_IsTaggedRefcount(parent_or_count));
- return parent_or_count;
+UPB_INLINE void UPB_PRIVATE(_upb_Arena_ShrinkLast)(struct upb_Arena* a,
+ void* ptr, size_t oldsize,
+ size_t size) {
+ oldsize = UPB_ALIGN_MALLOC(oldsize);
+ size = UPB_ALIGN_MALLOC(size);
+ // Must be the last alloc.
+ UPB_ASSERT((char*)ptr + oldsize ==
+ a->UPB_ONLYBITS(ptr) - UPB_ASAN_GUARD_SIZE);
+ UPB_ASSERT(size <= oldsize);
+ a->UPB_ONLYBITS(ptr) = (char*)ptr + size;
}
-UPB_INLINE upb_Arena* _upb_Arena_PointerFromTagged(uintptr_t parent_or_count) {
- UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
- return (upb_Arena*)parent_or_count;
-}
-
-UPB_INLINE uintptr_t _upb_Arena_TaggedFromPointer(upb_Arena* a) {
- uintptr_t parent_or_count = (uintptr_t)a;
- UPB_ASSERT(_upb_Arena_IsTaggedPointer(parent_or_count));
- return parent_or_count;
-}
-
-UPB_INLINE upb_alloc* upb_Arena_BlockAlloc(upb_Arena* arena) {
- return (upb_alloc*)(arena->block_alloc & ~0x1);
-}
-
-UPB_INLINE uintptr_t upb_Arena_MakeBlockAlloc(upb_alloc* alloc,
- bool has_initial) {
- uintptr_t alloc_uint = (uintptr_t)alloc;
- UPB_ASSERT((alloc_uint & 1) == 0);
- return alloc_uint | (has_initial ? 1 : 0);
-}
-
-UPB_INLINE bool upb_Arena_HasInitialBlock(upb_Arena* arena) {
- return arena->block_alloc & 0x1;
-}
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
#include "upb/port/undef.inc"
diff --git a/upb/message/BUILD b/upb/message/BUILD
index 22d4ea9..3212444 100644
--- a/upb/message/BUILD
+++ b/upb/message/BUILD
@@ -17,40 +17,83 @@
)
cc_library(
- name = "accessors",
+ name = "message",
srcs = [
"accessors.c",
- "internal/accessors.h",
+ "array.c",
+ "compat.c",
+ "map.c",
+ "map_sorter.c",
+ "message.c",
],
hdrs = [
"accessors.h",
+ "array.h",
+ "compat.h",
+ "map.h",
+ "map_gencode_util.h",
+ "message.h",
+ "tagged_ptr.h",
+ "value.h",
],
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
":internal",
- ":message",
"//upb:base",
- "//upb:eps_copy_input_stream",
+ "//upb:mem",
"//upb:mini_table",
- "//upb:mini_table_internal",
"//upb:port",
- "//upb:wire",
- "//upb:wire_reader",
+ "//upb/base:internal",
+ "//upb/mini_table:internal",
],
)
cc_library(
- name = "accessors_internal",
+ name = "internal",
+ srcs = [
+ "internal/extension.c",
+ "internal/message.c",
+ ],
hdrs = [
"internal/accessors.h",
+ "internal/array.h",
+ "internal/extension.h",
+ "internal/map.h",
+ "internal/map_entry.h",
+ "internal/map_sorter.h",
+ "internal/message.h",
+ "internal/tagged_ptr.h",
],
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
- ":internal",
- "//upb:mini_table_internal",
+ "//upb:base",
+ "//upb:mem",
+ "//upb:mini_table",
"//upb:port",
+ "//upb/base:internal",
+ "//upb/hash",
+ "//upb/mini_table:internal",
+ ],
+)
+
+cc_library(
+ name = "compare",
+ srcs = [
+ "compare.c",
+ ],
+ hdrs = [
+ "compare.h",
+ ],
+ copts = UPB_DEFAULT_COPTS,
+ visibility = ["//visibility:public"],
+ deps = [
+ ":message",
+ "//upb:mem",
+ "//upb:mini_table",
+ "//upb:port",
+ "//upb:wire",
],
)
@@ -65,81 +108,14 @@
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
- ":accessors",
":internal",
":message",
- ":types",
- "//upb:base",
- "//upb:mem",
- "//upb:mini_table",
- "//upb:mini_table_internal",
- "//upb:port",
- ],
-)
-
-cc_library(
- name = "internal",
- srcs = [
- "array.c",
- "array.h",
- "map.c",
- "map.h",
- "map_sorter.c",
- "message.c",
- "message.h",
- ],
- hdrs = [
- "internal/array.h",
- "internal/extension.h",
- "internal/map.h",
- "internal/map_entry.h",
- "internal/map_sorter.h",
- "internal/message.h",
- "map_gencode_util.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ":internal_types",
- ":types",
- ":value",
- "//upb:base",
- "//upb:base_internal",
- "//upb:hash",
- "//upb:mem",
- "//upb:mini_table",
- "//upb:port",
- ],
-)
-
-cc_library(
- name = "internal_types",
- hdrs = [
- "internal/types.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ],
-)
-
-cc_library(
- name = "message",
- hdrs = [
- "array.h",
- "map.h",
- "message.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ":internal",
- ":types",
- ":value",
"//upb:base",
"//upb:mem",
"//upb:mini_table",
"//upb:port",
+ "//upb/base:internal",
+ "//upb/mini_table:internal",
],
)
@@ -154,20 +130,14 @@
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
- ":accessors",
- ":accessors_internal",
":internal",
":message",
- ":tagged_ptr",
- ":types",
"//upb:base",
"//upb:eps_copy_input_stream",
"//upb:mem",
"//upb:mini_table",
- "//upb:mini_table_internal",
"//upb:port",
"//upb:wire",
- "//upb:wire_internal",
"//upb:wire_reader",
],
)
@@ -181,47 +151,11 @@
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
- ":accessors",
":message",
"//upb:port",
],
)
-cc_library(
- name = "tagged_ptr",
- hdrs = ["tagged_ptr.h"],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ":types",
- "//upb:port",
- ],
-)
-
-cc_library(
- name = "types",
- hdrs = [
- "types.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [],
-)
-
-cc_library(
- name = "value",
- hdrs = [
- "value.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ":tagged_ptr",
- ":types",
- "//upb:base",
- ],
-)
-
proto_library(
name = "message_test_proto",
testonly = 1,
@@ -251,23 +185,23 @@
name = "accessors_test",
srcs = ["accessors_test.cc"],
deps = [
- ":accessors",
":message",
"//:protobuf",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:mini_descriptor",
- "//upb:mini_descriptor_internal",
"//upb:mini_table",
"//upb:port",
"//upb:wire",
+ "//upb/mini_descriptor:internal",
"//upb/test:test_messages_proto2_upb_minitable",
"//upb/test:test_messages_proto2_upb_proto",
"//upb/test:test_messages_proto3_upb_minitable",
"//upb/test:test_messages_proto3_upb_proto",
"//upb/test:test_upb_proto",
"@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -276,9 +210,10 @@
srcs = ["array_test.cc"],
deps = [
":message",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -286,20 +221,21 @@
name = "copy_test",
srcs = ["copy_test.cc"],
deps = [
- ":accessors",
":copy",
":internal",
":message",
"//:protobuf",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:mini_table",
+ "//upb:port",
"//upb:wire",
"//upb/test:test_messages_proto2_upb_minitable",
"//upb/test:test_messages_proto2_upb_proto",
"//upb/test:test_upb_proto",
"@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -308,9 +244,10 @@
srcs = ["map_test.cc"],
deps = [
":message",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -318,26 +255,24 @@
name = "promote_test",
srcs = ["promote_test.cc"],
deps = [
- ":accessors",
":copy",
":internal",
":message",
":promote",
- ":tagged_ptr",
"//:protobuf",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:mini_descriptor",
- "//upb:mini_descriptor_internal",
"//upb:mini_table",
- "//upb:port",
"//upb:wire",
+ "//upb/mini_descriptor:internal",
"//upb/test:test_messages_proto2_upb_proto",
"//upb/test:test_messages_proto3_upb_proto",
"//upb/test:test_proto_upb_minitable",
"//upb/test:test_upb_proto",
"@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -347,20 +282,21 @@
name = "test",
srcs = ["test.cc"],
deps = [
+ ":internal",
+ ":message",
":message_test_upb_minitable_proto",
":message_test_upb_proto",
":message_test_upb_proto_reflection",
- ":value",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:json",
"//upb:mem",
- "//upb:message",
"//upb:mini_table",
"//upb:reflection",
"//upb:wire",
"//upb/test:fuzz_util",
"//upb/test:test_messages_proto3_upb_proto",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -389,10 +325,11 @@
deps = [
":utf8_test_upb_minitable_proto",
":utf8_test_upb_proto",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:wire",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -406,8 +343,30 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+
+filegroup(
+ name = "test_utils",
+ srcs = glob(
+ [
+ "**/*test.proto",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/message/accessors.c b/upb/message/accessors.c
index 25c0f9e..2b02c82 100644
--- a/upb/message/accessors.c
+++ b/upb/message/accessors.c
@@ -7,65 +7,38 @@
#include "upb/message/accessors.h"
+#include <string.h>
+
+#include "upb/mem/arena.h"
#include "upb/message/array.h"
-#include "upb/message/internal/array.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
#include "upb/mini_table/field.h"
-#include "upb/wire/decode.h"
-#include "upb/wire/encode.h"
-#include "upb/wire/eps_copy_input_stream.h"
-#include "upb/wire/reader.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
// Must be last.
#include "upb/port/def.inc"
-upb_MapInsertStatus upb_Message_InsertMapEntry(upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* map_entry_message,
- upb_Arena* arena) {
- const upb_MiniTable* map_entry_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
+bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
+ const upb_MiniTableField* f,
+ upb_Message* map_entry_message, upb_Arena* arena) {
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
UPB_ASSERT(map_entry_mini_table);
- UPB_ASSERT(map_entry_mini_table->field_count == 2);
+ UPB_ASSERT(map_entry_mini_table->UPB_PRIVATE(field_count) == 2);
const upb_MiniTableField* map_entry_key_field =
- &map_entry_mini_table->fields[0];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[0];
const upb_MiniTableField* map_entry_value_field =
- &map_entry_mini_table->fields[1];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[1];
// Map key/value cannot have explicit defaults,
// hence assuming a zero default is valid.
upb_MessageValue default_val;
memset(&default_val, 0, sizeof(upb_MessageValue));
- upb_MessageValue map_entry_key;
- upb_MessageValue map_entry_value;
- _upb_Message_GetField(map_entry_message, map_entry_key_field, &default_val,
- &map_entry_key);
- _upb_Message_GetField(map_entry_message, map_entry_value_field, &default_val,
- &map_entry_value);
- return upb_Map_Insert(map, map_entry_key, map_entry_value, arena);
-}
-
-bool upb_Message_IsExactlyEqual(const upb_Message* m1, const upb_Message* m2,
- const upb_MiniTable* layout) {
- if (m1 == m2) return true;
-
- int opts = kUpb_EncodeOption_SkipUnknown | kUpb_EncodeOption_Deterministic;
- upb_Arena* a = upb_Arena_New();
-
- // Compare deterministically serialized payloads with no unknown fields.
- size_t size1, size2;
- char *data1, *data2;
- upb_EncodeStatus status1 = upb_Encode(m1, layout, opts, a, &data1, &size1);
- upb_EncodeStatus status2 = upb_Encode(m2, layout, opts, a, &data2, &size2);
-
- if (status1 != kUpb_EncodeStatus_Ok || status2 != kUpb_EncodeStatus_Ok) {
- // TODO: How should we fail here? (In Ruby we throw an exception.)
- upb_Arena_Free(a);
- return false;
- }
-
- const bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
- upb_Arena_Free(a);
- return ret;
+ upb_MessageValue map_entry_key =
+ upb_Message_GetField(map_entry_message, map_entry_key_field, default_val);
+ upb_MessageValue map_entry_value = upb_Message_GetField(
+ map_entry_message, map_entry_value_field, default_val);
+ return upb_Map_Set(map, map_entry_key, map_entry_value, arena);
}
diff --git a/upb/message/accessors.h b/upb/message/accessors.h
index f8a9f99..e55781c 100644
--- a/upb/message/accessors.h
+++ b/upb/message/accessors.h
@@ -8,15 +8,24 @@
#ifndef UPB_MESSAGE_ACCESSORS_H_
#define UPB_MESSAGE_ACCESSORS_H_
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
#include "upb/base/descriptor_constants.h"
+#include "upb/base/string_view.h"
+#include "upb/mem/arena.h"
#include "upb/message/array.h"
#include "upb/message/internal/accessors.h"
#include "upb/message/internal/array.h"
#include "upb/message/internal/map.h"
#include "upb/message/internal/message.h"
+#include "upb/message/internal/tagged_ptr.h"
#include "upb/message/map.h"
+#include "upb/message/tagged_ptr.h"
+#include "upb/message/value.h"
#include "upb/mini_table/enum.h"
-#include "upb/mini_table/field.h"
+#include "upb/mini_table/sub.h"
// Must be last.
#include "upb/port/def.inc"
@@ -54,28 +63,62 @@
UPB_API_INLINE uint32_t upb_Message_WhichOneofFieldNumber(
const upb_Message* message, const upb_MiniTableField* oneof_field) {
- UPB_ASSUME(_upb_MiniTableField_InOneOf(oneof_field));
- return _upb_getoneofcase_field(message, oneof_field);
+ UPB_ASSUME(upb_MiniTableField_IsInOneof(oneof_field));
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(message, oneof_field);
+}
+
+// NOTE: The default_val is only used for fields that support presence.
+// For repeated/map fields, the resulting upb_Array*/upb_Map* can be NULL if a
+// upb_Array/upb_Map has not been allocated yet. Array/map fields do not have
+// presence, so this is semantically identical to a pointer to an empty
+// array/map, and must be treated the same for all semantic purposes.
+UPB_INLINE upb_MessageValue
+upb_Message_GetField(const upb_Message* msg, const upb_MiniTableField* field,
+ upb_MessageValue default_val) {
+ upb_MessageValue ret;
+ if (upb_MiniTableField_IsExtension(field)) {
+ _upb_Message_GetExtensionField(msg, (upb_MiniTableExtension*)field,
+ &default_val, &ret);
+ } else {
+ _upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
+ }
+ return ret;
+}
+
+UPB_INLINE bool upb_Message_SetField(upb_Message* msg,
+ const upb_MiniTableField* field,
+ upb_MessageValue val, upb_Arena* a) {
+ if (upb_MiniTableField_IsExtension(field)) {
+ const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)field;
+ return _upb_Message_SetExtensionField(msg, ext, &val, a);
+ } else {
+ _upb_Message_SetNonExtensionField(msg, field, &val);
+ return true;
+ }
}
UPB_API_INLINE bool upb_Message_GetBool(const upb_Message* msg,
const upb_MiniTableField* field,
bool default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Bool);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- bool ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_1Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue def;
+ def.bool_val = default_val;
+ return upb_Message_GetField(msg, field, def).bool_val;
}
UPB_API_INLINE bool upb_Message_SetBool(upb_Message* msg,
const upb_MiniTableField* field,
bool value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Bool);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_1Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.bool_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE int32_t upb_Message_GetInt32(const upb_Message* msg,
@@ -83,11 +126,13 @@
int32_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int32 ||
upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- int32_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.int32_val = default_val;
+ return upb_Message_GetField(msg, field, def).int32_val;
}
UPB_API_INLINE bool upb_Message_SetInt32(upb_Message* msg,
@@ -95,37 +140,46 @@
int32_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int32 ||
upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.int32_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE uint32_t upb_Message_GetUInt32(const upb_Message* msg,
const upb_MiniTableField* field,
uint32_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt32);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- uint32_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.uint32_val = default_val;
+ return upb_Message_GetField(msg, field, def).uint32_val;
}
UPB_API_INLINE bool upb_Message_SetUInt32(upb_Message* msg,
const upb_MiniTableField* field,
uint32_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt32);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.uint32_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE void upb_Message_SetClosedEnum(
upb_Message* msg, const upb_MiniTable* msg_mini_table,
const upb_MiniTableField* field, int32_t value) {
UPB_ASSERT(upb_MiniTableField_IsClosedEnum(field));
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
UPB_ASSERT(upb_MiniTableEnum_CheckValue(
upb_MiniTable_GetSubEnumTable(msg_mini_table, field), value));
_upb_Message_SetNonExtensionField(msg, field, &value);
@@ -133,94 +187,116 @@
UPB_API_INLINE int64_t upb_Message_GetInt64(const upb_Message* msg,
const upb_MiniTableField* field,
- uint64_t default_val) {
+ int64_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- int64_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.int64_val = default_val;
+ return upb_Message_GetField(msg, field, def).int64_val;
}
UPB_API_INLINE bool upb_Message_SetInt64(upb_Message* msg,
const upb_MiniTableField* field,
int64_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Int64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.int64_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE uint64_t upb_Message_GetUInt64(const upb_Message* msg,
const upb_MiniTableField* field,
uint64_t default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- uint64_t ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.uint64_val = default_val;
+ return upb_Message_GetField(msg, field, def).uint64_val;
}
UPB_API_INLINE bool upb_Message_SetUInt64(upb_Message* msg,
const upb_MiniTableField* field,
uint64_t value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_UInt64);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.uint64_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE float upb_Message_GetFloat(const upb_Message* msg,
const upb_MiniTableField* field,
float default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Float);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- float ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.float_val = default_val;
+ return upb_Message_GetField(msg, field, def).float_val;
}
UPB_API_INLINE bool upb_Message_SetFloat(upb_Message* msg,
const upb_MiniTableField* field,
float value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Float);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_4Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_4Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.float_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE double upb_Message_GetDouble(const upb_Message* msg,
const upb_MiniTableField* field,
double default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Double);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- double ret;
- _upb_Message_GetField(msg, field, &default_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.double_val = default_val;
+ return upb_Message_GetField(msg, field, def).double_val;
}
UPB_API_INLINE bool upb_Message_SetDouble(upb_Message* msg,
const upb_MiniTableField* field,
double value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Double);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_8Byte);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_8Byte);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.double_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE upb_StringView
upb_Message_GetString(const upb_Message* msg, const upb_MiniTableField* field,
- upb_StringView def_val) {
+ upb_StringView default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_String ||
upb_MiniTableField_CType(field) == kUpb_CType_Bytes);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_StringView);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- upb_StringView ret;
- _upb_Message_GetField(msg, field, &def_val, &ret);
- return ret;
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_StringView);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+
+ upb_MessageValue def;
+ def.str_val = default_val;
+ return upb_Message_GetField(msg, field, def).str_val;
}
UPB_API_INLINE bool upb_Message_SetString(upb_Message* msg,
@@ -228,18 +304,21 @@
upb_StringView value, upb_Arena* a) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_String ||
upb_MiniTableField_CType(field) == kUpb_CType_Bytes);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_StringView);
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- return _upb_Message_SetField(msg, field, &value, a);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+ kUpb_FieldRep_StringView);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ upb_MessageValue val;
+ val.str_val = value;
+ return upb_Message_SetField(msg, field, val, a);
}
UPB_API_INLINE upb_TaggedMessagePtr upb_Message_GetTaggedMessagePtr(
const upb_Message* msg, const upb_MiniTableField* field,
upb_Message* default_val) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) ==
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte));
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
upb_TaggedMessagePtr tagged;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
return tagged;
@@ -260,10 +339,11 @@
upb_Message* msg, const upb_MiniTable* mini_table,
const upb_MiniTableField* field, upb_TaggedMessagePtr sub_message) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) ==
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte));
- UPB_ASSUME(!upb_IsRepeatedOrMap(field));
- UPB_ASSERT(mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+ UPB_ASSERT(upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]));
_upb_Message_SetNonExtensionField(msg, field, &sub_message);
}
@@ -272,7 +352,8 @@
const upb_MiniTableField* field,
upb_Message* sub_message) {
_upb_Message_SetTaggedMessagePtr(
- msg, mini_table, field, _upb_TaggedMessagePtr_Pack(sub_message, false));
+ msg, mini_table, field,
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(sub_message, false));
}
UPB_API_INLINE upb_Message* upb_Message_GetOrCreateMutableMessage(
@@ -280,21 +361,22 @@
const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSERT(arena);
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- upb_Message* sub_message = *UPB_PTR_AT(msg, field->offset, upb_Message*);
+ upb_Message* sub_message =
+ *UPB_PTR_AT(msg, field->UPB_ONLYBITS(offset), upb_Message*);
if (!sub_message) {
- const upb_MiniTable* sub_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* sub_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]);
UPB_ASSERT(sub_mini_table);
sub_message = _upb_Message_New(sub_mini_table, arena);
- *UPB_PTR_AT(msg, field->offset, upb_Message*) = sub_message;
- _upb_Message_SetPresence(msg, field);
+ *UPB_PTR_AT(msg, field->UPB_ONLYBITS(offset), upb_Message*) = sub_message;
+ UPB_PRIVATE(_upb_Message_SetPresence)(msg, field);
}
return sub_message;
}
UPB_API_INLINE const upb_Array* upb_Message_GetArray(
const upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* ret;
const upb_Array* default_val = NULL;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
@@ -303,20 +385,23 @@
UPB_API_INLINE upb_Array* upb_Message_GetMutableArray(
upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
return (upb_Array*)upb_Message_GetArray(msg, field);
}
UPB_API_INLINE upb_Array* upb_Message_GetOrCreateMutableArray(
upb_Message* msg, const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSERT(arena);
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* array = upb_Message_GetMutableArray(msg, field);
if (!array) {
- array = _upb_Array_New(arena, 4, _upb_MiniTable_ElementSizeLg2(field));
+ array = UPB_PRIVATE(_upb_Array_New)(
+ arena, 4, UPB_PRIVATE(_upb_MiniTableField_ElemSizeLg2)(field));
// Check again due to: https://godbolt.org/z/7WfaoKG1r
- _upb_MiniTableField_CheckIsArray(field);
- _upb_Message_SetField(msg, field, &array, arena);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
+ upb_MessageValue val;
+ val.array_val = array;
+ upb_Message_SetField(msg, field, val, arena);
}
return array;
}
@@ -324,7 +409,7 @@
UPB_API_INLINE void* upb_Message_ResizeArrayUninitialized(
upb_Message* msg, const upb_MiniTableField* field, size_t size,
upb_Arena* arena) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(arr, size, arena)) return NULL;
return _upb_array_ptr(arr);
@@ -332,7 +417,7 @@
UPB_API_INLINE const upb_Map* upb_Message_GetMap(
const upb_Message* msg, const upb_MiniTableField* field) {
- _upb_MiniTableField_CheckIsMap(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
_upb_Message_AssertMapIsUntagged(msg, field);
upb_Map* ret;
const upb_Map* default_val = NULL;
@@ -350,9 +435,9 @@
const upb_MiniTableField* field, upb_Arena* arena) {
UPB_ASSUME(upb_MiniTableField_CType(field) == kUpb_CType_Message);
const upb_MiniTableField* map_entry_key_field =
- &map_entry_mini_table->fields[0];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[0];
const upb_MiniTableField* map_entry_value_field =
- &map_entry_mini_table->fields[1];
+ &map_entry_mini_table->UPB_PRIVATE(fields)[1];
return _upb_Message_GetOrCreateMutableMap(
msg, field,
_upb_Map_CTypeSize(upb_MiniTableField_CType(map_entry_key_field)),
@@ -361,15 +446,9 @@
}
// Updates a map entry given an entry message.
-upb_MapInsertStatus upb_Message_InsertMapEntry(upb_Map* map,
- const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
- upb_Message* map_entry_message,
- upb_Arena* arena);
-
-// Compares two messages by serializing them and calling memcmp().
-bool upb_Message_IsExactlyEqual(const upb_Message* m1, const upb_Message* m2,
- const upb_MiniTable* layout);
+bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
+ const upb_MiniTableField* field,
+ upb_Message* map_entry_message, upb_Arena* arena);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/upb/message/accessors_test.cc b/upb/message/accessors_test.cc
index 5f2eccc..9d8aa0e 100644
--- a/upb/message/accessors_test.cc
+++ b/upb/message/accessors_test.cc
@@ -27,6 +27,7 @@
#include "upb/base/descriptor_constants.h"
#include "upb/base/status.h"
#include "upb/base/string_view.h"
+#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/message/array.h"
#include "upb/message/message.h"
@@ -81,11 +82,11 @@
// Scalar/Boolean.
const upb_MiniTableField* optional_bool_field =
find_proto2_field(kFieldOptionalBool);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_bool_field));
+ EXPECT_EQ(false, upb_Message_HasField(UPB_UPCAST(msg), optional_bool_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_optional_bool(msg, true);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_bool_field));
- upb_Message_ClearField(msg, optional_bool_field);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_bool_field));
+ EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_bool_field));
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_bool_field);
+ EXPECT_EQ(false, upb_Message_HasField(UPB_UPCAST(msg), optional_bool_field));
EXPECT_EQ(
false,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_bool(msg));
@@ -93,16 +94,18 @@
// String.
const upb_MiniTableField* optional_string_field =
find_proto2_field(kFieldOptionalString);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_optional_string(
msg, upb_StringView_FromString(kTestStr1));
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_string_field));
+ EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
strlen(kTestStr1),
protobuf_test_messages_proto2_TestAllTypesProto2_optional_string(msg)
.size);
- upb_Message_ClearField(msg, optional_string_field);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_string_field);
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
0, protobuf_test_messages_proto2_TestAllTypesProto2_optional_string(msg)
.size);
@@ -110,12 +113,15 @@
// Message.
const upb_MiniTableField* optional_message_field =
find_proto2_field(kFieldOptionalNestedMessage);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
protobuf_test_messages_proto2_TestAllTypesProto2_mutable_optional_nested_message(
msg, arena);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_message_field));
- upb_Message_ClearField(msg, optional_message_field);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
+ EXPECT_EQ(true,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_message_field);
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
EXPECT_EQ(
true,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_nested_message(
@@ -127,21 +133,31 @@
const upb_MiniTableField* optional_oneof_string_field =
find_proto2_field(kFieldOptionalOneOfString);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_string_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_oneof_uint32(msg, 123);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_oneof_uint32_field));
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_string_field));
+ EXPECT_EQ(true,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_oneof_string(
msg, upb_StringView_FromString(kTestStr1));
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_oneof_string_field));
- upb_Message_ClearField(msg, optional_oneof_uint32_field);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_oneof_string_field));
- upb_Message_ClearField(msg, optional_oneof_string_field);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_string_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
+ EXPECT_EQ(true,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_oneof_uint32_field);
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
+ EXPECT_EQ(true,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_oneof_string_field);
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
upb_Arena_Free(arena);
}
@@ -157,10 +173,12 @@
EXPECT_EQ(
0, protobuf_test_messages_proto2_TestAllTypesProto2_optional_int32(msg));
- EXPECT_EQ(0, upb_Message_GetInt32(msg, optional_int32_field, 0));
- upb_Message_SetInt32(msg, optional_int32_field, kTestInt32, nullptr);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_int32_field));
- EXPECT_EQ(kTestInt32, upb_Message_GetInt32(msg, optional_int32_field, 0));
+ EXPECT_EQ(0, upb_Message_GetInt32(UPB_UPCAST(msg), optional_int32_field, 0));
+ upb_Message_SetInt32(UPB_UPCAST(msg), optional_int32_field, kTestInt32,
+ nullptr);
+ EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_int32_field));
+ EXPECT_EQ(kTestInt32,
+ upb_Message_GetInt32(UPB_UPCAST(msg), optional_int32_field, 0));
EXPECT_EQ(
kTestInt32,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_int32(msg));
@@ -170,9 +188,12 @@
EXPECT_EQ(
0, protobuf_test_messages_proto2_TestAllTypesProto2_optional_uint32(msg));
- EXPECT_EQ(0, upb_Message_GetUInt32(msg, optional_uint32_field, 0));
- upb_Message_SetUInt32(msg, optional_uint32_field, kTestUInt32, nullptr);
- EXPECT_EQ(kTestUInt32, upb_Message_GetUInt32(msg, optional_uint32_field, 0));
+ EXPECT_EQ(0,
+ upb_Message_GetUInt32(UPB_UPCAST(msg), optional_uint32_field, 0));
+ upb_Message_SetUInt32(UPB_UPCAST(msg), optional_uint32_field, kTestUInt32,
+ nullptr);
+ EXPECT_EQ(kTestUInt32,
+ upb_Message_GetUInt32(UPB_UPCAST(msg), optional_uint32_field, 0));
EXPECT_EQ(
kTestUInt32,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_uint32(msg));
@@ -192,18 +213,20 @@
EXPECT_EQ(
0, protobuf_test_messages_proto3_TestAllTypesProto3_optional_int64(msg));
- upb_Message_SetInt64(msg, optional_int64_field, -1, nullptr);
+ upb_Message_SetInt64(UPB_UPCAST(msg), optional_int64_field, -1, nullptr);
EXPECT_EQ(
-1, protobuf_test_messages_proto3_TestAllTypesProto3_optional_int64(msg));
- EXPECT_EQ(-1, upb_Message_GetInt64(msg, optional_int64_field, 0));
+ EXPECT_EQ(-1, upb_Message_GetInt64(UPB_UPCAST(msg), optional_int64_field, 0));
EXPECT_EQ(
0, protobuf_test_messages_proto3_TestAllTypesProto3_optional_uint64(msg));
- upb_Message_SetUInt64(msg, optional_uint64_field, kTestUInt64, nullptr);
+ upb_Message_SetUInt64(UPB_UPCAST(msg), optional_uint64_field, kTestUInt64,
+ nullptr);
EXPECT_EQ(
kTestUInt64,
protobuf_test_messages_proto3_TestAllTypesProto3_optional_uint64(msg));
- EXPECT_EQ(kTestUInt64, upb_Message_GetUInt64(msg, optional_uint64_field, 0));
+ EXPECT_EQ(kTestUInt64,
+ upb_Message_GetUInt64(UPB_UPCAST(msg), optional_uint64_field, 0));
upb_Arena_Free(arena);
}
@@ -217,25 +240,27 @@
find_proto2_field(kFieldOptionalString);
// Test default.
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
// Test read after write using C.
protobuf_test_messages_proto2_TestAllTypesProto2_set_optional_string(
msg, upb_StringView_FromString(kTestStr1));
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_string_field));
- upb_StringView value = upb_Message_GetString(msg, optional_string_field,
- upb_StringView{nullptr, 0});
+ EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
+ upb_StringView value = upb_Message_GetString(
+ UPB_UPCAST(msg), optional_string_field, upb_StringView{nullptr, 0});
std::string read_value = std::string(value.data, value.size);
EXPECT_EQ(kTestStr1, read_value);
// Clear.
- upb_Message_ClearField(msg, optional_string_field);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_string_field);
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
false,
protobuf_test_messages_proto2_TestAllTypesProto2_has_optional_string(
msg));
- upb_Message_SetString(msg, optional_string_field,
+ upb_Message_SetString(UPB_UPCAST(msg), optional_string_field,
upb_StringView_FromString(kTestStr2), nullptr);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_string_field));
+ EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
true,
protobuf_test_messages_proto2_TestAllTypesProto2_has_optional_string(
@@ -256,23 +281,25 @@
find_proto2_field(kFieldOptionalNestedMessage);
const upb_Message* test_message =
- upb_Message_GetMessage(msg, optional_message_field, nullptr);
+ upb_Message_GetMessage(UPB_UPCAST(msg), optional_message_field, nullptr);
EXPECT_EQ(nullptr, test_message);
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
// Get mutable using C API.
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage* nested_message =
protobuf_test_messages_proto2_TestAllTypesProto2_mutable_optional_nested_message(
msg, arena);
EXPECT_EQ(true, nested_message != nullptr);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_message_field));
+ EXPECT_EQ(true,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(
nested_message, 5);
// Read back using mini table API.
const upb_Message* sub_message =
- upb_Message_GetMessage(msg, optional_message_field, nullptr);
+ upb_Message_GetMessage(UPB_UPCAST(msg), optional_message_field, nullptr);
EXPECT_EQ(true, sub_message != nullptr);
const upb_MiniTableField* nested_message_a_field =
@@ -281,29 +308,34 @@
kFieldOptionalNestedMessageA);
EXPECT_EQ(5, upb_Message_GetInt32(sub_message, nested_message_a_field, 0));
- upb_Message_ClearField(msg, optional_message_field);
+ upb_Message_ClearField(UPB_UPCAST(msg), optional_message_field);
EXPECT_EQ(
nullptr,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_nested_message(
msg));
- EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
+ EXPECT_EQ(false,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
- upb_Message* new_nested_message =
- protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_new(arena);
+ upb_Message* new_nested_message = UPB_UPCAST(
+ protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_new(
+ arena));
upb_Message_SetInt32(new_nested_message, nested_message_a_field, 123,
nullptr);
upb_Message_SetMessage(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, new_nested_message);
upb_Message* mutable_message = upb_Message_GetOrCreateMutableMessage(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, arena);
EXPECT_EQ(
true,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_nested_message(
msg) != nullptr);
- EXPECT_EQ(true, upb_Message_HasField(msg, optional_message_field));
+ EXPECT_EQ(true,
+ upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
EXPECT_EQ(123,
upb_Message_GetInt32(mutable_message, nested_message_a_field, 0));
@@ -325,7 +357,8 @@
// Test Get/Set Array values, validate with C API.
EXPECT_EQ(0, len);
EXPECT_EQ(nullptr, arr);
- EXPECT_EQ(nullptr, upb_Message_GetArray(msg, repeated_int32_field));
+ EXPECT_EQ(nullptr,
+ upb_Message_GetArray(UPB_UPCAST(msg), repeated_int32_field));
protobuf_test_messages_proto2_TestAllTypesProto2_resize_repeated_int32(
msg, 10, arena);
int32_t* mutable_values =
@@ -333,13 +366,13 @@
msg, &len);
mutable_values[5] = 123;
const upb_Array* readonly_arr =
- upb_Message_GetArray(msg, repeated_int32_field);
+ upb_Message_GetArray(UPB_UPCAST(msg), repeated_int32_field);
EXPECT_EQ(123, upb_Array_Get(readonly_arr, 5).int32_val);
upb_MessageValue new_value;
new_value.int32_val = 567;
upb_Array* mutable_array =
- upb_Message_GetMutableArray(msg, repeated_int32_field);
+ upb_Message_GetMutableArray(UPB_UPCAST(msg), repeated_int32_field);
upb_Array_Set(mutable_array, 5, new_value);
EXPECT_EQ(new_value.int32_val,
protobuf_test_messages_proto2_TestAllTypesProto2_repeated_int32(
@@ -370,10 +403,12 @@
const upb_MiniTableField* optional_message_field =
find_proto2_field(kFieldOptionalNestedMessage);
upb_Message* msg1 = upb_Message_GetOrCreateMutableMessage(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, arena);
upb_Message* msg2 = upb_Message_GetOrCreateMutableMessage(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, arena);
// Verify that newly constructed sub message is stored in msg.
EXPECT_EQ(msg1, msg2);
@@ -394,7 +429,7 @@
upb_MiniTable* table =
upb_MiniTable_Build(e.data().data(), e.data().size(), arena, &status);
- const upb_MiniTableField* enumField = &table->fields[1];
+ const upb_MiniTableField* enumField = &table->UPB_PRIVATE(fields)[1];
EXPECT_EQ(upb_MiniTableField_Type(enumField), kUpb_FieldType_Enum);
EXPECT_FALSE(upb_MiniTableField_IsClosedEnum(enumField));
@@ -407,7 +442,7 @@
table =
upb_MiniTable_Build(e2.data().data(), e2.data().size(), arena, &status);
- const upb_MiniTableField* closedEnumField = &table->fields[1];
+ const upb_MiniTableField* closedEnumField = &table->UPB_PRIVATE(fields)[1];
EXPECT_EQ(upb_MiniTableField_Type(closedEnumField), kUpb_FieldType_Enum);
EXPECT_TRUE(upb_MiniTableField_IsClosedEnum(closedEnumField));
upb_Arena_Free(arena);
diff --git a/upb/message/array.c b/upb/message/array.c
index bf59f01..45ce299 100644
--- a/upb/message/array.c
+++ b/upb/message/array.c
@@ -1,56 +1,26 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
-#include "upb/message/internal/array.h"
+#include "upb/message/array.h"
+#include <stdint.h>
#include <string.h>
+#include "upb/base/descriptor_constants.h"
+#include "upb/mem/arena.h"
+#include "upb/message/internal/array.h"
+#include "upb/mini_table/internal/size_log2.h"
+
// Must be last.
#include "upb/port/def.inc"
-const char _upb_Array_CTypeSizeLg2Table[] = {
- [kUpb_CType_Bool] = 0,
- [kUpb_CType_Float] = 2,
- [kUpb_CType_Int32] = 2,
- [kUpb_CType_UInt32] = 2,
- [kUpb_CType_Enum] = 2,
- [kUpb_CType_Message] = UPB_SIZE(2, 3),
- [kUpb_CType_Double] = 3,
- [kUpb_CType_Int64] = 3,
- [kUpb_CType_UInt64] = 3,
- [kUpb_CType_String] = UPB_SIZE(3, 4),
- [kUpb_CType_Bytes] = UPB_SIZE(3, 4),
-};
-
upb_Array* upb_Array_New(upb_Arena* a, upb_CType type) {
- return _upb_Array_New(a, 4, _upb_Array_CTypeSizeLg2(type));
+ const int lg2 = UPB_PRIVATE(_upb_CType_SizeLg2)(type);
+ return UPB_PRIVATE(_upb_Array_New)(a, 4, lg2);
}
const void* upb_Array_DataPtr(const upb_Array* arr) {
@@ -59,36 +29,36 @@
void* upb_Array_MutableDataPtr(upb_Array* arr) { return _upb_array_ptr(arr); }
-size_t upb_Array_Size(const upb_Array* arr) { return arr->size; }
+size_t upb_Array_Size(const upb_Array* arr) { return arr->UPB_PRIVATE(size); }
upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i) {
upb_MessageValue ret;
const char* data = _upb_array_constptr(arr);
- int lg2 = arr->data & 7;
- UPB_ASSERT(i < arr->size);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ UPB_ASSERT(i < arr->UPB_PRIVATE(size));
memcpy(&ret, data + (i << lg2), 1 << lg2);
return ret;
}
void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val) {
char* data = _upb_array_ptr(arr);
- int lg2 = arr->data & 7;
- UPB_ASSERT(i < arr->size);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
+ UPB_ASSERT(i < arr->UPB_PRIVATE(size));
memcpy(data + (i << lg2), &val, 1 << lg2);
}
bool upb_Array_Append(upb_Array* arr, upb_MessageValue val, upb_Arena* arena) {
UPB_ASSERT(arena);
- if (!upb_Array_Resize(arr, arr->size + 1, arena)) {
+ if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- upb_Array_Set(arr, arr->size - 1, val);
+ upb_Array_Set(arr, arr->UPB_PRIVATE(size) - 1, val);
return true;
}
void upb_Array_Move(upb_Array* arr, size_t dst_idx, size_t src_idx,
size_t count) {
- const int lg2 = arr->data & 7;
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
char* data = _upb_array_ptr(arr);
memmove(&data[dst_idx << lg2], &data[src_idx << lg2], count << lg2);
}
@@ -96,10 +66,11 @@
bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
upb_Arena* arena) {
UPB_ASSERT(arena);
- UPB_ASSERT(i <= arr->size);
- UPB_ASSERT(count + arr->size >= count);
- const size_t oldsize = arr->size;
- if (!upb_Array_Resize(arr, arr->size + count, arena)) {
+ UPB_ASSERT(i <= arr->UPB_PRIVATE(size));
+ UPB_ASSERT(count + arr->UPB_PRIVATE(size) >= count);
+ const size_t oldsize = arr->UPB_PRIVATE(size);
+ if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + count,
+ arena)) {
return false;
}
upb_Array_Move(arr, i + count, i, oldsize - i);
@@ -113,42 +84,40 @@
void upb_Array_Delete(upb_Array* arr, size_t i, size_t count) {
const size_t end = i + count;
UPB_ASSERT(i <= end);
- UPB_ASSERT(end <= arr->size);
- upb_Array_Move(arr, i, end, arr->size - end);
- arr->size -= count;
+ UPB_ASSERT(end <= arr->UPB_PRIVATE(size));
+ upb_Array_Move(arr, i, end, arr->UPB_PRIVATE(size) - end);
+ arr->UPB_PRIVATE(size) -= count;
}
bool upb_Array_Resize(upb_Array* arr, size_t size, upb_Arena* arena) {
- const size_t oldsize = arr->size;
+ const size_t oldsize = arr->UPB_PRIVATE(size);
if (UPB_UNLIKELY(!_upb_Array_ResizeUninitialized(arr, size, arena))) {
return false;
}
- const size_t newsize = arr->size;
+ const size_t newsize = arr->UPB_PRIVATE(size);
if (newsize > oldsize) {
- const int lg2 = arr->data & 7;
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
char* data = _upb_array_ptr(arr);
memset(data + (oldsize << lg2), 0, (newsize - oldsize) << lg2);
}
return true;
}
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-
-bool _upb_array_realloc(upb_Array* arr, size_t min_capacity, upb_Arena* arena) {
- size_t new_capacity = UPB_MAX(arr->capacity, 4);
- int elem_size_lg2 = arr->data & 7;
- size_t old_bytes = arr->capacity << elem_size_lg2;
- size_t new_bytes;
- void* ptr = _upb_array_ptr(arr);
+bool UPB_PRIVATE(_upb_Array_Realloc)(upb_Array* array, size_t min_capacity,
+ upb_Arena* arena) {
+ size_t new_capacity = UPB_MAX(array->UPB_PRIVATE(capacity), 4);
+ const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array);
+ size_t old_bytes = array->UPB_PRIVATE(capacity) << lg2;
+ void* ptr = _upb_array_ptr(array);
// Log2 ceiling of size.
while (new_capacity < min_capacity) new_capacity *= 2;
- new_bytes = new_capacity << elem_size_lg2;
+ const size_t new_bytes = new_capacity << lg2;
ptr = upb_Arena_Realloc(arena, ptr, old_bytes, new_bytes);
if (!ptr) return false;
- arr->data = _upb_tag_arrptr(ptr, elem_size_lg2);
- arr->capacity = new_capacity;
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)(array, ptr, lg2);
+ array->UPB_PRIVATE(capacity) = new_capacity;
return true;
}
diff --git a/upb/message/array.h b/upb/message/array.h
index 55290c8..b217bfb 100644
--- a/upb/message/array.h
+++ b/upb/message/array.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_MESSAGE_ARRAY_H_
#define UPB_MESSAGE_ARRAY_H_
@@ -35,7 +12,7 @@
#include "upb/base/descriptor_constants.h"
#include "upb/mem/arena.h"
-#include "upb/message/value.h" // IWYU pragma: export
+#include "upb/message/value.h"
// Must be last.
#include "upb/port/def.inc"
diff --git a/upb/message/array_split64.h b/upb/message/array_split64.h
index 5d136bd..9878d0d 100644
--- a/upb/message/array_split64.h
+++ b/upb/message/array_split64.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_MESSAGE_ARRAY_SPLIT64_H_
#define UPB_MESSAGE_ARRAY_SPLIT64_H_
diff --git a/upb/message/array_test.cc b/upb/message/array_test.cc
index 11f88d6..057f3c8 100644
--- a/upb/message/array_test.cc
+++ b/upb/message/array_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/message/array.h"
diff --git a/upb/message/compare.c b/upb/message/compare.c
new file mode 100644
index 0000000..5a10164
--- /dev/null
+++ b/upb/message/compare.c
@@ -0,0 +1,43 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "upb/message/compare.h"
+
+#include <string.h>
+
+#include "upb/mem/arena.h"
+#include "upb/message/message.h"
+#include "upb/mini_table/message.h"
+#include "upb/wire/encode.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+bool upb_Message_IsExactlyEqual(const upb_Message* msg1,
+ const upb_Message* msg2,
+ const upb_MiniTable* m) {
+ if (msg1 == msg2) return true;
+
+ int opts = kUpb_EncodeOption_SkipUnknown | kUpb_EncodeOption_Deterministic;
+ upb_Arena* a = upb_Arena_New();
+
+ // Compare deterministically serialized payloads with no unknown fields.
+ size_t size1, size2;
+ char *data1, *data2;
+ upb_EncodeStatus status1 = upb_Encode(msg1, m, opts, a, &data1, &size1);
+ upb_EncodeStatus status2 = upb_Encode(msg2, m, opts, a, &data2, &size2);
+
+ if (status1 != kUpb_EncodeStatus_Ok || status2 != kUpb_EncodeStatus_Ok) {
+ // TODO: How should we fail here? (In Ruby we throw an exception.)
+ upb_Arena_Free(a);
+ return false;
+ }
+
+ const bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
+ upb_Arena_Free(a);
+ return ret;
+}
diff --git a/upb/message/compare.h b/upb/message/compare.h
new file mode 100644
index 0000000..db7e20a
--- /dev/null
+++ b/upb/message/compare.h
@@ -0,0 +1,32 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_MESSAGE_COMPARE_H_
+#define UPB_MESSAGE_COMPARE_H_
+
+#include "upb/message/message.h"
+#include "upb/mini_table/message.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Compares two messages by serializing them and calling memcmp().
+UPB_API bool upb_Message_IsExactlyEqual(const upb_Message* msg1,
+ const upb_Message* msg2,
+ const upb_MiniTable* m);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif // UPB_MESSAGE_COMPARE_H_
diff --git a/upb/message/compat.c b/upb/message/compat.c
new file mode 100644
index 0000000..55ca51e
--- /dev/null
+++ b/upb/message/compat.c
@@ -0,0 +1,39 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "upb/message/compat.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "upb/message/internal/extension.h"
+#include "upb/message/message.h"
+#include "upb/mini_table/extension.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+const upb_Extension* upb_Message_ExtensionByIndex(const upb_Message* msg,
+ size_t index) {
+ size_t count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+
+ UPB_ASSERT(index < count);
+ return &ext[index];
+}
+
+const upb_Extension* upb_Message_FindExtensionByNumber(const upb_Message* msg,
+ uint32_t field_number) {
+ size_t count;
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
+
+ while (count--) {
+ if (upb_MiniTableExtension_Number(ext->ext) == field_number) return ext;
+ ext++;
+ }
+ return NULL;
+}
diff --git a/upb/message/compat.h b/upb/message/compat.h
new file mode 100644
index 0000000..566376f
--- /dev/null
+++ b/upb/message/compat.h
@@ -0,0 +1,40 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_MESSAGE_COMPAT_H_
+#define UPB_MESSAGE_COMPAT_H_
+
+#include <stdint.h>
+
+#include "upb/message/message.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+// upb does not support mixing minitables from different sources but these
+// functions are still used by some existing users so for now we make them
+// available here. This may or may not change in the future so do not add
+// them to new code.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const upb_Extension* upb_Message_ExtensionByIndex(const upb_Message* msg,
+ size_t index);
+
+// Returns the extension with the given field number, or NULL on failure.
+const upb_Extension* upb_Message_FindExtensionByNumber(const upb_Message* msg,
+ uint32_t field_number);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif /* UPB_MESSAGE_COMPAT_H_ */
diff --git a/upb/message/copy.c b/upb/message/copy.c
index 2747a0c..9342293 100644
--- a/upb/message/copy.c
+++ b/upb/message/copy.c
@@ -14,18 +14,24 @@
#include "upb/base/string_view.h"
#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
-#include "upb/message/internal/message.h"
+#include "upb/message/array.h"
+#include "upb/message/internal/accessors.h"
+#include "upb/message/internal/array.h"
+#include "upb/message/internal/extension.h"
+#include "upb/message/internal/map.h"
+#include "upb/message/map.h"
#include "upb/message/message.h"
+#include "upb/message/tagged_ptr.h"
+#include "upb/mini_table/extension.h"
#include "upb/mini_table/field.h"
#include "upb/mini_table/internal/field.h"
+#include "upb/mini_table/internal/size_log2.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
// Must be last.
#include "upb/port/def.inc"
-static bool upb_MessageField_IsMap(const upb_MiniTableField* field) {
- return upb_FieldMode_Get(field) == kUpb_FieldMode_Map;
-}
-
static upb_StringView upb_Clone_StringView(upb_StringView str,
upb_Arena* arena) {
if (str.size == 0) {
@@ -66,12 +72,12 @@
case kUpb_CType_Message: {
const upb_TaggedMessagePtr source = *(upb_TaggedMessagePtr*)value;
bool is_empty = upb_TaggedMessagePtr_IsEmpty(source);
- if (is_empty) sub = &_kUpb_MiniTable_Empty;
+ if (is_empty) sub = UPB_PRIVATE(_upb_MiniTable_Empty)();
UPB_ASSERT(source);
upb_Message* clone = upb_Message_DeepClone(
- _upb_TaggedMessagePtr_GetMessage(source), sub, arena);
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(source), sub, arena);
*(upb_TaggedMessagePtr*)value =
- _upb_TaggedMessagePtr_Pack(clone, is_empty);
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(clone, is_empty);
return clone != NULL;
} break;
}
@@ -89,7 +95,8 @@
upb_MessageValue key, val;
size_t iter = kUpb_Map_Begin;
while (upb_Map_Next(map, &key, &val, &iter)) {
- const upb_MiniTableField* value_field = &map_entry_table->fields[1];
+ const upb_MiniTableField* value_field =
+ &map_entry_table->UPB_PRIVATE(fields)[1];
const upb_MiniTable* value_sub =
(value_field->UPB_PRIVATE(submsg_index) != kUpb_NoSub)
? upb_MiniTable_GetSubMessageTable(map_entry_table, value_field)
@@ -98,8 +105,7 @@
if (!upb_Clone_MessageValue(&val, value_field_type, value_sub, arena)) {
return NULL;
}
- if (upb_Map_Insert(cloned_map, key, val, arena) ==
- kUpb_MapInsertStatus_OutOfMemory) {
+ if (!upb_Map_Set(cloned_map, key, val, arena)) {
return NULL;
}
}
@@ -108,15 +114,18 @@
static upb_Map* upb_Message_Map_DeepClone(const upb_Map* map,
const upb_MiniTable* mini_table,
- const upb_MiniTableField* field,
+ const upb_MiniTableField* f,
upb_Message* clone,
upb_Arena* arena) {
- const upb_MiniTable* map_entry_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
UPB_ASSERT(map_entry_table);
- const upb_MiniTableField* key_field = &map_entry_table->fields[0];
- const upb_MiniTableField* value_field = &map_entry_table->fields[1];
+ const upb_MiniTableField* key_field =
+ &map_entry_table->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* value_field =
+ &map_entry_table->UPB_PRIVATE(fields)[1];
upb_Map* cloned_map = upb_Map_DeepClone(
map, upb_MiniTableField_CType(key_field),
@@ -124,15 +133,15 @@
if (!cloned_map) {
return NULL;
}
- _upb_Message_SetNonExtensionField(clone, field, &cloned_map);
+ _upb_Message_SetNonExtensionField(clone, f, &cloned_map);
return cloned_map;
}
upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
const upb_MiniTable* sub, upb_Arena* arena) {
- size_t size = array->size;
- upb_Array* cloned_array =
- _upb_Array_New(arena, size, _upb_Array_CTypeSizeLg2(value_type));
+ const size_t size = array->UPB_PRIVATE(size);
+ const int lg2 = UPB_PRIVATE(_upb_CType_SizeLg2)(value_type);
+ upb_Array* cloned_array = UPB_PRIVATE(_upb_Array_New)(arena, size, lg2);
if (!cloned_array) {
return NULL;
}
@@ -153,7 +162,7 @@
const upb_MiniTable* mini_table,
const upb_MiniTableField* field,
upb_Message* clone, upb_Arena* arena) {
- _upb_MiniTableField_CheckIsArray(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
upb_Array* cloned_array = upb_Array_DeepClone(
array, upb_MiniTableField_CType(field),
upb_MiniTableField_CType(field) == kUpb_CType_Message &&
@@ -168,13 +177,13 @@
}
static bool upb_Clone_ExtensionValue(
- const upb_MiniTableExtension* mini_table_ext,
- const upb_Message_Extension* source, upb_Message_Extension* dest,
- upb_Arena* arena) {
+ const upb_MiniTableExtension* mini_table_ext, const upb_Extension* source,
+ upb_Extension* dest, upb_Arena* arena) {
dest->data = source->data;
return upb_Clone_MessageValue(
- &dest->data, upb_MiniTableField_CType(&mini_table_ext->field),
- mini_table_ext->sub.submsg, arena);
+ &dest->data,
+ upb_MiniTableField_CType(&mini_table_ext->UPB_PRIVATE(field)),
+ upb_MiniTableExtension_GetSubMessage(mini_table_ext), arena);
}
upb_Message* _upb_Message_Copy(upb_Message* dst, const upb_Message* src,
@@ -182,23 +191,23 @@
upb_Arena* arena) {
upb_StringView empty_string = upb_StringView_FromDataAndSize(NULL, 0);
// Only copy message area skipping upb_Message_Internal.
- memcpy(dst, src, mini_table->size);
- for (size_t i = 0; i < mini_table->field_count; ++i) {
- const upb_MiniTableField* field = &mini_table->fields[i];
- if (!upb_IsRepeatedOrMap(field)) {
+ memcpy(dst, src, mini_table->UPB_PRIVATE(size));
+ for (size_t i = 0; i < mini_table->UPB_PRIVATE(field_count); ++i) {
+ const upb_MiniTableField* field = &mini_table->UPB_PRIVATE(fields)[i];
+ if (upb_MiniTableField_IsScalar(field)) {
switch (upb_MiniTableField_CType(field)) {
case kUpb_CType_Message: {
upb_TaggedMessagePtr tagged =
upb_Message_GetTaggedMessagePtr(src, field, NULL);
const upb_Message* sub_message =
- _upb_TaggedMessagePtr_GetMessage(tagged);
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
if (sub_message != NULL) {
// If the message is currently in an unlinked, "empty" state we keep
// it that way, because we don't want to deal with decode options,
// decode status, or possible parse failure here.
bool is_empty = upb_TaggedMessagePtr_IsEmpty(tagged);
const upb_MiniTable* sub_message_table =
- is_empty ? &_kUpb_MiniTable_Empty
+ is_empty ? UPB_PRIVATE(_upb_MiniTable_Empty)()
: upb_MiniTable_GetSubMessageTable(mini_table, field);
upb_Message* dst_sub_message =
upb_Message_DeepClone(sub_message, sub_message_table, arena);
@@ -207,7 +216,8 @@
}
_upb_Message_SetTaggedMessagePtr(
dst, mini_table, field,
- _upb_TaggedMessagePtr_Pack(dst_sub_message, is_empty));
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(dst_sub_message,
+ is_empty));
}
} break;
case kUpb_CType_String:
@@ -225,7 +235,7 @@
break;
}
} else {
- if (upb_MessageField_IsMap(field)) {
+ if (upb_MiniTableField_IsMap(field)) {
const upb_Map* map = upb_Message_GetMap(src, field);
if (map != NULL) {
if (!upb_Message_Map_DeepClone(map, mini_table, field, dst, arena)) {
@@ -245,23 +255,23 @@
}
// Clone extensions.
size_t ext_count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(src, &ext_count);
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(src, &ext_count);
for (size_t i = 0; i < ext_count; ++i) {
- const upb_Message_Extension* msg_ext = &ext[i];
- const upb_MiniTableField* field = &msg_ext->ext->field;
- upb_Message_Extension* dst_ext =
+ const upb_Extension* msg_ext = &ext[i];
+ const upb_MiniTableField* field = &msg_ext->ext->UPB_PRIVATE(field);
+ upb_Extension* dst_ext =
_upb_Message_GetOrCreateExtension(dst, msg_ext->ext, arena);
if (!dst_ext) return NULL;
- if (!upb_IsRepeatedOrMap(field)) {
+ if (upb_MiniTableField_IsScalar(field)) {
if (!upb_Clone_ExtensionValue(msg_ext->ext, msg_ext, dst_ext, arena)) {
return NULL;
}
} else {
upb_Array* msg_array = (upb_Array*)msg_ext->data.ptr;
UPB_ASSERT(msg_array);
- upb_Array* cloned_array =
- upb_Array_DeepClone(msg_array, upb_MiniTableField_CType(field),
- msg_ext->ext->sub.submsg, arena);
+ upb_Array* cloned_array = upb_Array_DeepClone(
+ msg_array, upb_MiniTableField_CType(field),
+ upb_MiniTableExtension_GetSubMessage(msg_ext->ext), arena);
if (!cloned_array) {
return NULL;
}
@@ -275,7 +285,7 @@
if (unknown_size != 0) {
UPB_ASSERT(ptr);
// Make a copy into destination arena.
- if (!_upb_Message_AddUnknown(dst, ptr, unknown_size, arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(dst, ptr, unknown_size, arena)) {
return NULL;
}
}
@@ -291,9 +301,23 @@
// Deep clones a message using the provided target arena.
//
// Returns NULL on failure.
-upb_Message* upb_Message_DeepClone(const upb_Message* message,
- const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- upb_Message* clone = upb_Message_New(mini_table, arena);
- return _upb_Message_Copy(clone, message, mini_table, arena);
+upb_Message* upb_Message_DeepClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena) {
+ upb_Message* clone = upb_Message_New(m, arena);
+ return _upb_Message_Copy(clone, msg, m, arena);
+}
+
+// Performs a shallow copy. TODO: Extend to handle unknown fields.
+void upb_Message_ShallowCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m) {
+ memcpy(dst, src, m->UPB_PRIVATE(size));
+}
+
+// Performs a shallow clone. Ignores unknown fields.
+upb_Message* upb_Message_ShallowClone(const upb_Message* msg,
+ const upb_MiniTable* m,
+ upb_Arena* arena) {
+ upb_Message* clone = upb_Message_New(m, arena);
+ upb_Message_ShallowCopy(clone, msg, m);
+ return clone;
}
diff --git a/upb/message/copy.h b/upb/message/copy.h
index ce682ef..33fe537 100644
--- a/upb/message/copy.h
+++ b/upb/message/copy.h
@@ -11,6 +11,7 @@
#include "upb/mem/arena.h"
#include "upb/message/array.h"
#include "upb/message/map.h"
+#include "upb/message/message.h"
#include "upb/mini_table/message.h"
// Must be last.
@@ -21,9 +22,12 @@
#endif
// Deep clones a message using the provided target arena.
-upb_Message* upb_Message_DeepClone(const upb_Message* message,
- const upb_MiniTable* mini_table,
- upb_Arena* arena);
+upb_Message* upb_Message_DeepClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Shallow clones a message using the provided target arena.
+upb_Message* upb_Message_ShallowClone(const upb_Message* msg,
+ const upb_MiniTable* m, upb_Arena* arena);
// Deep clones array contents.
upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
@@ -37,7 +41,11 @@
// Deep copies the message from src to dst.
bool upb_Message_DeepCopy(upb_Message* dst, const upb_Message* src,
- const upb_MiniTable* mini_table, upb_Arena* arena);
+ const upb_MiniTable* m, upb_Arena* arena);
+
+// Shallow copies the message from src to dst.
+void upb_Message_ShallowCopy(upb_Message* dst, const upb_Message* src,
+ const upb_MiniTable* m);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/upb/message/copy_test.cc b/upb/message/copy_test.cc
index ad50f66..727b352 100644
--- a/upb/message/copy_test.cc
+++ b/upb/message/copy_test.cc
@@ -23,6 +23,7 @@
#include "google/protobuf/test_messages_proto2.upb.h"
#include "google/protobuf/test_messages_proto2.upb_minitable.h"
#include "upb/base/string_view.h"
+#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
#include "upb/message/internal/message.h"
@@ -32,6 +33,9 @@
#include "upb/mini_table/message.h"
#include "upb/wire/encode.h"
+// Must be last.
+#include "upb/port/def.inc"
+
namespace {
// Proto2 test messages field numbers used for reflective access.
@@ -58,31 +62,34 @@
find_proto2_field(kFieldOptionalInt32);
const upb_MiniTableField* optional_string_field =
find_proto2_field(kFieldOptionalString);
- upb_Message_SetInt32(msg, optional_int32_field, kTestInt32, nullptr);
+ upb_Message_SetInt32(UPB_UPCAST(msg), optional_int32_field, kTestInt32,
+ nullptr);
char* string_in_arena =
(char*)upb_Arena_Malloc(source_arena, sizeof(kTestStr1));
memcpy(string_in_arena, kTestStr1, sizeof(kTestStr1));
upb_Message_SetString(
- msg, optional_string_field,
+ UPB_UPCAST(msg), optional_string_field,
upb_StringView_FromDataAndSize(string_in_arena, sizeof(kTestStr1) - 1),
source_arena);
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
// After cloning overwrite values and destroy source arena for MSAN.
memset(string_in_arena, 0, sizeof(kTestStr1));
upb_Arena_Free(source_arena);
- EXPECT_TRUE(upb_Message_HasField(clone, optional_int32_field));
- EXPECT_EQ(upb_Message_GetInt32(clone, optional_int32_field, 0), kTestInt32);
- EXPECT_TRUE(upb_Message_HasField(clone, optional_string_field));
- EXPECT_EQ(upb_Message_GetString(clone, optional_string_field,
+ EXPECT_TRUE(upb_Message_HasField(UPB_UPCAST(clone), optional_int32_field));
+ EXPECT_EQ(upb_Message_GetInt32(UPB_UPCAST(clone), optional_int32_field, 0),
+ kTestInt32);
+ EXPECT_TRUE(upb_Message_HasField(UPB_UPCAST(clone), optional_string_field));
+ EXPECT_EQ(upb_Message_GetString(UPB_UPCAST(clone), optional_string_field,
upb_StringView_FromDataAndSize(nullptr, 0))
.size,
sizeof(kTestStr1) - 1);
EXPECT_TRUE(upb_StringView_IsEqual(
- upb_Message_GetString(clone, optional_string_field,
+ upb_Message_GetString(UPB_UPCAST(clone), optional_string_field,
upb_StringView_FromDataAndSize(nullptr, 0)),
upb_StringView_FromString(kTestStr1)));
upb_Arena_Free(arena);
@@ -100,22 +107,25 @@
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(
nested, kTestNestedInt32);
upb_Message_SetMessage(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
- nested_message_field, nested);
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ nested_message_field, UPB_UPCAST(nested));
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
// After cloning overwrite values and destroy source arena for MSAN.
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(nested,
0);
upb_Arena_Free(source_arena);
- EXPECT_TRUE(upb_Message_HasField(clone, nested_message_field));
+ EXPECT_TRUE(upb_Message_HasField(UPB_UPCAST(clone), nested_message_field));
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage*
cloned_nested =
(protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage*)
- upb_Message_GetMessage(clone, nested_message_field, nullptr);
+ upb_Message_GetMessage(UPB_UPCAST(clone), nested_message_field,
+ nullptr);
EXPECT_EQ(protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_a(
cloned_nested),
kTestNestedInt32);
@@ -135,7 +145,8 @@
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
protobuf_test_messages_proto2_TestAllTypesProto2_clear_repeated_sint32(msg);
upb_Arena_Free(source_arena);
@@ -174,7 +185,8 @@
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(nested,
0);
@@ -250,7 +262,7 @@
protobuf_test_messages_proto2_TestAllTypesProto2_MessageSetCorrect* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2_MessageSetCorrect*)
upb_Message_DeepClone(
- msg,
+ UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2__MessageSetCorrect_msg_init,
arena);
@@ -295,18 +307,20 @@
char* data;
upb_Arena* encode_arena = upb_Arena_New();
upb_EncodeStatus status = upb_Encode(
- unknown_source,
+ UPB_UPCAST(unknown_source),
&protobuf_0test_0messages__proto2__UnknownToTestAllTypes_msg_init,
kUpb_EncodeOption_CheckRequired, encode_arena, &data, &len);
ASSERT_EQ(status, kUpb_EncodeStatus_Ok);
std::string unknown_data(data, len);
// Add unknown data.
- _upb_Message_AddUnknown(msg, data, len, source_arena);
+ UPB_PRIVATE(_upb_Message_AddUnknown)
+ (UPB_UPCAST(msg), data, len, source_arena);
// Create clone.
upb_Arena* clone_arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
- msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
+ UPB_UPCAST(msg),
+ &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
clone_arena);
upb_Arena_Free(source_arena);
upb_Arena_Free(unknown_arena);
@@ -314,7 +328,7 @@
// Read unknown data from clone and verify.
size_t cloned_length;
const char* cloned_unknown_data =
- upb_Message_GetUnknown(clone, &cloned_length);
+ upb_Message_GetUnknown(UPB_UPCAST(clone), &cloned_length);
EXPECT_EQ(cloned_length, len);
EXPECT_EQ(memcmp(cloned_unknown_data, unknown_data.c_str(), cloned_length),
0);
diff --git a/upb/message/internal/accessors.h b/upb/message/internal/accessors.h
index 2ec295a..94f2c84 100644
--- a/upb/message/internal/accessors.h
+++ b/upb/message/internal/accessors.h
@@ -8,9 +8,18 @@
#ifndef UPB_MESSAGE_INTERNAL_ACCESSORS_H_
#define UPB_MESSAGE_INTERNAL_ACCESSORS_H_
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "upb/base/string_view.h"
+#include "upb/mem/arena.h"
#include "upb/message/internal/extension.h"
#include "upb/message/internal/map.h"
#include "upb/message/internal/message.h"
+#include "upb/message/internal/tagged_ptr.h"
+#include "upb/mini_table/extension.h"
+#include "upb/mini_table/field.h"
#include "upb/mini_table/internal/field.h"
// Must be last.
@@ -42,101 +51,88 @@
// Hasbit access ///////////////////////////////////////////////////////////////
-UPB_INLINE size_t _upb_hasbit_ofs(size_t idx) { return idx / 8; }
+UPB_INLINE bool UPB_PRIVATE(_upb_Message_GetHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
-UPB_INLINE char _upb_hasbit_mask(size_t idx) { return 1 << (idx % 8); }
-
-UPB_INLINE bool _upb_hasbit(const upb_Message* msg, size_t idx) {
- return (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), const char) &
- _upb_hasbit_mask(idx)) != 0;
+ return (*UPB_PTR_AT(msg, offset, const char) & mask) != 0;
}
-UPB_INLINE void _upb_sethas(const upb_Message* msg, size_t idx) {
- (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), char)) |= _upb_hasbit_mask(idx);
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
+
+ (*UPB_PTR_AT(msg, offset, char)) |= mask;
}
-UPB_INLINE void _upb_clearhas(const upb_Message* msg, size_t idx) {
- (*UPB_PTR_AT(msg, _upb_hasbit_ofs(idx), char)) &= ~_upb_hasbit_mask(idx);
-}
+UPB_INLINE void UPB_PRIVATE(_upb_Message_ClearHasbit)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const size_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
+ const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
-UPB_INLINE size_t _upb_Message_Hasidx(const upb_MiniTableField* f) {
- UPB_ASSERT(f->presence > 0);
- return f->presence;
-}
-
-UPB_INLINE bool _upb_hasbit_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- return _upb_hasbit(msg, _upb_Message_Hasidx(f));
-}
-
-UPB_INLINE void _upb_sethas_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- _upb_sethas(msg, _upb_Message_Hasidx(f));
+ (*UPB_PTR_AT(msg, offset, char)) &= ~mask;
}
// Oneof case access ///////////////////////////////////////////////////////////
-UPB_INLINE size_t _upb_oneofcase_ofs(const upb_MiniTableField* f) {
- UPB_ASSERT(f->presence < 0);
- return ~(ptrdiff_t)f->presence;
+UPB_INLINE uint32_t* UPB_PRIVATE(_upb_Message_OneofCasePtr)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ return UPB_PTR_AT(msg, UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(f),
+ uint32_t);
}
-UPB_INLINE uint32_t* _upb_oneofcase_field(upb_Message* msg,
- const upb_MiniTableField* f) {
- return UPB_PTR_AT(msg, _upb_oneofcase_ofs(f), uint32_t);
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_Message_GetOneofCase)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ const uint32_t* ptr =
+ UPB_PRIVATE(_upb_Message_OneofCasePtr)((struct upb_Message*)msg, f);
+
+ return *ptr;
}
-UPB_INLINE uint32_t _upb_getoneofcase_field(const upb_Message* msg,
- const upb_MiniTableField* f) {
- return *_upb_oneofcase_field((upb_Message*)msg, f);
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetOneofCase)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
+
+ *ptr = upb_MiniTableField_Number(f);
+}
+
+// Returns true if the given field is the current oneof case.
+// Does nothing if it is not the current oneof case.
+UPB_INLINE bool UPB_PRIVATE(_upb_Message_ClearOneofCase)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
+
+ if (*ptr != upb_MiniTableField_Number(f)) return false;
+ *ptr = 0;
+ return true;
}
// LINT.ThenChange(GoogleInternalName2)
-UPB_INLINE bool _upb_MiniTableField_InOneOf(const upb_MiniTableField* field) {
- return field->presence < 0;
+UPB_INLINE void* UPB_PRIVATE(_upb_Message_DataPtr)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ return (char*)msg + f->UPB_ONLYBITS(offset);
}
-UPB_INLINE void* _upb_MiniTableField_GetPtr(upb_Message* msg,
- const upb_MiniTableField* field) {
- return (char*)msg + field->offset;
+UPB_INLINE const void* UPB_PRIVATE(_upb_Message_ConstDataPtr)(
+ const struct upb_Message* msg, const upb_MiniTableField* f) {
+ return (const char*)msg + f->UPB_ONLYBITS(offset);
}
-UPB_INLINE const void* _upb_MiniTableField_GetConstPtr(
- const upb_Message* msg, const upb_MiniTableField* field) {
- return (char*)msg + field->offset;
-}
-
-UPB_INLINE void _upb_Message_SetPresence(upb_Message* msg,
- const upb_MiniTableField* field) {
- if (field->presence > 0) {
- _upb_sethas_field(msg, field);
- } else if (_upb_MiniTableField_InOneOf(field)) {
- *_upb_oneofcase_field(msg, field) = field->number;
+UPB_INLINE void UPB_PRIVATE(_upb_Message_SetPresence)(
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ UPB_PRIVATE(_upb_Message_SetHasbit)(msg, f);
+ } else if (upb_MiniTableField_IsInOneof(f)) {
+ UPB_PRIVATE(_upb_Message_SetOneofCase)(msg, f);
}
}
-UPB_INLINE bool _upb_MiniTable_ValueIsNonZero(const void* default_val,
- const upb_MiniTableField* field) {
- char zero[16] = {0};
- switch (_upb_MiniTableField_GetRep(field)) {
- case kUpb_FieldRep_1Byte:
- return memcmp(&zero, default_val, 1) != 0;
- case kUpb_FieldRep_4Byte:
- return memcmp(&zero, default_val, 4) != 0;
- case kUpb_FieldRep_8Byte:
- return memcmp(&zero, default_val, 8) != 0;
- case kUpb_FieldRep_StringView: {
- const upb_StringView* sv = (const upb_StringView*)default_val;
- return sv->size != 0;
- }
- }
- UPB_UNREACHABLE();
-}
-
-UPB_INLINE void _upb_MiniTable_CopyFieldData(void* to, const void* from,
- const upb_MiniTableField* field) {
- switch (_upb_MiniTableField_GetRep(field)) {
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_DataCopy)(
+ const upb_MiniTableField* f, void* to, const void* from) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
case kUpb_FieldRep_1Byte:
memcpy(to, from, 1);
return;
@@ -154,30 +150,34 @@
UPB_UNREACHABLE();
}
-UPB_INLINE size_t
-_upb_MiniTable_ElementSizeLg2(const upb_MiniTableField* field) {
- const unsigned char table[] = {
- 0,
- 3, // kUpb_FieldType_Double = 1,
- 2, // kUpb_FieldType_Float = 2,
- 3, // kUpb_FieldType_Int64 = 3,
- 3, // kUpb_FieldType_UInt64 = 4,
- 2, // kUpb_FieldType_Int32 = 5,
- 3, // kUpb_FieldType_Fixed64 = 6,
- 2, // kUpb_FieldType_Fixed32 = 7,
- 0, // kUpb_FieldType_Bool = 8,
- UPB_SIZE(3, 4), // kUpb_FieldType_String = 9,
- UPB_SIZE(2, 3), // kUpb_FieldType_Group = 10,
- UPB_SIZE(2, 3), // kUpb_FieldType_Message = 11,
- UPB_SIZE(3, 4), // kUpb_FieldType_Bytes = 12,
- 2, // kUpb_FieldType_UInt32 = 13,
- 2, // kUpb_FieldType_Enum = 14,
- 2, // kUpb_FieldType_SFixed32 = 15,
- 3, // kUpb_FieldType_SFixed64 = 16,
- 2, // kUpb_FieldType_SInt32 = 17,
- 3, // kUpb_FieldType_SInt64 = 18,
- };
- return table[field->UPB_PRIVATE(descriptortype)];
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_DataEquals)(
+ const upb_MiniTableField* f, const void* a, const void* b) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
+ case kUpb_FieldRep_1Byte:
+ return memcmp(a, b, 1) == 0;
+ case kUpb_FieldRep_4Byte:
+ return memcmp(a, b, 4) == 0;
+ case kUpb_FieldRep_8Byte:
+ return memcmp(a, b, 8) == 0;
+ case kUpb_FieldRep_StringView: {
+ const upb_StringView sa = *(const upb_StringView*)a;
+ const upb_StringView sb = *(const upb_StringView*)b;
+ return upb_StringView_IsEqual(sa, sb);
+ }
+ }
+ UPB_UNREACHABLE();
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_DataClear)(
+ const upb_MiniTableField* f, void* val) {
+ const char zero[16] = {0};
+ return UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, zero);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(
+ const upb_MiniTableField* f, const void* val) {
+ const char zero[16] = {0};
+ return UPB_PRIVATE(_upb_MiniTableField_DataEquals)(f, val, zero);
}
// Here we define universal getter/setter functions for message fields.
@@ -198,9 +198,10 @@
// const upb_MiniTableField* field,
// bool value, upb_Arena* a) {
// UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bool);
-// UPB_ASSUME(!upb_IsRepeatedOrMap(field));
-// UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_1Byte);
-// _upb_Message_SetField(msg, field, &value, a);
+// UPB_ASSUME(upb_MiniTableField_IsScalar(field));
+// UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
+// kUpb_FieldRep_1Byte);
+// upb_Message_SetField(msg, field, &value, a);
// }
//
// As a result, we can use these universal getters/setters for *all* message
@@ -213,142 +214,119 @@
// returned bool value may be ignored since it will always succeed.
UPB_INLINE bool _upb_Message_HasExtensionField(
- const upb_Message* msg, const upb_MiniTableExtension* ext) {
- UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->field));
+ const struct upb_Message* msg, const upb_MiniTableExtension* ext) {
+ UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->UPB_PRIVATE(field)));
return _upb_Message_Getext(msg, ext) != NULL;
}
UPB_INLINE bool _upb_Message_HasNonExtensionField(
- const upb_Message* msg, const upb_MiniTableField* field) {
+ const struct upb_Message* msg, const upb_MiniTableField* field) {
UPB_ASSERT(upb_MiniTableField_HasPresence(field));
UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- if (_upb_MiniTableField_InOneOf(field)) {
- return _upb_getoneofcase_field(msg, field) == field->number;
+ if (upb_MiniTableField_IsInOneof(field)) {
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, field) ==
+ upb_MiniTableField_Number(field);
} else {
- return _upb_hasbit_field(msg, field);
+ return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, field);
}
}
static UPB_FORCEINLINE void _upb_Message_GetNonExtensionField(
- const upb_Message* msg, const upb_MiniTableField* field,
+ const struct upb_Message* msg, const upb_MiniTableField* field,
const void* default_val, void* val) {
UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- if ((_upb_MiniTableField_InOneOf(field) ||
- _upb_MiniTable_ValueIsNonZero(default_val, field)) &&
+ if ((upb_MiniTableField_IsInOneof(field) ||
+ !UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, default_val)) &&
!_upb_Message_HasNonExtensionField(msg, field)) {
- _upb_MiniTable_CopyFieldData(val, default_val, field);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(field, val, default_val);
return;
}
- _upb_MiniTable_CopyFieldData(val, _upb_MiniTableField_GetConstPtr(msg, field),
- field);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (field, val, UPB_PRIVATE(_upb_Message_ConstDataPtr)(msg, field));
}
UPB_INLINE void _upb_Message_GetExtensionField(
- const upb_Message* msg, const upb_MiniTableExtension* mt_ext,
+ const struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
const void* default_val, void* val) {
- UPB_ASSUME(upb_MiniTableField_IsExtension(&mt_ext->field));
- const upb_Message_Extension* ext = _upb_Message_Getext(msg, mt_ext);
- if (ext) {
- _upb_MiniTable_CopyFieldData(val, &ext->data, &mt_ext->field);
- } else {
- _upb_MiniTable_CopyFieldData(val, default_val, &mt_ext->field);
- }
-}
+ const struct upb_Extension* ext = _upb_Message_Getext(msg, mt_ext);
+ const upb_MiniTableField* f = &mt_ext->UPB_PRIVATE(field);
+ UPB_ASSUME(upb_MiniTableField_IsExtension(f));
-UPB_INLINE void _upb_Message_GetField(const upb_Message* msg,
- const upb_MiniTableField* field,
- const void* default_val, void* val) {
- if (upb_MiniTableField_IsExtension(field)) {
- _upb_Message_GetExtensionField(msg, (upb_MiniTableExtension*)field,
- default_val, val);
+ if (ext) {
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, &ext->data);
} else {
- _upb_Message_GetNonExtensionField(msg, field, default_val, val);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, default_val);
}
}
UPB_INLINE void _upb_Message_SetNonExtensionField(
- upb_Message* msg, const upb_MiniTableField* field, const void* val) {
+ struct upb_Message* msg, const upb_MiniTableField* field, const void* val) {
UPB_ASSUME(!upb_MiniTableField_IsExtension(field));
- _upb_Message_SetPresence(msg, field);
- _upb_MiniTable_CopyFieldData(_upb_MiniTableField_GetPtr(msg, field), val,
- field);
+ UPB_PRIVATE(_upb_Message_SetPresence)(msg, field);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (field, UPB_PRIVATE(_upb_Message_DataPtr)(msg, field), val);
}
UPB_INLINE bool _upb_Message_SetExtensionField(
- upb_Message* msg, const upb_MiniTableExtension* mt_ext, const void* val,
- upb_Arena* a) {
+ struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
+ const void* val, upb_Arena* a) {
UPB_ASSERT(a);
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
+ struct upb_Extension* ext = _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
if (!ext) return false;
- _upb_MiniTable_CopyFieldData(&ext->data, val, &mt_ext->field);
+ UPB_PRIVATE(_upb_MiniTableField_DataCopy)
+ (&mt_ext->UPB_PRIVATE(field), &ext->data, val);
return true;
}
-UPB_INLINE bool _upb_Message_SetField(upb_Message* msg,
- const upb_MiniTableField* field,
- const void* val, upb_Arena* a) {
- if (upb_MiniTableField_IsExtension(field)) {
- const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)field;
- return _upb_Message_SetExtensionField(msg, ext, val, a);
- } else {
- _upb_Message_SetNonExtensionField(msg, field, val);
- return true;
- }
-}
-
UPB_INLINE void _upb_Message_ClearExtensionField(
- upb_Message* msg, const upb_MiniTableExtension* ext_l) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (!in->internal) return;
- const upb_Message_Extension* base =
- UPB_PTR_AT(in->internal, in->internal->ext_begin, upb_Message_Extension);
- upb_Message_Extension* ext =
- (upb_Message_Extension*)_upb_Message_Getext(msg, ext_l);
+ struct upb_Message* msg, const upb_MiniTableExtension* ext_l) {
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ if (!in) return;
+ const struct upb_Extension* base =
+ UPB_PTR_AT(in, in->ext_begin, struct upb_Extension);
+ struct upb_Extension* ext =
+ (struct upb_Extension*)_upb_Message_Getext(msg, ext_l);
if (ext) {
*ext = *base;
- in->internal->ext_begin += sizeof(upb_Message_Extension);
+ in->ext_begin += sizeof(struct upb_Extension);
}
}
UPB_INLINE void _upb_Message_ClearNonExtensionField(
- upb_Message* msg, const upb_MiniTableField* field) {
- if (field->presence > 0) {
- _upb_clearhas(msg, _upb_Message_Hasidx(field));
- } else if (_upb_MiniTableField_InOneOf(field)) {
- uint32_t* oneof_case = _upb_oneofcase_field(msg, field);
- if (*oneof_case != field->number) return;
- *oneof_case = 0;
+ struct upb_Message* msg, const upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ UPB_PRIVATE(_upb_Message_ClearHasbit)(msg, f);
+ } else if (upb_MiniTableField_IsInOneof(f)) {
+ if (!UPB_PRIVATE(_upb_Message_ClearOneofCase)(msg, f)) return;
}
- const char zeros[16] = {0};
- _upb_MiniTable_CopyFieldData(_upb_MiniTableField_GetPtr(msg, field), zeros,
- field);
+ void* data = UPB_PRIVATE(_upb_Message_DataPtr)(msg, f);
+ UPB_PRIVATE(_upb_MiniTableField_DataClear)(f, data);
}
UPB_INLINE void _upb_Message_AssertMapIsUntagged(
- const upb_Message* msg, const upb_MiniTableField* field) {
+ const struct upb_Message* msg, const upb_MiniTableField* field) {
UPB_UNUSED(msg);
- _upb_MiniTableField_CheckIsMap(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
#ifndef NDEBUG
upb_TaggedMessagePtr default_val = 0;
upb_TaggedMessagePtr tagged;
_upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
- UPB_ASSERT(!upb_TaggedMessagePtr_IsEmpty(tagged));
+ UPB_ASSERT(!UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(tagged));
#endif
}
-UPB_INLINE upb_Map* _upb_Message_GetOrCreateMutableMap(
- upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
+UPB_INLINE struct upb_Map* _upb_Message_GetOrCreateMutableMap(
+ struct upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
size_t val_size, upb_Arena* arena) {
- _upb_MiniTableField_CheckIsMap(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
_upb_Message_AssertMapIsUntagged(msg, field);
- upb_Map* map = NULL;
- upb_Map* default_map_value = NULL;
+ struct upb_Map* map = NULL;
+ struct upb_Map* default_map_value = NULL;
_upb_Message_GetNonExtensionField(msg, field, &default_map_value, &map);
if (!map) {
map = _upb_Map_New(arena, key_size, val_size);
// Check again due to: https://godbolt.org/z/7WfaoKG1r
- _upb_MiniTableField_CheckIsMap(field);
+ UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(field);
_upb_Message_SetNonExtensionField(msg, field, &map);
}
return map;
diff --git a/upb/message/internal/array.h b/upb/message/internal/array.h
index e8e8429..96152f0 100644
--- a/upb/message/internal/array.h
+++ b/upb/message/internal/array.h
@@ -1,43 +1,24 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_MESSAGE_INTERNAL_ARRAY_H_
#define UPB_MESSAGE_INTERNAL_ARRAY_H_
#include <string.h>
-#include "upb/message/array.h"
+#include "upb/mem/arena.h"
// Must be last.
#include "upb/port/def.inc"
+#define _UPB_ARRAY_MASK_IMM 0x4 // Frozen/immutable bit.
+#define _UPB_ARRAY_MASK_LG2 0x3 // Encoded elem size.
+#define _UPB_ARRAY_MASK_ALL (_UPB_ARRAY_MASK_IMM | _UPB_ARRAY_MASK_LG2)
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -45,94 +26,105 @@
// LINT.IfChange(struct_definition)
// Our internal representation for repeated fields.
struct upb_Array {
- uintptr_t data; /* Tagged ptr: low 3 bits of ptr are lg2(elem size). */
- size_t size; /* The number of elements in the array. */
- size_t capacity; /* Allocated storage. Measured in elements. */
+ // This is a tagged pointer. Bits #0 and #1 encode the elem size as follows:
+ // 0 maps to elem size 1
+ // 1 maps to elem size 4
+ // 2 maps to elem size 8
+ // 3 maps to elem size 16
+ //
+ // Bit #2 contains the frozen/immutable flag (currently unimplemented).
+ uintptr_t data;
+
+ size_t UPB_ONLYBITS(size); // The number of elements in the array.
+ size_t UPB_PRIVATE(capacity); // Allocated storage. Measured in elements.
};
-// LINT.ThenChange(GoogleInternalName1)
-UPB_INLINE size_t _upb_Array_ElementSizeLg2(const upb_Array* arr) {
- size_t ret = arr->data & 7;
- UPB_ASSERT(ret <= 4);
- return ret;
+UPB_INLINE void UPB_PRIVATE(_upb_Array_SetTaggedPtr)(struct upb_Array* array,
+ void* data, size_t lg2) {
+ UPB_ASSERT(lg2 != 1);
+ UPB_ASSERT(lg2 <= 4);
+ const size_t bits = lg2 - (lg2 != 0);
+ array->data = (uintptr_t)data | bits;
}
-UPB_INLINE const void* _upb_array_constptr(const upb_Array* arr) {
- _upb_Array_ElementSizeLg2(arr); // Check assertion.
- return (void*)(arr->data & ~(uintptr_t)7);
+UPB_INLINE size_t
+UPB_PRIVATE(_upb_Array_ElemSizeLg2)(const struct upb_Array* array) {
+ const size_t bits = array->data & _UPB_ARRAY_MASK_LG2;
+ const size_t lg2 = bits + (bits != 0);
+ return lg2;
}
-UPB_INLINE uintptr_t _upb_array_tagptr(void* ptr, int elem_size_lg2) {
+UPB_INLINE const void* _upb_array_constptr(const struct upb_Array* array) {
+ UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array); // Check assertions.
+ return (void*)(array->data & ~(uintptr_t)_UPB_ARRAY_MASK_ALL);
+}
+
+UPB_INLINE void* _upb_array_ptr(struct upb_Array* array) {
+ return (void*)_upb_array_constptr(array);
+}
+
+UPB_INLINE struct upb_Array* UPB_PRIVATE(_upb_Array_New)(upb_Arena* arena,
+ size_t init_capacity,
+ int elem_size_lg2) {
+ UPB_ASSERT(elem_size_lg2 != 1);
UPB_ASSERT(elem_size_lg2 <= 4);
- return (uintptr_t)ptr | elem_size_lg2;
-}
-
-UPB_INLINE void* _upb_array_ptr(upb_Array* arr) {
- return (void*)_upb_array_constptr(arr);
-}
-
-UPB_INLINE uintptr_t _upb_tag_arrptr(void* ptr, int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- UPB_ASSERT(((uintptr_t)ptr & 7) == 0);
- return (uintptr_t)ptr | (unsigned)elem_size_lg2;
-}
-
-extern const char _upb_Array_CTypeSizeLg2Table[];
-
-UPB_INLINE size_t _upb_Array_CTypeSizeLg2(upb_CType ctype) {
- return _upb_Array_CTypeSizeLg2Table[ctype];
-}
-
-UPB_INLINE upb_Array* _upb_Array_New(upb_Arena* a, size_t init_capacity,
- int elem_size_lg2) {
- UPB_ASSERT(elem_size_lg2 <= 4);
- const size_t arr_size = UPB_ALIGN_UP(sizeof(upb_Array), UPB_MALLOC_ALIGN);
- const size_t bytes = arr_size + (init_capacity << elem_size_lg2);
- upb_Array* arr = (upb_Array*)upb_Arena_Malloc(a, bytes);
- if (!arr) return NULL;
- arr->data = _upb_tag_arrptr(UPB_PTR_AT(arr, arr_size, void), elem_size_lg2);
- arr->size = 0;
- arr->capacity = init_capacity;
- return arr;
+ const size_t array_size =
+ UPB_ALIGN_UP(sizeof(struct upb_Array), UPB_MALLOC_ALIGN);
+ const size_t bytes = array_size + (init_capacity << elem_size_lg2);
+ struct upb_Array* array = (struct upb_Array*)upb_Arena_Malloc(arena, bytes);
+ if (!array) return NULL;
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)
+ (array, UPB_PTR_AT(array, array_size, void), elem_size_lg2);
+ array->UPB_ONLYBITS(size) = 0;
+ array->UPB_PRIVATE(capacity) = init_capacity;
+ return array;
}
// Resizes the capacity of the array to be at least min_size.
-bool _upb_array_realloc(upb_Array* arr, size_t min_size, upb_Arena* arena);
+bool UPB_PRIVATE(_upb_Array_Realloc)(struct upb_Array* array, size_t min_size,
+ upb_Arena* arena);
-UPB_INLINE bool _upb_array_reserve(upb_Array* arr, size_t size,
- upb_Arena* arena) {
- if (arr->capacity < size) return _upb_array_realloc(arr, size, arena);
+UPB_INLINE bool UPB_PRIVATE(_upb_Array_Reserve)(struct upb_Array* array,
+ size_t size, upb_Arena* arena) {
+ if (array->UPB_PRIVATE(capacity) < size)
+ return UPB_PRIVATE(_upb_Array_Realloc)(array, size, arena);
return true;
}
// Resize without initializing new elements.
-UPB_INLINE bool _upb_Array_ResizeUninitialized(upb_Array* arr, size_t size,
- upb_Arena* arena) {
- UPB_ASSERT(size <= arr->size || arena); // Allow NULL arena when shrinking.
- if (!_upb_array_reserve(arr, size, arena)) return false;
- arr->size = size;
+UPB_INLINE bool _upb_Array_ResizeUninitialized(struct upb_Array* array,
+ size_t size, upb_Arena* arena) {
+ UPB_ASSERT(size <= array->UPB_ONLYBITS(size) ||
+ arena); // Allow NULL arena when shrinking.
+ if (!UPB_PRIVATE(_upb_Array_Reserve)(array, size, arena)) return false;
+ array->UPB_ONLYBITS(size) = size;
return true;
}
// This function is intended for situations where elem_size is compile-time
// constant or a known expression of the form (1 << lg2), so that the expression
// i*elem_size does not result in an actual multiplication.
-UPB_INLINE void _upb_Array_Set(upb_Array* arr, size_t i, const void* data,
- size_t elem_size) {
- UPB_ASSERT(i < arr->size);
- UPB_ASSERT(elem_size == 1U << _upb_Array_ElementSizeLg2(arr));
- char* arr_data = (char*)_upb_array_ptr(arr);
+UPB_INLINE void UPB_PRIVATE(_upb_Array_Set)(struct upb_Array* array, size_t i,
+ const void* data,
+ size_t elem_size) {
+ UPB_ASSERT(i < array->UPB_ONLYBITS(size));
+ UPB_ASSERT(elem_size == 1U << UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array));
+ char* arr_data = (char*)_upb_array_ptr(array);
memcpy(arr_data + (i * elem_size), data, elem_size);
}
-UPB_INLINE void _upb_array_detach(const void* msg, size_t ofs) {
- *UPB_PTR_AT(msg, ofs, upb_Array*) = NULL;
-}
+// LINT.ThenChange(
+// GoogleInternalName1,
+//)
#ifdef __cplusplus
} /* extern "C" */
#endif
+#undef _UPB_ARRAY_MASK_IMM
+#undef _UPB_ARRAY_MASK_LG2
+#undef _UPB_ARRAY_MASK_ALL
+
#include "upb/port/undef.inc"
#endif /* UPB_MESSAGE_INTERNAL_ARRAY_H_ */
diff --git a/upb/message/internal/extension.c b/upb/message/internal/extension.c
new file mode 100644
index 0000000..c2920b9
--- /dev/null
+++ b/upb/message/internal/extension.c
@@ -0,0 +1,62 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "upb/message/internal/extension.h"
+
+#include <string.h>
+
+#include "upb/mem/arena.h"
+#include "upb/message/internal/extension.h"
+#include "upb/message/internal/message.h"
+#include "upb/mini_table/extension.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+const struct upb_Extension* _upb_Message_Getext(
+ const struct upb_Message* msg, const upb_MiniTableExtension* e) {
+ size_t n;
+ const struct upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &n);
+
+ // For now we use linear search exclusively to find extensions.
+ // If this becomes an issue due to messages with lots of extensions,
+ // we can introduce a table of some sort.
+ for (size_t i = 0; i < n; i++) {
+ if (ext[i].ext == e) {
+ return &ext[i];
+ }
+ }
+
+ return NULL;
+}
+
+const struct upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(
+ const struct upb_Message* msg, size_t* count) {
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ if (in) {
+ *count = (in->size - in->ext_begin) / sizeof(struct upb_Extension);
+ return UPB_PTR_AT(in, in->ext_begin, void);
+ } else {
+ *count = 0;
+ return NULL;
+ }
+}
+
+struct upb_Extension* _upb_Message_GetOrCreateExtension(
+ struct upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* a) {
+ struct upb_Extension* ext =
+ (struct upb_Extension*)_upb_Message_Getext(msg, e);
+ if (ext) return ext;
+ if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, sizeof(struct upb_Extension), a))
+ return NULL;
+ upb_Message_InternalData* in = upb_Message_GetInternalData(msg);
+ in->ext_begin -= sizeof(struct upb_Extension);
+ ext = UPB_PTR_AT(in, in->ext_begin, void);
+ memset(ext, 0, sizeof(struct upb_Extension));
+ ext->ext = e;
+ return ext;
+}
diff --git a/upb/message/internal/extension.h b/upb/message/internal/extension.h
index ab653ab..9325732 100644
--- a/upb/message/internal/extension.h
+++ b/upb/message/internal/extension.h
@@ -8,10 +8,9 @@
#ifndef UPB_MESSAGE_INTERNAL_EXTENSION_H_
#define UPB_MESSAGE_INTERNAL_EXTENSION_H_
-#include "upb/base/descriptor_constants.h"
#include "upb/base/string_view.h"
#include "upb/mem/arena.h"
-#include "upb/message/message.h"
+#include "upb/message/internal/message.h"
#include "upb/mini_table/extension.h"
// Must be last.
@@ -25,14 +24,14 @@
// This is rather wasteful for scalars (in the extreme case of bool,
// it wastes 15 bytes). We accept this because we expect messages to be
// the most common extension type.
-typedef struct {
+struct upb_Extension {
const upb_MiniTableExtension* ext;
union {
upb_StringView str;
void* ptr;
char scalar_data[8];
} data;
-} upb_Message_Extension;
+};
#ifdef __cplusplus
extern "C" {
@@ -41,18 +40,19 @@
// Adds the given extension data to the given message.
// |ext| is copied into the message instance.
// This logically replaces any previously-added extension with this number.
-upb_Message_Extension* _upb_Message_GetOrCreateExtension(
- upb_Message* msg, const upb_MiniTableExtension* ext, upb_Arena* arena);
+struct upb_Extension* _upb_Message_GetOrCreateExtension(
+ struct upb_Message* msg, const upb_MiniTableExtension* ext,
+ upb_Arena* arena);
// Returns an array of extensions for this message.
// Note: the array is ordered in reverse relative to the order of creation.
-const upb_Message_Extension* _upb_Message_Getexts(const upb_Message* msg,
- size_t* count);
+const struct upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(
+ const struct upb_Message* msg, size_t* count);
-// Returns an extension for the given field number, or NULL if no extension
-// exists for this field number.
-const upb_Message_Extension* _upb_Message_Getext(
- const upb_Message* msg, const upb_MiniTableExtension* ext);
+// Returns an extension for a message with a given mini table,
+// or NULL if no extension exists with this mini table.
+const struct upb_Extension* _upb_Message_Getext(
+ const struct upb_Message* msg, const upb_MiniTableExtension* ext);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/upb/message/internal/map.h b/upb/message/internal/map.h
index 26d23ca..da4223d 100644
--- a/upb/message/internal/map.h
+++ b/upb/message/internal/map.h
@@ -1,46 +1,32 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
-// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
+#ifndef UPB_MESSAGE_INTERNAL_MAP_H_
+#define UPB_MESSAGE_INTERNAL_MAP_H_
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_H_
+#include <stddef.h>
+#include <string.h>
+#include "upb/base/descriptor_constants.h"
#include "upb/base/string_view.h"
#include "upb/hash/str_table.h"
#include "upb/mem/arena.h"
-#include "upb/message/map.h"
// Must be last.
#include "upb/port/def.inc"
+typedef enum {
+ kUpb_MapInsertStatus_Inserted = 0,
+ kUpb_MapInsertStatus_Replaced = 1,
+ kUpb_MapInsertStatus_OutOfMemory = 2,
+} upb_MapInsertStatus;
+
+// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
+
struct upb_Map {
// Size of key and val, based on the map type.
// Strings are represented as '0' because they must be handled specially.
@@ -100,7 +86,7 @@
}
}
-UPB_INLINE void* _upb_map_next(const upb_Map* map, size_t* iter) {
+UPB_INLINE void* _upb_map_next(const struct upb_Map* map, size_t* iter) {
upb_strtable_iter it;
it.t = &map->table;
it.index = *iter;
@@ -110,17 +96,17 @@
return (void*)str_tabent(&it);
}
-UPB_INLINE void _upb_Map_Clear(upb_Map* map) {
+UPB_INLINE void _upb_Map_Clear(struct upb_Map* map) {
upb_strtable_clear(&map->table);
}
-UPB_INLINE bool _upb_Map_Delete(upb_Map* map, const void* key, size_t key_size,
- upb_value* val) {
+UPB_INLINE bool _upb_Map_Delete(struct upb_Map* map, const void* key,
+ size_t key_size, upb_value* val) {
upb_StringView k = _upb_map_tokey(key, key_size);
return upb_strtable_remove2(&map->table, k.data, k.size, val);
}
-UPB_INLINE bool _upb_Map_Get(const upb_Map* map, const void* key,
+UPB_INLINE bool _upb_Map_Get(const struct upb_Map* map, const void* key,
size_t key_size, void* val, size_t val_size) {
upb_value tabval;
upb_StringView k = _upb_map_tokey(key, key_size);
@@ -131,9 +117,10 @@
return ret;
}
-UPB_INLINE upb_MapInsertStatus _upb_Map_Insert(upb_Map* map, const void* key,
- size_t key_size, void* val,
- size_t val_size, upb_Arena* a) {
+UPB_INLINE upb_MapInsertStatus _upb_Map_Insert(struct upb_Map* map,
+ const void* key, size_t key_size,
+ void* val, size_t val_size,
+ upb_Arena* a) {
upb_StringView strkey = _upb_map_tokey(key, key_size);
upb_value tabval = {0};
if (!_upb_map_tovalue(val, val_size, &tabval, a)) {
@@ -150,7 +137,7 @@
: kUpb_MapInsertStatus_Inserted;
}
-UPB_INLINE size_t _upb_Map_Size(const upb_Map* map) {
+UPB_INLINE size_t _upb_Map_Size(const struct upb_Map* map) {
return map->table.t.count;
}
@@ -162,7 +149,7 @@
}
// Creates a new map on the given arena with this key/value type.
-upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size);
+struct upb_Map* _upb_Map_New(upb_Arena* a, size_t key_size, size_t value_size);
#ifdef __cplusplus
} /* extern "C" */
@@ -170,4 +157,4 @@
#include "upb/port/undef.inc"
-#endif /* UPB_COLLECTIONS_INTERNAL_MAP_H_ */
+#endif /* UPB_MESSAGE_INTERNAL_MAP_H_ */
diff --git a/upb/message/internal/map_entry.h b/upb/message/internal/map_entry.h
index 2718544..9c1ec6b 100644
--- a/upb/message/internal/map_entry.h
+++ b/upb/message/internal/map_entry.h
@@ -1,39 +1,18 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
+#ifndef UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
+#define UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
+
+#include <stdint.h>
#include "upb/base/string_view.h"
#include "upb/hash/common.h"
-#include "upb/message/internal/types.h"
+#include "upb/message/internal/message.h"
// Map entries aren't actually stored for map fields, they are only used during
// parsing. For parsing, it helps a lot if all map entry messages have the same
@@ -63,4 +42,4 @@
upb_MapEntryData data;
} upb_MapEntry;
-#endif // UPB_COLLECTIONS_INTERNAL_MAP_ENTRY_H_
+#endif // UPB_MESSAGE_INTERNAL_MAP_ENTRY_H_
diff --git a/upb/message/internal/map_sorter.h b/upb/message/internal/map_sorter.h
index 77e6263..65b58a5 100644
--- a/upb/message/internal/map_sorter.h
+++ b/upb/message/internal/map_sorter.h
@@ -1,40 +1,20 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
// EVERYTHING BELOW THIS LINE IS INTERNAL - DO NOT USE /////////////////////////
-#ifndef UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_
-#define UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_
+#ifndef UPB_MESSAGE_INTERNAL_MAP_SORTER_H_
+#define UPB_MESSAGE_INTERNAL_MAP_SORTER_H_
#include <stdlib.h>
+#include "upb/base/descriptor_constants.h"
+#include "upb/base/string_view.h"
+#include "upb/mem/alloc.h"
#include "upb/message/internal/extension.h"
#include "upb/message/internal/map.h"
#include "upb/message/internal/map_entry.h"
@@ -69,10 +49,11 @@
}
UPB_INLINE void _upb_mapsorter_destroy(_upb_mapsorter* s) {
- if (s->entries) free(s->entries);
+ if (s->entries) upb_gfree(s->entries);
}
-UPB_INLINE bool _upb_sortedmap_next(_upb_mapsorter* s, const upb_Map* map,
+UPB_INLINE bool _upb_sortedmap_next(_upb_mapsorter* s,
+ const struct upb_Map* map,
_upb_sortedmap* sorted, upb_MapEntry* ent) {
if (sorted->pos == sorted->end) return false;
const upb_tabent* tabent = (const upb_tabent*)s->entries[sorted->pos++];
@@ -85,9 +66,9 @@
UPB_INLINE bool _upb_sortedmap_nextext(_upb_mapsorter* s,
_upb_sortedmap* sorted,
- const upb_Message_Extension** ext) {
+ const struct upb_Extension** ext) {
if (sorted->pos == sorted->end) return false;
- *ext = (const upb_Message_Extension*)s->entries[sorted->pos++];
+ *ext = (const struct upb_Extension*)s->entries[sorted->pos++];
return true;
}
@@ -97,10 +78,10 @@
}
bool _upb_mapsorter_pushmap(_upb_mapsorter* s, upb_FieldType key_type,
- const upb_Map* map, _upb_sortedmap* sorted);
+ const struct upb_Map* map, _upb_sortedmap* sorted);
bool _upb_mapsorter_pushexts(_upb_mapsorter* s,
- const upb_Message_Extension* exts, size_t count,
+ const struct upb_Extension* exts, size_t count,
_upb_sortedmap* sorted);
#ifdef __cplusplus
@@ -109,4 +90,4 @@
#include "upb/port/undef.inc"
-#endif /* UPB_COLLECTIONS_INTERNAL_MAP_SORTER_H_ */
+#endif /* UPB_MESSAGE_INTERNAL_MAP_SORTER_H_ */
diff --git a/upb/message/internal/message.c b/upb/message/internal/message.c
new file mode 100644
index 0000000..b83a5a1
--- /dev/null
+++ b/upb/message/internal/message.c
@@ -0,0 +1,59 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#include "upb/message/internal/message.h"
+
+#include <math.h>
+#include <string.h>
+
+#include "upb/base/internal/log2.h"
+#include "upb/mem/arena.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+const float kUpb_FltInfinity = INFINITY;
+const double kUpb_Infinity = INFINITY;
+const double kUpb_NaN = NAN;
+
+bool UPB_PRIVATE(_upb_Message_Realloc)(struct upb_Message* msg, size_t need,
+ upb_Arena* a) {
+ const size_t overhead = sizeof(upb_Message_InternalData);
+
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (!in) {
+ // No internal data, allocate from scratch.
+ size_t size = UPB_MAX(128, upb_Log2CeilingSize(need + overhead));
+ in = upb_Arena_Malloc(a, size);
+ if (!in) return false;
+
+ in->size = size;
+ in->unknown_end = overhead;
+ in->ext_begin = size;
+ owner->internal = in;
+ } else if (in->ext_begin - in->unknown_end < need) {
+ // Internal data is too small, reallocate.
+ size_t new_size = upb_Log2CeilingSize(in->size + need);
+ size_t ext_bytes = in->size - in->ext_begin;
+ size_t new_ext_begin = new_size - ext_bytes;
+ in = upb_Arena_Realloc(a, in, in->size, new_size);
+ if (!in) return false;
+
+ if (ext_bytes) {
+ // Need to move extension data to the end.
+ char* ptr = (char*)in;
+ memmove(ptr + new_ext_begin, ptr + in->ext_begin, ext_bytes);
+ }
+ in->ext_begin = new_ext_begin;
+ in->size = new_size;
+ owner->internal = in;
+ }
+
+ UPB_ASSERT(in->ext_begin - in->unknown_end >= need);
+ return true;
+}
diff --git a/upb/message/internal/message.h b/upb/message/internal/message.h
index d270a01..da9aa09 100644
--- a/upb/message/internal/message.h
+++ b/upb/message/internal/message.h
@@ -12,17 +12,14 @@
** The definitions in this file are internal to upb.
**/
-#ifndef UPB_MESSAGE_INTERNAL_H_
-#define UPB_MESSAGE_INTERNAL_H_
+#ifndef UPB_MESSAGE_INTERNAL_MESSAGE_H_
+#define UPB_MESSAGE_INTERNAL_MESSAGE_H_
#include <stdlib.h>
#include <string.h>
+#include "upb/mem/arena.h"
#include "upb/message/internal/extension.h"
-#include "upb/message/internal/types.h"
-#include "upb/message/message.h"
-#include "upb/mini_table/extension.h"
-#include "upb/mini_table/extension_registry.h"
#include "upb/mini_table/message.h"
// Must be last.
@@ -41,9 +38,9 @@
* these before the user's data. The user's upb_Message* points after the
* upb_Message_Internal. */
-struct upb_Message_InternalData {
+typedef struct {
/* Total size of this structure, including the data that follows.
- * Must be aligned to 8, which is alignof(upb_Message_Extension) */
+ * Must be aligned to 8, which is alignof(upb_Extension) */
uint32_t size;
/* Offsets relative to the beginning of this structure.
@@ -63,39 +60,60 @@
uint32_t ext_begin;
/* Data follows, as if there were an array:
* char data[size - sizeof(upb_Message_InternalData)]; */
+} upb_Message_InternalData;
+
+typedef struct {
+ union {
+ upb_Message_InternalData* internal;
+
+ // Force 8-byte alignment, since the data members may contain members that
+ // require 8-byte alignment.
+ double d;
+ };
+} upb_Message_Internal;
+
+struct upb_Message {
+ int unused; // Placeholder cuz Windows won't compile an empty struct.
};
-/* Maps upb_CType -> memory size. */
-extern char _upb_CTypeo_size[12];
-
-UPB_INLINE size_t upb_msg_sizeof(const upb_MiniTable* t) {
- return t->size + sizeof(upb_Message_Internal);
+UPB_INLINE size_t upb_msg_sizeof(const upb_MiniTable* m) {
+ return m->UPB_PRIVATE(size) + sizeof(upb_Message_Internal);
}
// Inline version upb_Message_New(), for internal use.
-UPB_INLINE upb_Message* _upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena) {
+UPB_INLINE struct upb_Message* _upb_Message_New(const upb_MiniTable* mini_table,
+ upb_Arena* arena) {
size_t size = upb_msg_sizeof(mini_table);
void* mem = upb_Arena_Malloc(arena, size + sizeof(upb_Message_Internal));
if (UPB_UNLIKELY(!mem)) return NULL;
- upb_Message* msg = UPB_PTR_AT(mem, sizeof(upb_Message_Internal), upb_Message);
+ struct upb_Message* msg =
+ UPB_PTR_AT(mem, sizeof(upb_Message_Internal), struct upb_Message);
memset(mem, 0, size);
return msg;
}
UPB_INLINE upb_Message_Internal* upb_Message_Getinternal(
- const upb_Message* msg) {
+ const struct upb_Message* msg) {
ptrdiff_t size = sizeof(upb_Message_Internal);
return (upb_Message_Internal*)((char*)msg - size);
}
+UPB_INLINE upb_Message_InternalData* upb_Message_GetInternalData(
+ const struct upb_Message* msg) {
+ return upb_Message_Getinternal(msg)->internal;
+}
+
// Discards the unknown fields for this message only.
-void _upb_Message_DiscardUnknown_shallow(upb_Message* msg);
+void _upb_Message_DiscardUnknown_shallow(struct upb_Message* msg);
// Adds unknown data (serialized protobuf data) to the given message.
// The data is copied into the message instance.
-bool _upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena);
+bool UPB_PRIVATE(_upb_Message_AddUnknown)(struct upb_Message* msg,
+ const char* data, size_t len,
+ upb_Arena* arena);
+
+bool UPB_PRIVATE(_upb_Message_Realloc)(struct upb_Message* msg, size_t need,
+ upb_Arena* arena);
#ifdef __cplusplus
} /* extern "C" */
@@ -103,4 +121,4 @@
#include "upb/port/undef.inc"
-#endif /* UPB_MESSAGE_INTERNAL_H_ */
+#endif /* UPB_MESSAGE_INTERNAL_MESSAGE_H_ */
diff --git a/upb/message/internal/tagged_ptr.h b/upb/message/internal/tagged_ptr.h
new file mode 100644
index 0000000..b1c9a77
--- /dev/null
+++ b/upb/message/internal/tagged_ptr.h
@@ -0,0 +1,59 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_
+#define UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_
+
+#include <stdint.h>
+
+#include "upb/message/internal/message.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+typedef uintptr_t upb_TaggedMessagePtr;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Internal-only because empty messages cannot be created by the user.
+UPB_INLINE upb_TaggedMessagePtr
+UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(struct upb_Message* ptr, bool empty) {
+ UPB_ASSERT(((uintptr_t)ptr & 1) == 0);
+ return (uintptr_t)ptr | (empty ? 1 : 0);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(
+ upb_TaggedMessagePtr ptr) {
+ return ptr & 1;
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(
+ upb_TaggedMessagePtr ptr) {
+ return (struct upb_Message*)(ptr & ~(uintptr_t)1);
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(
+ _upb_TaggedMessagePtr_GetNonEmptyMessage)(upb_TaggedMessagePtr ptr) {
+ UPB_ASSERT(!UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr));
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(ptr);
+}
+
+UPB_INLINE struct upb_Message* UPB_PRIVATE(
+ _upb_TaggedMessagePtr_GetEmptyMessage)(upb_TaggedMessagePtr ptr) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr));
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(ptr);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif /* UPB_MINI_TABLE_INTERNAL_TAGGED_PTR_H_ */
diff --git a/upb/message/internal/types.h b/upb/message/internal/types.h
deleted file mode 100644
index 2bd3b0b..0000000
--- a/upb/message/internal/types.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2023 Google LLC. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-#ifndef UPB_MINI_TABLE_INTERNAL_TYPES_H_
-#define UPB_MINI_TABLE_INTERNAL_TYPES_H_
-
-typedef struct upb_Message_InternalData upb_Message_InternalData;
-
-typedef struct {
- union {
- upb_Message_InternalData* internal;
-
- // Force 8-byte alignment, since the data members may contain members that
- // require 8-byte alignment.
- double d;
- };
-} upb_Message_Internal;
-
-#endif // UPB_MINI_TABLE_INTERNAL_TYPES_H_
diff --git a/upb/message/map.c b/upb/message/map.c
index 2a90cd0..bedbc9c 100644
--- a/upb/message/map.c
+++ b/upb/message/map.c
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/message/map.h"
diff --git a/upb/message/map.h b/upb/message/map.h
index 051f954..e471a6b 100644
--- a/upb/message/map.h
+++ b/upb/message/map.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_MESSAGE_MAP_H_
#define UPB_MESSAGE_MAP_H_
@@ -35,7 +12,8 @@
#include "upb/base/descriptor_constants.h"
#include "upb/mem/arena.h"
-#include "upb/message/value.h" // IWYU pragma: export
+#include "upb/message/internal/map.h"
+#include "upb/message/value.h"
// Must be last.
#include "upb/port/def.inc"
@@ -62,12 +40,6 @@
// Removes all entries in the map.
UPB_API void upb_Map_Clear(upb_Map* map);
-typedef enum {
- kUpb_MapInsertStatus_Inserted = 0,
- kUpb_MapInsertStatus_Replaced = 1,
- kUpb_MapInsertStatus_OutOfMemory = 2,
-} upb_MapInsertStatus;
-
// Sets the given key to the given value, returning whether the key was inserted
// or replaced. If the key was inserted, then any existing iterators will be
// invalidated.
diff --git a/upb/message/map_gencode_util.h b/upb/message/map_gencode_util.h
index 52ad69f..4618931 100644
--- a/upb/message/map_gencode_util.h
+++ b/upb/message/map_gencode_util.h
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
// These functions are only used by generated code.
diff --git a/upb/message/map_sorter.c b/upb/message/map_sorter.c
index bdbfb59..5c06cd3 100644
--- a/upb/message/map_sorter.c
+++ b/upb/message/map_sorter.c
@@ -1,36 +1,22 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/message/internal/map_sorter.h"
+#include <stdint.h>
+#include <string.h>
+
+#include "upb/base/descriptor_constants.h"
#include "upb/base/internal/log2.h"
+#include "upb/base/string_view.h"
+#include "upb/mem/alloc.h"
+#include "upb/message/map.h"
+#include "upb/message/message.h"
+#include "upb/mini_table/extension.h"
// Must be last.
#include "upb/port/def.inc"
@@ -113,8 +99,10 @@
sorted->end = sorted->start + size;
if (sorted->end > s->cap) {
+ const int oldsize = s->cap * sizeof(*s->entries);
s->cap = upb_Log2CeilingSize(sorted->end);
- s->entries = realloc(s->entries, s->cap * sizeof(*s->entries));
+ const int newsize = s->cap * sizeof(*s->entries);
+ s->entries = upb_grealloc(s->entries, oldsize, newsize);
if (!s->entries) return false;
}
@@ -147,17 +135,16 @@
}
static int _upb_mapsorter_cmpext(const void* _a, const void* _b) {
- const upb_Message_Extension* const* a = _a;
- const upb_Message_Extension* const* b = _b;
- uint32_t a_num = (*a)->ext->field.number;
- uint32_t b_num = (*b)->ext->field.number;
+ const upb_Extension* const* a = _a;
+ const upb_Extension* const* b = _b;
+ uint32_t a_num = upb_MiniTableExtension_Number((*a)->ext);
+ uint32_t b_num = upb_MiniTableExtension_Number((*b)->ext);
assert(a_num != b_num);
return a_num < b_num ? -1 : 1;
}
-bool _upb_mapsorter_pushexts(_upb_mapsorter* s,
- const upb_Message_Extension* exts, size_t count,
- _upb_sortedmap* sorted) {
+bool _upb_mapsorter_pushexts(_upb_mapsorter* s, const upb_Extension* exts,
+ size_t count, _upb_sortedmap* sorted) {
if (!_upb_mapsorter_resize(s, sorted, count)) return false;
for (size_t i = 0; i < count; i++) {
diff --git a/upb/message/map_test.cc b/upb/message/map_test.cc
index bb7e424..f97e573 100644
--- a/upb/message/map_test.cc
+++ b/upb/message/map_test.cc
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include "upb/message/map.h"
diff --git a/upb/message/message.c b/upb/message/message.c
index 265d30d..d59ea4d 100644
--- a/upb/message/message.c
+++ b/upb/message/message.c
@@ -7,78 +7,47 @@
#include "upb/message/message.h"
-#include <math.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
-#include "upb/base/internal/log2.h"
+#include "upb/mem/arena.h"
#include "upb/message/internal/message.h"
+#include "upb/mini_table/message.h"
// Must be last.
#include "upb/port/def.inc"
-const float kUpb_FltInfinity = INFINITY;
-const double kUpb_Infinity = INFINITY;
-const double kUpb_NaN = NAN;
+static const size_t message_overhead = sizeof(upb_Message_InternalData);
-static const size_t overhead = sizeof(upb_Message_InternalData);
-
-upb_Message* upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena) {
- return _upb_Message_New(mini_table, arena);
+upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* a) {
+ return _upb_Message_New(m, a);
}
-static bool realloc_internal(upb_Message* msg, size_t need, upb_Arena* arena) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (!in->internal) {
- /* No internal data, allocate from scratch. */
- size_t size = UPB_MAX(128, upb_Log2CeilingSize(need + overhead));
- upb_Message_InternalData* internal = upb_Arena_Malloc(arena, size);
- if (!internal) return false;
- internal->size = size;
- internal->unknown_end = overhead;
- internal->ext_begin = size;
- in->internal = internal;
- } else if (in->internal->ext_begin - in->internal->unknown_end < need) {
- /* Internal data is too small, reallocate. */
- size_t new_size = upb_Log2CeilingSize(in->internal->size + need);
- size_t ext_bytes = in->internal->size - in->internal->ext_begin;
- size_t new_ext_begin = new_size - ext_bytes;
- upb_Message_InternalData* internal =
- upb_Arena_Realloc(arena, in->internal, in->internal->size, new_size);
- if (!internal) return false;
- if (ext_bytes) {
- /* Need to move extension data to the end. */
- char* ptr = (char*)internal;
- memmove(ptr + new_ext_begin, ptr + internal->ext_begin, ext_bytes);
- }
- internal->ext_begin = new_ext_begin;
- internal->size = new_size;
- in->internal = internal;
- }
- UPB_ASSERT(in->internal->ext_begin - in->internal->unknown_end >= need);
- return true;
-}
-
-bool _upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena) {
- if (!realloc_internal(msg, len, arena)) return false;
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- memcpy(UPB_PTR_AT(in->internal, in->internal->unknown_end, char), data, len);
- in->internal->unknown_end += len;
+bool UPB_PRIVATE(_upb_Message_AddUnknown)(upb_Message* msg, const char* data,
+ size_t len, upb_Arena* arena) {
+ if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, len, arena)) return false;
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ memcpy(UPB_PTR_AT(in, in->unknown_end, char), data, len);
+ in->unknown_end += len;
return true;
}
void _upb_Message_DiscardUnknown_shallow(upb_Message* msg) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- in->internal->unknown_end = overhead;
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (in) {
+ in->unknown_end = message_overhead;
}
}
const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len) {
- const upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- *len = in->internal->unknown_end - overhead;
- return (char*)(in->internal + 1);
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ if (in) {
+ *len = in->unknown_end - message_overhead;
+ return (char*)(in + 1);
} else {
*len = 0;
return NULL;
@@ -86,9 +55,10 @@
}
void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len) {
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- const char* internal_unknown_end =
- UPB_PTR_AT(in->internal, in->internal->unknown_end, char);
+ upb_Message_Internal* owner = upb_Message_Getinternal(msg);
+ upb_Message_InternalData* in = owner->internal;
+ const char* internal_unknown_end = UPB_PTR_AT(in, in->unknown_end, char);
+
#ifndef NDEBUG
size_t full_unknown_size;
const char* full_unknown = upb_Message_GetUnknown(msg, &full_unknown_size);
@@ -97,58 +67,15 @@
UPB_ASSERT((uintptr_t)(data + len) > (uintptr_t)data);
UPB_ASSERT((uintptr_t)(data + len) <= (uintptr_t)internal_unknown_end);
#endif
+
if ((data + len) != internal_unknown_end) {
memmove((char*)data, data + len, internal_unknown_end - data - len);
}
- in->internal->unknown_end -= len;
-}
-
-const upb_Message_Extension* _upb_Message_Getexts(const upb_Message* msg,
- size_t* count) {
- const upb_Message_Internal* in = upb_Message_Getinternal(msg);
- if (in->internal) {
- *count = (in->internal->size - in->internal->ext_begin) /
- sizeof(upb_Message_Extension);
- return UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
- } else {
- *count = 0;
- return NULL;
- }
-}
-
-const upb_Message_Extension* _upb_Message_Getext(
- const upb_Message* msg, const upb_MiniTableExtension* e) {
- size_t n;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &n);
-
- /* For now we use linear search exclusively to find extensions. If this
- * becomes an issue due to messages with lots of extensions, we can introduce
- * a table of some sort. */
- for (size_t i = 0; i < n; i++) {
- if (ext[i].ext == e) {
- return &ext[i];
- }
- }
-
- return NULL;
-}
-
-upb_Message_Extension* _upb_Message_GetOrCreateExtension(
- upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* arena) {
- upb_Message_Extension* ext =
- (upb_Message_Extension*)_upb_Message_Getext(msg, e);
- if (ext) return ext;
- if (!realloc_internal(msg, sizeof(upb_Message_Extension), arena)) return NULL;
- upb_Message_Internal* in = upb_Message_Getinternal(msg);
- in->internal->ext_begin -= sizeof(upb_Message_Extension);
- ext = UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
- memset(ext, 0, sizeof(upb_Message_Extension));
- ext->ext = e;
- return ext;
+ in->unknown_end -= len;
}
size_t upb_Message_ExtensionCount(const upb_Message* msg) {
size_t count;
- _upb_Message_Getexts(msg, &count);
+ UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
return count;
}
diff --git a/upb/message/message.h b/upb/message/message.h
index 705803a..95ac504 100644
--- a/upb/message/message.h
+++ b/upb/message/message.h
@@ -15,24 +15,20 @@
#include <stddef.h>
#include "upb/mem/arena.h"
-#include "upb/message/types.h" // IWYU pragma: export
#include "upb/mini_table/message.h"
// Must be last.
#include "upb/port/def.inc"
+typedef struct upb_Extension upb_Extension;
+typedef struct upb_Message upb_Message;
+
#ifdef __cplusplus
extern "C" {
#endif
// Creates a new message with the given mini_table on the given arena.
-UPB_API upb_Message* upb_Message_New(const upb_MiniTable* mini_table,
- upb_Arena* arena);
-
-// Adds unknown data (serialized protobuf data) to the given message.
-// The data is copied into the message instance.
-void upb_Message_AddUnknown(upb_Message* msg, const char* data, size_t len,
- upb_Arena* arena);
+UPB_API upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* arena);
// Returns a reference to the message's unknown data.
const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len);
diff --git a/upb/message/promote.c b/upb/message/promote.c
index b414eaa..2cd0888 100644
--- a/upb/message/promote.c
+++ b/upb/message/promote.c
@@ -15,20 +15,19 @@
#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
#include "upb/message/array.h"
-#include "upb/message/internal/accessors.h"
#include "upb/message/internal/array.h"
#include "upb/message/internal/extension.h"
#include "upb/message/internal/message.h"
+#include "upb/message/internal/tagged_ptr.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
#include "upb/message/tagged_ptr.h"
#include "upb/mini_table/extension.h"
#include "upb/mini_table/field.h"
-#include "upb/mini_table/internal/field.h"
#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
#include "upb/wire/decode.h"
#include "upb/wire/eps_copy_input_stream.h"
-#include "upb/wire/internal/constants.h"
#include "upb/wire/reader.h"
// Must be last.
@@ -67,24 +66,25 @@
upb_GetExtension_Status upb_MiniTable_GetOrPromoteExtension(
upb_Message* msg, const upb_MiniTableExtension* ext_table,
- int decode_options, upb_Arena* arena,
- const upb_Message_Extension** extension) {
- UPB_ASSERT(upb_MiniTableField_CType(&ext_table->field) == kUpb_CType_Message);
+ int decode_options, upb_Arena* arena, const upb_Extension** extension) {
+ UPB_ASSERT(upb_MiniTableField_CType(upb_MiniTableExtension_AsField(
+ ext_table)) == kUpb_CType_Message);
*extension = _upb_Message_Getext(msg, ext_table);
if (*extension) {
return kUpb_GetExtension_Ok;
}
// Check unknown fields, if available promote.
- int field_number = ext_table->field.number;
- upb_FindUnknownRet result = upb_MiniTable_FindUnknown(msg, field_number, 0);
+ int field_number = upb_MiniTableExtension_Number(ext_table);
+ upb_FindUnknownRet result = upb_Message_FindUnknown(msg, field_number, 0);
if (result.status != kUpb_FindUnknown_Ok) {
return kUpb_GetExtension_NotPresent;
}
size_t len;
size_t ofs = result.ptr - upb_Message_GetUnknown(msg, &len);
// Decode and promote from unknown.
- const upb_MiniTable* extension_table = ext_table->sub.submsg;
+ const upb_MiniTable* extension_table =
+ upb_MiniTableExtension_GetSubMessage(ext_table);
upb_UnknownToMessageRet parse_result = upb_MiniTable_ParseUnknownMessage(
result.ptr, result.len, extension_table,
/* base_message= */ NULL, decode_options, arena);
@@ -100,8 +100,7 @@
}
upb_Message* extension_msg = parse_result.message;
// Add to extensions.
- upb_Message_Extension* ext =
- _upb_Message_GetOrCreateExtension(msg, ext_table, arena);
+ upb_Extension* ext = _upb_Message_GetOrCreateExtension(msg, ext_table, arena);
if (!ext) {
return kUpb_GetExtension_OutOfMemory;
}
@@ -116,10 +115,10 @@
return (upb_FindUnknownRet){.status = kUpb_FindUnknown_ParseError};
}
-upb_FindUnknownRet upb_MiniTable_FindUnknown(const upb_Message* msg,
- uint32_t field_number,
- int depth_limit) {
- depth_limit = depth_limit ? depth_limit : kUpb_WireFormat_DefaultDepthLimit;
+upb_FindUnknownRet upb_Message_FindUnknown(const upb_Message* msg,
+ uint32_t field_number,
+ int depth_limit) {
+ depth_limit = depth_limit ? depth_limit : 100;
size_t size;
upb_FindUnknownRet ret;
@@ -156,7 +155,8 @@
const upb_MiniTable* mini_table,
int decode_options,
upb_Arena* arena) {
- upb_Message* empty = _upb_TaggedMessagePtr_GetEmptyMessage(*tagged);
+ upb_Message* empty =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetEmptyMessage)(*tagged);
size_t unknown_size;
const char* unknown_data = upb_Message_GetUnknown(empty, &unknown_size);
upb_Message* promoted = upb_Message_New(mini_table, arena);
@@ -164,7 +164,7 @@
upb_DecodeStatus status = upb_Decode(unknown_data, unknown_size, promoted,
mini_table, NULL, decode_options, arena);
if (status == kUpb_DecodeStatus_Ok) {
- *tagged = _upb_TaggedMessagePtr_Pack(promoted, false);
+ *tagged = UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(promoted, false);
}
return status;
}
@@ -194,7 +194,7 @@
int decode_options,
upb_Arena* arena) {
void** data = _upb_array_ptr(arr);
- size_t size = arr->size;
+ size_t size = arr->UPB_PRIVATE(size);
for (size_t i = 0; i < size; i++) {
upb_TaggedMessagePtr tagged;
memcpy(&tagged, &data[i], sizeof(tagged));
@@ -238,15 +238,17 @@
// PromotoUnknownToMessage.
UPB_ASSERT(upb_MiniTable_GetSubMessageTable(mini_table, field) ==
sub_mini_table);
- bool is_oneof = _upb_MiniTableField_InOneOf(field);
- if (!is_oneof || _upb_getoneofcase_field(msg, field) == field->number) {
+ bool is_oneof = upb_MiniTableField_IsInOneof(field);
+ if (!is_oneof || UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, field) ==
+ upb_MiniTableField_Number(field)) {
UPB_ASSERT(upb_Message_GetMessage(msg, field, NULL) == NULL);
}
upb_UnknownToMessageRet ret;
ret.status = kUpb_UnknownToMessage_Ok;
do {
- unknown = upb_MiniTable_FindUnknown(
- msg, field->number, upb_DecodeOptions_GetMaxDepth(decode_options));
+ unknown =
+ upb_Message_FindUnknown(msg, upb_MiniTableField_Number(field),
+ upb_DecodeOptions_GetMaxDepth(decode_options));
switch (unknown.status) {
case kUpb_FindUnknown_Ok: {
const char* unknown_data = unknown.ptr;
@@ -271,7 +273,7 @@
} while (unknown.status == kUpb_FindUnknown_Ok);
if (message) {
if (is_oneof) {
- *_upb_oneofcase_field(msg, field) = field->number;
+ UPB_PRIVATE(_upb_Message_SetOneofCase)(msg, field);
}
upb_Message_SetMessage(msg, mini_table, field, message);
ret.message = message;
@@ -292,8 +294,9 @@
// Find all unknowns with given field number and parse.
upb_FindUnknownRet unknown;
do {
- unknown = upb_MiniTable_FindUnknown(
- msg, field->number, upb_DecodeOptions_GetMaxDepth(decode_options));
+ unknown =
+ upb_Message_FindUnknown(msg, upb_MiniTableField_Number(field),
+ upb_DecodeOptions_GetMaxDepth(decode_options));
if (unknown.status == kUpb_FindUnknown_Ok) {
upb_UnknownToMessageRet ret = upb_MiniTable_ParseUnknownMessage(
unknown.ptr, unknown.len, mini_table,
@@ -322,17 +325,19 @@
upb_UnknownToMessage_Status upb_MiniTable_PromoteUnknownToMap(
upb_Message* msg, const upb_MiniTable* mini_table,
const upb_MiniTableField* field, int decode_options, upb_Arena* arena) {
- const upb_MiniTable* map_entry_mini_table =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ // TODO: use a variant of upb_MiniTable_GetSubMessageTable() here.
+ const upb_MiniTable* map_entry_mini_table = upb_MiniTableSub_Message(
+ mini_table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)]);
UPB_ASSERT(map_entry_mini_table);
UPB_ASSERT(map_entry_mini_table);
- UPB_ASSERT(map_entry_mini_table->field_count == 2);
- UPB_ASSERT(upb_FieldMode_Get(field) == kUpb_FieldMode_Map);
+ UPB_ASSERT(map_entry_mini_table->UPB_PRIVATE(field_count) == 2);
+ UPB_ASSERT(upb_MiniTableField_IsMap(field));
// Find all unknowns with given field number and parse.
upb_FindUnknownRet unknown;
while (1) {
- unknown = upb_MiniTable_FindUnknown(
- msg, field->number, upb_DecodeOptions_GetMaxDepth(decode_options));
+ unknown =
+ upb_Message_FindUnknown(msg, upb_MiniTableField_Number(field),
+ upb_DecodeOptions_GetMaxDepth(decode_options));
if (unknown.status != kUpb_FindUnknown_Ok) break;
upb_UnknownToMessageRet ret = upb_MiniTable_ParseUnknownMessage(
unknown.ptr, unknown.len, map_entry_mini_table,
@@ -342,13 +347,9 @@
upb_Map* map = upb_Message_GetOrCreateMutableMap(msg, map_entry_mini_table,
field, arena);
upb_Message* map_entry_message = ret.message;
- upb_MapInsertStatus insert_status = upb_Message_InsertMapEntry(
- map, mini_table, field, map_entry_message, arena);
- if (insert_status == kUpb_MapInsertStatus_OutOfMemory) {
- return kUpb_UnknownToMessage_OutOfMemory;
- }
- UPB_ASSUME(insert_status == kUpb_MapInsertStatus_Inserted ||
- insert_status == kUpb_MapInsertStatus_Replaced);
+ bool insert_success = upb_Message_SetMapEntry(map, mini_table, field,
+ map_entry_message, arena);
+ if (!insert_success) return kUpb_UnknownToMessage_OutOfMemory;
upb_Message_DeleteUnknown(msg, unknown.ptr, unknown.len);
}
return kUpb_UnknownToMessage_Ok;
diff --git a/upb/message/promote.h b/upb/message/promote.h
index fb3823e..0a43f6b 100644
--- a/upb/message/promote.h
+++ b/upb/message/promote.h
@@ -40,8 +40,7 @@
// expand support to include non-message types.
upb_GetExtension_Status upb_MiniTable_GetOrPromoteExtension(
upb_Message* msg, const upb_MiniTableExtension* ext_table,
- int decode_options, upb_Arena* arena,
- const upb_Message_Extension** extension);
+ int decode_options, upb_Arena* arena, const upb_Extension** extension);
typedef enum {
kUpb_FindUnknown_Ok,
@@ -59,9 +58,9 @@
// Finds first occurrence of unknown data by tag id in message.
// A depth_limit of zero means to just use the upb default depth limit.
-upb_FindUnknownRet upb_MiniTable_FindUnknown(const upb_Message* msg,
- uint32_t field_number,
- int depth_limit);
+upb_FindUnknownRet upb_Message_FindUnknown(const upb_Message* msg,
+ uint32_t field_number,
+ int depth_limit);
typedef enum {
kUpb_UnknownToMessage_Ok,
diff --git a/upb/message/promote_test.cc b/upb/message/promote_test.cc
index 0d279d4..5959365 100644
--- a/upb/message/promote_test.cc
+++ b/upb/message/promote_test.cc
@@ -23,6 +23,7 @@
#include "upb/base/descriptor_constants.h"
#include "upb/base/status.h"
#include "upb/base/string_view.h"
+#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/mem/arena.hpp"
#include "upb/message/accessors.h"
@@ -37,17 +38,14 @@
#include "upb/mini_descriptor/internal/encode.hpp"
#include "upb/mini_descriptor/internal/modifiers.h"
#include "upb/mini_descriptor/link.h"
+#include "upb/mini_table/extension.h"
#include "upb/mini_table/field.h"
#include "upb/mini_table/message.h"
-#include "upb/mini_table/sub.h"
#include "upb/test/test.upb.h"
#include "upb/test/test.upb_minitable.h"
#include "upb/wire/decode.h"
#include "upb/wire/encode.h"
-// Must be last
-#include "upb/port/def.inc"
-
namespace {
TEST(GeneratedCode, FindUnknown) {
@@ -71,12 +69,16 @@
upb_test_EmptyMessageWithExtensions_parse(serialized, serialized_size,
arena);
- upb_FindUnknownRet result = upb_MiniTable_FindUnknown(
- base_msg, upb_test_ModelExtension1_model_ext_ext.field.number, 0);
+ upb_FindUnknownRet result = upb_Message_FindUnknown(
+ UPB_UPCAST(base_msg),
+ upb_MiniTableExtension_Number(&upb_test_ModelExtension1_model_ext_ext),
+ 0);
EXPECT_EQ(kUpb_FindUnknown_Ok, result.status);
- result = upb_MiniTable_FindUnknown(
- base_msg, upb_test_ModelExtension2_model_ext_ext.field.number, 0);
+ result = upb_Message_FindUnknown(
+ UPB_UPCAST(base_msg),
+ upb_MiniTableExtension_Number(&upb_test_ModelExtension2_model_ext_ext),
+ 0);
EXPECT_EQ(kUpb_FindUnknown_NotPresent, result.status);
upb_Arena_Free(arena);
@@ -121,14 +123,15 @@
char* serialized =
upb_test_ModelWithExtensions_serialize(msg, arena, &serialized_size);
- const upb_Message_Extension* upb_ext2;
+ const upb_Extension* upb_ext2;
upb_test_ModelExtension1* ext1;
upb_test_ModelExtension2* ext2;
upb_GetExtension_Status promote_status;
// Test known GetExtension 1
promote_status = upb_MiniTable_GetOrPromoteExtension(
- msg, &upb_test_ModelExtension1_model_ext_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(msg), &upb_test_ModelExtension1_model_ext_ext, 0, arena,
+ &upb_ext2);
ext1 = (upb_test_ModelExtension1*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_TRUE(upb_StringView_IsEqual(upb_StringView_FromString("World"),
@@ -136,35 +139,40 @@
// Test known GetExtension 2
promote_status = upb_MiniTable_GetOrPromoteExtension(
- msg, &upb_test_ModelExtension2_model_ext_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(5, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 3
promote_status = upb_MiniTable_GetOrPromoteExtension(
- msg, &upb_test_ModelExtension2_model_ext_2_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_2_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(6, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 4
promote_status = upb_MiniTable_GetOrPromoteExtension(
- msg, &upb_test_ModelExtension2_model_ext_3_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_3_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(7, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 5
promote_status = upb_MiniTable_GetOrPromoteExtension(
- msg, &upb_test_ModelExtension2_model_ext_4_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_4_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(8, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 6
promote_status = upb_MiniTable_GetOrPromoteExtension(
- msg, &upb_test_ModelExtension2_model_ext_5_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_5_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(9, upb_test_ModelExtension2_i(ext2));
@@ -175,13 +183,14 @@
// Get unknown extension bytes before promotion.
size_t start_len;
- upb_Message_GetUnknown(base_msg, &start_len);
+ upb_Message_GetUnknown(UPB_UPCAST(base_msg), &start_len);
EXPECT_GT(start_len, 0);
- EXPECT_EQ(0, upb_Message_ExtensionCount(base_msg));
+ EXPECT_EQ(0, upb_Message_ExtensionCount(UPB_UPCAST(base_msg)));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
- base_msg, &upb_test_ModelExtension1_model_ext_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(base_msg), &upb_test_ModelExtension1_model_ext_ext, 0, arena,
+ &upb_ext2);
ext1 = (upb_test_ModelExtension1*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_TRUE(upb_StringView_IsEqual(upb_StringView_FromString("World"),
@@ -189,43 +198,48 @@
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
- base_msg, &upb_test_ModelExtension2_model_ext_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(5, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
- base_msg, &upb_test_ModelExtension2_model_ext_2_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_2_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(6, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
- base_msg, &upb_test_ModelExtension2_model_ext_3_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_3_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(7, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
- base_msg, &upb_test_ModelExtension2_model_ext_4_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_4_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(8, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
- base_msg, &upb_test_ModelExtension2_model_ext_5_ext, 0, arena, &upb_ext2);
+ UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_5_ext, 0, arena,
+ &upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(9, upb_test_ModelExtension2_i(ext2));
size_t end_len;
- upb_Message_GetUnknown(base_msg, &end_len);
+ upb_Message_GetUnknown(UPB_UPCAST(base_msg), &end_len);
EXPECT_LT(end_len, start_len);
- EXPECT_EQ(6, upb_Message_ExtensionCount(base_msg));
+ EXPECT_EQ(6, upb_Message_ExtensionCount(UPB_UPCAST(base_msg)));
upb_Arena_Free(arena);
}
@@ -376,7 +390,8 @@
arena.ptr(), (upb_Message**)&promoted);
EXPECT_EQ(promote_result, kUpb_DecodeStatus_Ok);
EXPECT_NE(nullptr, promoted);
- EXPECT_EQ(promoted, upb_Message_GetMessage(msg, submsg_field, nullptr));
+ EXPECT_EQ(UPB_UPCAST(promoted),
+ upb_Message_GetMessage(msg, submsg_field, nullptr));
EXPECT_EQ(upb_test_ModelWithExtensions_random_int32(promoted), 12);
}
@@ -424,7 +439,8 @@
arena.ptr(), (upb_Message**)&promoted);
EXPECT_EQ(promote_result, kUpb_DecodeStatus_Ok);
EXPECT_NE(nullptr, promoted);
- EXPECT_EQ(promoted, upb_Message_GetMessage(msg, submsg_field, nullptr));
+ EXPECT_EQ(UPB_UPCAST(promoted),
+ upb_Message_GetMessage(msg, submsg_field, nullptr));
// The repeated field should have two entries for the two parses.
size_t repeated_size;
@@ -477,7 +493,8 @@
nullptr);
EXPECT_NE(nullptr, promoted);
- EXPECT_EQ(promoted, upb_Message_GetMessage(msg, submsg_field, nullptr));
+ EXPECT_EQ(UPB_UPCAST(promoted),
+ upb_Message_GetMessage(msg, submsg_field, nullptr));
// The repeated field should have two entries for the two parses.
size_t repeated_size;
@@ -623,15 +640,15 @@
upb_MessageValue val;
key.int32_val = 111;
EXPECT_TRUE(upb_Map_Get(map, key, &val));
- EXPECT_EQ(123,
- upb_test_ModelWithExtensions_random_int32(
- static_cast<const upb_test_ModelWithExtensions*>(val.msg_val)));
+ EXPECT_EQ(123, upb_test_ModelWithExtensions_random_int32(
+ static_cast<const upb_test_ModelWithExtensions*>(
+ (void*)(val.msg_val))));
key.int32_val = 222;
EXPECT_TRUE(upb_Map_Get(map, key, &val));
- EXPECT_EQ(456,
- upb_test_ModelWithExtensions_random_int32(
- static_cast<const upb_test_ModelWithExtensions*>(val.msg_val)));
+ EXPECT_EQ(456, upb_test_ModelWithExtensions_random_int32(
+ static_cast<const upb_test_ModelWithExtensions*>(
+ (void*)(val.msg_val))));
}
} // namespace
@@ -706,21 +723,22 @@
int32_t val = upb_Message_GetInt32(
msg, upb_MiniTable_FindFieldByNumber(mini_table, 4), 0);
EXPECT_EQ(val, 11);
- upb_FindUnknownRet unknown = upb_MiniTable_FindUnknown(msg, 5, 0);
+ upb_FindUnknownRet unknown = upb_Message_FindUnknown(msg, 5, 0);
EXPECT_EQ(unknown.status, kUpb_FindUnknown_Ok);
// Update mini table and promote unknown to a message.
EXPECT_TRUE(upb_MiniTable_SetSubMessage(
- mini_table, (upb_MiniTableField*)&mini_table->fields[1],
+ mini_table,
+ (upb_MiniTableField*)upb_MiniTable_GetFieldByIndex(mini_table, 1),
&upb_0test__ModelWithExtensions_msg_init));
const int decode_options =
upb_DecodeOptions_MaxDepth(0); // UPB_DECODE_ALIAS disabled.
upb_UnknownToMessageRet promote_result =
upb_MiniTable_PromoteUnknownToMessage(
- msg, mini_table, &mini_table->fields[1],
+ msg, mini_table, upb_MiniTable_GetFieldByIndex(mini_table, 1),
&upb_0test__ModelWithExtensions_msg_init, decode_options, arena);
EXPECT_EQ(promote_result.status, kUpb_UnknownToMessage_Ok);
- const upb_Message* promoted_message =
- upb_Message_GetMessage(msg, &mini_table->fields[1], nullptr);
+ const upb_Message* promoted_message = upb_Message_GetMessage(
+ msg, upb_MiniTable_GetFieldByIndex(mini_table, 1), nullptr);
EXPECT_EQ(upb_test_ModelWithExtensions_random_int32(
(upb_test_ModelWithExtensions*)promoted_message),
12);
@@ -754,22 +772,24 @@
EXPECT_EQ(val, 123);
// Check that we have repeated field data in an unknown.
- upb_FindUnknownRet unknown = upb_MiniTable_FindUnknown(msg, 6, 0);
+ upb_FindUnknownRet unknown = upb_Message_FindUnknown(msg, 6, 0);
EXPECT_EQ(unknown.status, kUpb_FindUnknown_Ok);
// Update mini table and promote unknown to a message.
EXPECT_TRUE(upb_MiniTable_SetSubMessage(
- mini_table, (upb_MiniTableField*)&mini_table->fields[2],
+ mini_table,
+ (upb_MiniTableField*)upb_MiniTable_GetFieldByIndex(mini_table, 2),
&upb_0test__ModelWithExtensions_msg_init));
const int decode_options =
upb_DecodeOptions_MaxDepth(0); // UPB_DECODE_ALIAS disabled.
upb_UnknownToMessage_Status promote_result =
upb_MiniTable_PromoteUnknownToMessageArray(
- msg, &mini_table->fields[2], &upb_0test__ModelWithExtensions_msg_init,
- decode_options, arena);
+ msg, upb_MiniTable_GetFieldByIndex(mini_table, 2),
+ &upb_0test__ModelWithExtensions_msg_init, decode_options, arena);
EXPECT_EQ(promote_result, kUpb_UnknownToMessage_Ok);
- upb_Array* array = upb_Message_GetMutableArray(msg, &mini_table->fields[2]);
+ upb_Array* array = upb_Message_GetMutableArray(
+ msg, upb_MiniTable_GetFieldByIndex(mini_table, 2));
const upb_Message* promoted_message = upb_Array_Get(array, 0).msg_val;
EXPECT_EQ(upb_test_ModelWithExtensions_random_int32(
(upb_test_ModelWithExtensions*)promoted_message),
@@ -812,20 +832,23 @@
EXPECT_EQ(val, 123);
// Check that we have map data in an unknown.
- upb_FindUnknownRet unknown = upb_MiniTable_FindUnknown(msg, 3, 0);
+ upb_FindUnknownRet unknown = upb_Message_FindUnknown(msg, 3, 0);
EXPECT_EQ(unknown.status, kUpb_FindUnknown_Ok);
// Update mini table and promote unknown to a message.
EXPECT_TRUE(upb_MiniTable_SetSubMessage(
- mini_table, (upb_MiniTableField*)&mini_table->fields[1],
+ mini_table,
+ (upb_MiniTableField*)upb_MiniTable_GetFieldByIndex(mini_table, 1),
map_entry_mini_table));
upb_UnknownToMessage_Status promote_result =
- upb_MiniTable_PromoteUnknownToMap(msg, mini_table, &mini_table->fields[1],
- decode_options, arena);
+ upb_MiniTable_PromoteUnknownToMap(
+ msg, mini_table, upb_MiniTable_GetFieldByIndex(mini_table, 1),
+ decode_options, arena);
EXPECT_EQ(promote_result, kUpb_UnknownToMessage_Ok);
upb_Map* map = upb_Message_GetOrCreateMutableMap(
- msg, map_entry_mini_table, &mini_table->fields[1], arena);
+ msg, map_entry_mini_table, upb_MiniTable_GetFieldByIndex(mini_table, 1),
+ arena);
EXPECT_NE(map, nullptr);
// Lookup in map.
upb_MessageValue key;
diff --git a/upb/message/tagged_ptr.h b/upb/message/tagged_ptr.h
index 2596cd7..f2e1bfd 100644
--- a/upb/message/tagged_ptr.h
+++ b/upb/message/tagged_ptr.h
@@ -5,59 +5,42 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
-#ifndef UPB_MINI_TABLE_TYPES_H_
-#define UPB_MINI_TABLE_TYPES_H_
+#ifndef UPB_MINI_TABLE_TAGGED_PTR_H_
+#define UPB_MINI_TABLE_TAGGED_PTR_H_
#include <stdint.h>
-#include "upb/message/types.h" // IWYU pragma: export
+#include "upb/message/internal/tagged_ptr.h"
+#include "upb/message/message.h"
// Must be last.
#include "upb/port/def.inc"
+// When a upb_Message* is stored in a message, array, or map, it is stored in a
+// tagged form. If the tag bit is set, the referenced upb_Message is of type
+// _kUpb_MiniTable_Empty (a sentinel message type with no fields) instead of
+// that field's true message type. This forms the basis of what we call
+// "dynamic tree shaking."
+//
+// See the documentation for kUpb_DecodeOption_ExperimentalAllowUnlinked for
+// more information.
+
+typedef uintptr_t upb_TaggedMessagePtr;
+
#ifdef __cplusplus
extern "C" {
#endif
-// When a upb_Message* is stored in a message, array, or map, it is stored in a
-// tagged form. If the tag bit is set, the referenced upb_Message is of type
-// _kUpb_MiniTable_Empty (a sentinel message type with no fields) instead of
-// that field's true message type. This forms the basis of what we call
-// "dynamic tree shaking."
-//
-// See the documentation for kUpb_DecodeOption_ExperimentalAllowUnlinked for
-// more information.
-typedef uintptr_t upb_TaggedMessagePtr;
-
-// Internal-only because empty messages cannot be created by the user.
-UPB_INLINE upb_TaggedMessagePtr _upb_TaggedMessagePtr_Pack(upb_Message* ptr,
- bool empty) {
- UPB_ASSERT(((uintptr_t)ptr & 1) == 0);
- return (uintptr_t)ptr | (empty ? 1 : 0);
-}
-
// Users who enable unlinked sub-messages must use this to test whether a
-// message is empty before accessing it. If a message is empty, it must be
+// message is empty before accessing it. If a message is empty, it must be
// first promoted using the interfaces in message/promote.h.
UPB_INLINE bool upb_TaggedMessagePtr_IsEmpty(upb_TaggedMessagePtr ptr) {
- return ptr & 1;
-}
-
-UPB_INLINE upb_Message* _upb_TaggedMessagePtr_GetMessage(
- upb_TaggedMessagePtr ptr) {
- return (upb_Message*)(ptr & ~(uintptr_t)1);
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_IsEmpty)(ptr);
}
UPB_INLINE upb_Message* upb_TaggedMessagePtr_GetNonEmptyMessage(
upb_TaggedMessagePtr ptr) {
- UPB_ASSERT(!upb_TaggedMessagePtr_IsEmpty(ptr));
- return _upb_TaggedMessagePtr_GetMessage(ptr);
-}
-
-UPB_INLINE upb_Message* _upb_TaggedMessagePtr_GetEmptyMessage(
- upb_TaggedMessagePtr ptr) {
- UPB_ASSERT(upb_TaggedMessagePtr_IsEmpty(ptr));
- return _upb_TaggedMessagePtr_GetMessage(ptr);
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetNonEmptyMessage)(ptr);
}
#ifdef __cplusplus
@@ -66,4 +49,4 @@
#include "upb/port/undef.inc"
-#endif /* UPB_MINI_TABLE_TYPES_H_ */
+#endif /* UPB_MINI_TABLE_TAGGED_PTR_H_ */
diff --git a/upb/message/test.cc b/upb/message/test.cc
index 97ebef0..2bb46bd 100644
--- a/upb/message/test.cc
+++ b/upb/message/test.cc
@@ -16,6 +16,7 @@
#include "google/protobuf/test_messages_proto3.upb.h"
#include "upb/base/status.hpp"
#include "upb/base/string_view.h"
+#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/mem/arena.h"
@@ -72,8 +73,9 @@
}
)json";
upb::Status status;
- EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), ext_msg, m.ptr(),
- defpool.ptr(), 0, arena.ptr(), status.ptr()))
+ EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(ext_msg),
+ m.ptr(), defpool.ptr(), 0, arena.ptr(),
+ status.ptr()))
<< status.error_message();
VerifyMessage(ext_msg);
@@ -91,14 +93,14 @@
VerifyMessage(ext_msg2);
// Test round-trip through JSON format.
- size_t json_size = upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, nullptr,
- 0, status.ptr());
+ size_t json_size = upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(),
+ 0, nullptr, 0, status.ptr());
char* json_buf =
static_cast<char*>(upb_Arena_Malloc(arena.ptr(), json_size + 1));
- upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, json_buf, json_size + 1,
- status.ptr());
+ upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(), 0, json_buf,
+ json_size + 1, status.ptr());
upb_test_TestExtensions* ext_msg3 = upb_test_TestExtensions_new(arena.ptr());
- EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, ext_msg3, m.ptr(),
+ EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, UPB_UPCAST(ext_msg3), m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
<< status.error_message();
VerifyMessage(ext_msg3);
@@ -132,8 +134,9 @@
}
)json";
upb::Status status;
- EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), ext_msg, m.ptr(),
- defpool.ptr(), 0, arena.ptr(), status.ptr()))
+ EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(ext_msg),
+ m.ptr(), defpool.ptr(), 0, arena.ptr(),
+ status.ptr()))
<< status.error_message();
VerifyMessageSet(ext_msg);
@@ -151,14 +154,14 @@
VerifyMessageSet(ext_msg2);
// Test round-trip through JSON format.
- size_t json_size = upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, nullptr,
- 0, status.ptr());
+ size_t json_size = upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(),
+ 0, nullptr, 0, status.ptr());
char* json_buf =
static_cast<char*>(upb_Arena_Malloc(arena.ptr(), json_size + 1));
- upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, json_buf, json_size + 1,
- status.ptr());
+ upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(), 0, json_buf,
+ json_size + 1, status.ptr());
upb_test_TestMessageSet* ext_msg3 = upb_test_TestMessageSet_new(arena.ptr());
- EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, ext_msg3, m.ptr(),
+ EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, UPB_UPCAST(ext_msg3), m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
<< status.error_message();
VerifyMessageSet(ext_msg3);
@@ -311,10 +314,10 @@
EXPECT_NE(nullptr, test_msg);
// Fails, because required fields are missing.
- EXPECT_EQ(
- kUpb_DecodeStatus_MissingRequired,
- upb_Decode(nullptr, 0, test_msg, &upb_0test__TestRequiredFields_msg_init,
- nullptr, kUpb_DecodeOption_CheckRequired, arena.ptr()));
+ EXPECT_EQ(kUpb_DecodeStatus_MissingRequired,
+ upb_Decode(nullptr, 0, UPB_UPCAST(test_msg),
+ &upb_0test__TestRequiredFields_msg_init, nullptr,
+ kUpb_DecodeOption_CheckRequired, arena.ptr()));
upb_test_TestRequiredFields_set_required_int32(test_msg, 1);
size_t size;
@@ -326,7 +329,7 @@
// Fails, but the code path is slightly different because the serialized
// payload is not empty.
EXPECT_EQ(kUpb_DecodeStatus_MissingRequired,
- upb_Decode(serialized, size, test_msg,
+ upb_Decode(serialized, size, UPB_UPCAST(test_msg),
&upb_0test__TestRequiredFields_msg_init, nullptr,
kUpb_DecodeOption_CheckRequired, arena.ptr()));
@@ -336,10 +339,10 @@
upb_test_TestRequiredFields_set_required_message(test_msg, empty_msg);
// Succeeds, because required fields are present (though not in the input).
- EXPECT_EQ(
- kUpb_DecodeStatus_Ok,
- upb_Decode(nullptr, 0, test_msg, &upb_0test__TestRequiredFields_msg_init,
- nullptr, kUpb_DecodeOption_CheckRequired, arena.ptr()));
+ EXPECT_EQ(kUpb_DecodeStatus_Ok,
+ upb_Decode(nullptr, 0, UPB_UPCAST(test_msg),
+ &upb_0test__TestRequiredFields_msg_init, nullptr,
+ kUpb_DecodeOption_CheckRequired, arena.ptr()));
// Serialize a complete payload.
serialized =
@@ -356,7 +359,7 @@
upb_test_TestRequiredFields_set_optional_message(
test_msg2, upb_test_TestRequiredFields_new(arena.ptr()));
EXPECT_EQ(kUpb_DecodeStatus_Ok,
- upb_Decode(serialized, size, test_msg2,
+ upb_Decode(serialized, size, UPB_UPCAST(test_msg2),
&upb_0test__TestRequiredFields_msg_init, nullptr,
kUpb_DecodeOption_CheckRequired, arena.ptr()));
}
@@ -450,7 +453,7 @@
for (int i = 1; i <= 61; i++) {
upb::FieldDefPtr f = m.FindFieldByNumber(i);
ASSERT_TRUE(f);
- upb_Message_SetFieldByDef(test_msg, f.ptr(), val, arena.ptr());
+ upb_Message_SetFieldByDef(UPB_UPCAST(test_msg), f.ptr(), val, arena.ptr());
}
// Fails, field 63 still isn't set.
@@ -461,7 +464,7 @@
// Succeeds, all required fields are set.
upb::FieldDefPtr f = m.FindFieldByNumber(62);
ASSERT_TRUE(f);
- upb_Message_SetFieldByDef(test_msg, f.ptr(), val, arena.ptr());
+ upb_Message_SetFieldByDef(UPB_UPCAST(test_msg), f.ptr(), val, arena.ptr());
serialized = upb_test_TestMaxRequiredFields_serialize_ex(
test_msg, kUpb_EncodeOption_CheckRequired, arena.ptr(), &size);
ASSERT_TRUE(serialized != nullptr);
diff --git a/upb/message/types.h b/upb/message/types.h
deleted file mode 100644
index 3059e68..0000000
--- a/upb/message/types.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2023 Google LLC. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-#ifndef UPB_MESSAGE_TYPES_H_
-#define UPB_MESSAGE_TYPES_H_
-
-// This typedef is in a leaf header to resolve a circular dependency between
-// messages and mini tables.
-typedef void upb_Message;
-
-#endif /* UPB_MESSAGE_TYPES_H_ */
diff --git a/upb/message/utf8_test.cc b/upb/message/utf8_test.cc
index cba8953..b900a95 100644
--- a/upb/message/utf8_test.cc
+++ b/upb/message/utf8_test.cc
@@ -1,37 +1,15 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
#include <stdlib.h>
#include <gtest/gtest.h>
#include "upb/base/string_view.h"
+#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/mem/arena.hpp"
#include "upb/message/utf8_test.upb.h"
@@ -69,9 +47,9 @@
upb_test_TestUtf8Proto3String* msg =
upb_test_TestUtf8Proto3String_new(arena.ptr());
- upb_DecodeStatus status =
- upb_Decode(data, size, msg, &upb_0test__TestUtf8Proto3String_msg_init,
- nullptr, 0, arena.ptr());
+ upb_DecodeStatus status = upb_Decode(
+ data, size, UPB_UPCAST(msg), &upb_0test__TestUtf8Proto3String_msg_init,
+ nullptr, 0, arena.ptr());
// Parse fails, because proto3 string fields validate UTF-8.
ASSERT_EQ(kUpb_DecodeStatus_BadUtf8, status);
@@ -85,9 +63,10 @@
upb_test_TestUtf8RepeatedProto3String* msg =
upb_test_TestUtf8RepeatedProto3String_new(arena.ptr());
- upb_DecodeStatus status = upb_Decode(
- data, size, msg, &upb_0test__TestUtf8RepeatedProto3String_msg_init,
- nullptr, 0, arena.ptr());
+ upb_DecodeStatus status =
+ upb_Decode(data, size, UPB_UPCAST(msg),
+ &upb_0test__TestUtf8RepeatedProto3String_msg_init, nullptr, 0,
+ arena.ptr());
// Parse fails, because proto3 string fields validate UTF-8.
ASSERT_EQ(kUpb_DecodeStatus_BadUtf8, status);
@@ -103,8 +82,8 @@
// upb_test_TestUtf8Proto3StringMixed_new(arena.ptr());
//
// upb_DecodeStatus status = upb_Decode(
-// data, size, msg, &upb_0test__TestUtf8Proto3StringMixed_msg_init, nullptr,
-// 0, arena.ptr());
+// data, size, UPB_UPCAST(msg),
+// &upb_0test__TestUtf8Proto3StringMixed_msg_init, nullptr, 0, arena.ptr());
//
// // Parse fails, because proto3 string fields validate UTF-8.
// ASSERT_EQ(kUpb_DecodeStatus_BadUtf8, status);
diff --git a/upb/message/utf8_test.proto b/upb/message/utf8_test.proto
index 9a3bd3a..4070ac7 100644
--- a/upb/message/utf8_test.proto
+++ b/upb/message/utf8_test.proto
@@ -1,32 +1,9 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
-// https://developers.google.com/protocol-buffers/
//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google LLC nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
syntax = "proto3";
diff --git a/upb/message/value.h b/upb/message/value.h
index 99df025..775622c 100644
--- a/upb/message/value.h
+++ b/upb/message/value.h
@@ -14,8 +14,10 @@
#include <stdint.h>
#include "upb/base/string_view.h"
-#include "upb/message/tagged_ptr.h"
-#include "upb/message/types.h"
+#include "upb/message/internal/array.h"
+#include "upb/message/internal/map.h"
+#include "upb/message/internal/message.h"
+#include "upb/message/internal/tagged_ptr.h"
typedef union {
bool bool_val;
@@ -27,7 +29,7 @@
uint64_t uint64_val;
const struct upb_Array* array_val;
const struct upb_Map* map_val;
- const upb_Message* msg_val;
+ const struct upb_Message* msg_val;
upb_StringView str_val;
// EXPERIMENTAL: A tagged upb_Message*. Users must use this instead of
@@ -40,7 +42,7 @@
typedef union {
struct upb_Array* array;
struct upb_Map* map;
- upb_Message* msg;
+ struct upb_Message* msg;
} upb_MutableMessageValue;
#endif /* UPB_MESSAGE_VALUE_H_ */
diff --git a/upb/mini_descriptor/BUILD b/upb/mini_descriptor/BUILD
index d642791..a397e90 100644
--- a/upb/mini_descriptor/BUILD
+++ b/upb/mini_descriptor/BUILD
@@ -23,8 +23,9 @@
"//upb:base",
"//upb:mem",
"//upb:mini_table",
- "//upb:mini_table_internal",
"//upb:port",
+ "//upb/base:internal",
+ "//upb/mini_table:internal",
],
)
@@ -46,8 +47,8 @@
visibility = ["//visibility:public"],
deps = [
"//upb:base",
- "//upb:base_internal",
"//upb:port",
+ "//upb/base:internal",
],
)
@@ -59,13 +60,16 @@
":internal",
":mini_descriptor",
"//:protobuf",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
- "//upb:message_accessors_internal",
+ "//upb:message",
"//upb:mini_table",
+ "//upb:port",
"//upb:wire",
+ "//upb/message:internal",
"@com_google_absl//absl/container:flat_hash_set",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -79,8 +83,20 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/mini_descriptor/build_enum.c b/upb/mini_descriptor/build_enum.c
index 738c591..53f3595 100644
--- a/upb/mini_descriptor/build_enum.c
+++ b/upb/mini_descriptor/build_enum.c
@@ -7,8 +7,15 @@
#include "upb/mini_descriptor/build_enum.h"
+#include <stddef.h>
+#include <stdint.h>
+
+#include "upb/base/status.h"
+#include "upb/mem/arena.h"
+#include "upb/mini_descriptor/internal/base92.h"
#include "upb/mini_descriptor/internal/decoder.h"
#include "upb/mini_descriptor/internal/wire_constants.h"
+#include "upb/mini_table/enum.h"
#include "upb/mini_table/internal/enum.h"
// Must be last.
@@ -36,26 +43,27 @@
d->enum_table = upb_Arena_Realloc(d->arena, d->enum_table, old_sz, new_sz);
upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
}
- d->enum_table->data[d->enum_data_count++] = val;
+ d->enum_table->UPB_PRIVATE(data)[d->enum_data_count++] = val;
return d->enum_table;
}
static void upb_MiniTableEnum_BuildValue(upb_MdEnumDecoder* d, uint32_t val) {
upb_MiniTableEnum* table = d->enum_table;
d->enum_value_count++;
- if (table->value_count || (val > 512 && d->enum_value_count < val / 32)) {
- if (table->value_count == 0) {
- assert(d->enum_data_count == table->mask_limit / 32);
+ if (table->UPB_PRIVATE(value_count) ||
+ (val > 512 && d->enum_value_count < val / 32)) {
+ if (table->UPB_PRIVATE(value_count) == 0) {
+ UPB_ASSERT(d->enum_data_count == table->UPB_PRIVATE(mask_limit) / 32);
}
table = _upb_MiniTable_AddEnumDataMember(d, val);
- table->value_count++;
+ table->UPB_PRIVATE(value_count)++;
} else {
uint32_t new_mask_limit = ((val / 32) + 1) * 32;
- while (table->mask_limit < new_mask_limit) {
+ while (table->UPB_PRIVATE(mask_limit) < new_mask_limit) {
table = _upb_MiniTable_AddEnumDataMember(d, 0);
- table->mask_limit += 32;
+ table->UPB_PRIVATE(mask_limit) += 32;
}
- table->data[val / 32] |= 1ULL << (val % 32);
+ table->UPB_PRIVATE(data)[val / 32] |= 1ULL << (val % 32);
}
}
@@ -73,11 +81,11 @@
upb_MdDecoder_CheckOutOfMemory(&d->base, d->enum_table);
// Guarantee at least 64 bits of mask without checking mask size.
- d->enum_table->mask_limit = 64;
+ d->enum_table->UPB_PRIVATE(mask_limit) = 64;
d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
d->enum_table = _upb_MiniTable_AddEnumDataMember(d, 0);
- d->enum_table->value_count = 0;
+ d->enum_table->UPB_PRIVATE(value_count) = 0;
const char* ptr = data;
uint32_t base = 0;
@@ -105,7 +113,8 @@
}
static upb_MiniTableEnum* upb_MtDecoder_BuildMiniTableEnum(
- upb_MdEnumDecoder* const decoder, const char* const data, size_t const len) {
+ upb_MdEnumDecoder* const decoder, const char* const data,
+ size_t const len) {
if (UPB_SETJMP(decoder->base.err) != 0) return NULL;
return upb_MtDecoder_DoBuildMiniTableEnum(decoder, data, len);
}
diff --git a/upb/mini_descriptor/decode.c b/upb/mini_descriptor/decode.c
index 6575e92..dfd0413 100644
--- a/upb/mini_descriptor/decode.c
+++ b/upb/mini_descriptor/decode.c
@@ -8,16 +8,24 @@
#include "upb/mini_descriptor/decode.h"
#include <inttypes.h>
+#include <stdint.h>
#include <stdlib.h>
#include "upb/base/descriptor_constants.h"
+#include "upb/base/internal/log2.h"
+#include "upb/base/status.h"
#include "upb/base/string_view.h"
#include "upb/mem/arena.h"
#include "upb/mini_descriptor/internal/base92.h"
#include "upb/mini_descriptor/internal/decoder.h"
#include "upb/mini_descriptor/internal/modifiers.h"
#include "upb/mini_descriptor/internal/wire_constants.h"
+#include "upb/mini_table/extension.h"
+#include "upb/mini_table/field.h"
#include "upb/mini_table/internal/field.h"
+#include "upb/mini_table/internal/message.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
// Must be last.
#include "upb/port/def.inc"
@@ -69,7 +77,7 @@
};
static bool upb_MtDecoder_FieldIsPackable(upb_MiniTableField* field) {
- return (field->mode & kUpb_FieldMode_Array) &&
+ return (field->UPB_PRIVATE(mode) & kUpb_FieldMode_Array) &&
upb_FieldType_IsPackable(field->UPB_PRIVATE(descriptortype));
}
@@ -86,18 +94,18 @@
if (is_proto3_enum) {
UPB_ASSERT(type == kUpb_FieldType_Enum);
type = kUpb_FieldType_Int32;
- field->mode |= kUpb_LabelFlags_IsAlternate;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsAlternate;
} else if (type == kUpb_FieldType_String &&
!(msg_modifiers & kUpb_MessageModifier_ValidateUtf8)) {
type = kUpb_FieldType_Bytes;
- field->mode |= kUpb_LabelFlags_IsAlternate;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsAlternate;
}
field->UPB_PRIVATE(descriptortype) = type;
if (upb_MtDecoder_FieldIsPackable(field) &&
(msg_modifiers & kUpb_MessageModifier_DefaultIsPacked)) {
- field->mode |= kUpb_LabelFlags_IsPacked;
+ field->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsPacked;
}
if (type == kUpb_FieldType_Message || type == kUpb_FieldType_Group) {
@@ -164,18 +172,19 @@
int8_t type = _upb_FromBase92(ch);
if (ch >= _upb_ToBase92(kUpb_EncodedType_RepeatedBase)) {
type -= kUpb_EncodedType_RepeatedBase;
- field->mode = kUpb_FieldMode_Array;
- field->mode |= pointer_rep << kUpb_FieldRep_Shift;
- field->offset = kNoPresence;
+ field->UPB_PRIVATE(mode) = kUpb_FieldMode_Array;
+ field->UPB_PRIVATE(mode) |= pointer_rep << kUpb_FieldRep_Shift;
+ field->UPB_PRIVATE(offset) = kNoPresence;
} else {
- field->mode = kUpb_FieldMode_Scalar;
- field->offset = kHasbitPresence;
+ field->UPB_PRIVATE(mode) = kUpb_FieldMode_Scalar;
+ field->UPB_PRIVATE(offset) = kHasbitPresence;
if (type == kUpb_EncodedType_Group || type == kUpb_EncodedType_Message) {
- field->mode |= pointer_rep << kUpb_FieldRep_Shift;
+ field->UPB_PRIVATE(mode) |= pointer_rep << kUpb_FieldRep_Shift;
} else if ((unsigned long)type >= sizeof(kUpb_EncodedToFieldRep)) {
upb_MdDecoder_ErrorJmp(&d->base, "Invalid field type: %d", (int)type);
} else {
- field->mode |= kUpb_EncodedToFieldRep[type] << kUpb_FieldRep_Shift;
+ field->UPB_PRIVATE(mode) |= kUpb_EncodedToFieldRep[type]
+ << kUpb_FieldRep_Shift;
}
}
if ((unsigned long)type >= sizeof(kUpb_EncodedToType)) {
@@ -193,42 +202,43 @@
if (!upb_MtDecoder_FieldIsPackable(field)) {
upb_MdDecoder_ErrorJmp(&d->base,
"Cannot flip packed on unpackable field %" PRIu32,
- field->number);
+ upb_MiniTableField_Number(field));
}
- field->mode ^= kUpb_LabelFlags_IsPacked;
+ field->UPB_PRIVATE(mode) ^= kUpb_LabelFlags_IsPacked;
}
if (field_modifiers & kUpb_EncodedFieldModifier_FlipValidateUtf8) {
if (field->UPB_PRIVATE(descriptortype) != kUpb_FieldType_Bytes ||
- !(field->mode & kUpb_LabelFlags_IsAlternate)) {
- upb_MdDecoder_ErrorJmp(
- &d->base,
- "Cannot flip ValidateUtf8 on field %" PRIu32 ", type=%d, mode=%d",
- field->number, (int)field->UPB_PRIVATE(descriptortype),
- (int)field->mode);
+ !(field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsAlternate)) {
+ upb_MdDecoder_ErrorJmp(&d->base,
+ "Cannot flip ValidateUtf8 on field %" PRIu32
+ ", type=%d, mode=%d",
+ upb_MiniTableField_Number(field),
+ (int)field->UPB_PRIVATE(descriptortype),
+ (int)field->UPB_PRIVATE(mode));
}
field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_String;
- field->mode &= ~kUpb_LabelFlags_IsAlternate;
+ field->UPB_PRIVATE(mode) &= ~kUpb_LabelFlags_IsAlternate;
}
bool singular = field_modifiers & kUpb_EncodedFieldModifier_IsProto3Singular;
bool required = field_modifiers & kUpb_EncodedFieldModifier_IsRequired;
// Validate.
- if ((singular || required) && field->offset != kHasbitPresence) {
+ if ((singular || required) && field->UPB_PRIVATE(offset) != kHasbitPresence) {
upb_MdDecoder_ErrorJmp(&d->base,
"Invalid modifier(s) for repeated field %" PRIu32,
- field->number);
+ upb_MiniTableField_Number(field));
}
if (singular && required) {
upb_MdDecoder_ErrorJmp(
&d->base, "Field %" PRIu32 " cannot be both singular and required",
- field->number);
+ upb_MiniTableField_Number(field));
}
- if (singular) field->offset = kNoPresence;
+ if (singular) field->UPB_PRIVATE(offset) = kNoPresence;
if (required) {
- field->offset = kRequiredPresence;
+ field->UPB_PRIVATE(offset) = kRequiredPresence;
}
}
@@ -315,7 +325,7 @@
" to oneof, no such field number.",
field_num);
}
- if (f->offset != kHasbitPresence) {
+ if (f->UPB_PRIVATE(offset) != kHasbitPresence) {
upb_MdDecoder_ErrorJmp(
&d->base,
"Cannot add repeated, required, or singular field %" PRIu32
@@ -324,13 +334,13 @@
}
// Oneof storage must be large enough to accommodate the largest member.
- int rep = f->mode >> kUpb_FieldRep_Shift;
+ int rep = f->UPB_PRIVATE(mode) >> kUpb_FieldRep_Shift;
if (upb_MtDecoder_SizeOfRep(rep, d->platform) >
upb_MtDecoder_SizeOfRep(item->rep, d->platform)) {
item->rep = rep;
}
// Prepend this field to the linked list.
- f->offset = item->field_index;
+ f->UPB_PRIVATE(offset) = item->field_index;
item->field_index = (f - d->fields) + kOneofBase;
return ptr;
}
@@ -381,26 +391,26 @@
static void upb_MtDecoder_AllocateSubs(upb_MtDecoder* d,
upb_SubCounts sub_counts) {
uint32_t total_count = sub_counts.submsg_count + sub_counts.subenum_count;
- size_t subs_bytes = sizeof(*d->table->subs) * total_count;
+ size_t subs_bytes = sizeof(*d->table->UPB_PRIVATE(subs)) * total_count;
upb_MiniTableSub* subs = upb_Arena_Malloc(d->arena, subs_bytes);
upb_MdDecoder_CheckOutOfMemory(&d->base, subs);
uint32_t i = 0;
for (; i < sub_counts.submsg_count; i++) {
- subs[i].submsg = &_kUpb_MiniTable_Empty;
+ subs[i].UPB_PRIVATE(submsg) = UPB_PRIVATE(_upb_MiniTable_Empty)();
}
if (sub_counts.subenum_count) {
upb_MiniTableField* f = d->fields;
- upb_MiniTableField* end_f = f + d->table->field_count;
+ upb_MiniTableField* end_f = f + d->table->UPB_PRIVATE(field_count);
for (; f < end_f; f++) {
if (f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum) {
f->UPB_PRIVATE(submsg_index) += sub_counts.submsg_count;
}
}
for (; i < sub_counts.submsg_count + sub_counts.subenum_count; i++) {
- subs[i].subenum = NULL;
+ subs[i].UPB_PRIVATE(subenum) = NULL;
}
}
- d->table->subs = subs;
+ d->table->UPB_PRIVATE(subs) = subs;
}
static const char* upb_MtDecoder_Parse(upb_MtDecoder* d, const char* ptr,
@@ -424,14 +434,14 @@
upb_MiniTableField* field = fields;
*field_count += 1;
fields = (char*)fields + field_size;
- field->number = ++last_field_number;
+ field->UPB_PRIVATE(number) = ++last_field_number;
last_field = field;
upb_MiniTable_SetField(d, ch, field, msg_modifiers, sub_counts);
} else if (kUpb_EncodedValue_MinModifier <= ch &&
ch <= kUpb_EncodedValue_MaxModifier) {
ptr = upb_MtDecoder_ParseModifier(d, ptr, ch, last_field, &msg_modifiers);
if (msg_modifiers & kUpb_MessageModifier_IsExtendable) {
- d->table->ext |= kUpb_ExtMode_Extendable;
+ d->table->UPB_PRIVATE(ext) |= kUpb_ExtMode_Extendable;
}
} else if (ch == kUpb_EncodedValue_End) {
if (!d->table) {
@@ -441,7 +451,7 @@
} else if (kUpb_EncodedValue_MinSkip <= ch &&
ch <= kUpb_EncodedValue_MaxSkip) {
if (need_dense_below) {
- d->table->dense_below = d->table->field_count;
+ d->table->UPB_PRIVATE(dense_below) = d->table->UPB_PRIVATE(field_count);
need_dense_below = false;
}
uint32_t skip;
@@ -456,7 +466,7 @@
}
if (need_dense_below) {
- d->table->dense_below = d->table->field_count;
+ d->table->UPB_PRIVATE(dense_below) = d->table->UPB_PRIVATE(field_count);
}
return ptr;
@@ -470,14 +480,14 @@
upb_MdDecoder_CheckOutOfMemory(&d->base, d->fields);
upb_SubCounts sub_counts = {0, 0};
- d->table->field_count = 0;
- d->table->fields = d->fields;
+ d->table->UPB_PRIVATE(field_count) = 0;
+ d->table->UPB_PRIVATE(fields) = d->fields;
upb_MtDecoder_Parse(d, data, len, d->fields, sizeof(*d->fields),
- &d->table->field_count, &sub_counts);
+ &d->table->UPB_PRIVATE(field_count), &sub_counts);
upb_Arena_ShrinkLast(d->arena, d->fields, sizeof(*d->fields) * len,
- sizeof(*d->fields) * d->table->field_count);
- d->table->fields = d->fields;
+ sizeof(*d->fields) * d->table->UPB_PRIVATE(field_count));
+ d->table->UPB_PRIVATE(fields) = d->fields;
upb_MtDecoder_AllocateSubs(d, sub_counts);
}
@@ -497,19 +507,19 @@
#define UPB_COMBINE(rep, ty, idx) (((rep << type_bits) | ty) << idx_bits) | idx
uint32_t a_packed = UPB_COMBINE(a->rep, a->type, a->field_index);
uint32_t b_packed = UPB_COMBINE(b->rep, b->type, b->field_index);
- assert(a_packed != b_packed);
+ UPB_ASSERT(a_packed != b_packed);
#undef UPB_COMBINE
return a_packed < b_packed ? -1 : 1;
}
static bool upb_MtDecoder_SortLayoutItems(upb_MtDecoder* d) {
// Add items for all non-oneof fields (oneofs were already added).
- int n = d->table->field_count;
+ int n = d->table->UPB_PRIVATE(field_count);
for (int i = 0; i < n; i++) {
upb_MiniTableField* f = &d->fields[i];
- if (f->offset >= kOneofBase) continue;
+ if (f->UPB_PRIVATE(offset) >= kOneofBase) continue;
upb_LayoutItem item = {.field_index = i,
- .rep = f->mode >> kUpb_FieldRep_Shift,
+ .rep = f->UPB_PRIVATE(mode) >> kUpb_FieldRep_Shift,
.type = kUpb_LayoutItemType_Field};
upb_MtDecoder_PushItem(d, item);
}
@@ -528,46 +538,49 @@
static void upb_MtDecoder_AssignHasbits(upb_MtDecoder* d) {
upb_MiniTable* ret = d->table;
- int n = ret->field_count;
+ int n = ret->UPB_PRIVATE(field_count);
int last_hasbit = 0; // 0 cannot be used.
// First assign required fields, which must have the lowest hasbits.
for (int i = 0; i < n; i++) {
- upb_MiniTableField* field = (upb_MiniTableField*)&ret->fields[i];
- if (field->offset == kRequiredPresence) {
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)&ret->UPB_PRIVATE(fields)[i];
+ if (field->UPB_PRIVATE(offset) == kRequiredPresence) {
field->presence = ++last_hasbit;
- } else if (field->offset == kNoPresence) {
+ } else if (field->UPB_PRIVATE(offset) == kNoPresence) {
field->presence = 0;
}
}
- ret->required_count = last_hasbit;
-
- if (ret->required_count > 63) {
+ if (last_hasbit > 63) {
upb_MdDecoder_ErrorJmp(&d->base, "Too many required fields");
}
+ ret->UPB_PRIVATE(required_count) = last_hasbit;
+
// Next assign non-required hasbit fields.
for (int i = 0; i < n; i++) {
- upb_MiniTableField* field = (upb_MiniTableField*)&ret->fields[i];
- if (field->offset == kHasbitPresence) {
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)&ret->UPB_PRIVATE(fields)[i];
+ if (field->UPB_PRIVATE(offset) == kHasbitPresence) {
field->presence = ++last_hasbit;
}
}
- ret->size = last_hasbit ? upb_MiniTable_DivideRoundUp(last_hasbit + 1, 8) : 0;
+ ret->UPB_PRIVATE(size) =
+ last_hasbit ? upb_MiniTable_DivideRoundUp(last_hasbit + 1, 8) : 0;
}
size_t upb_MtDecoder_Place(upb_MtDecoder* d, upb_FieldRep rep) {
size_t size = upb_MtDecoder_SizeOfRep(rep, d->platform);
size_t align = upb_MtDecoder_AlignOfRep(rep, d->platform);
- size_t ret = UPB_ALIGN_UP(d->table->size, align);
+ size_t ret = UPB_ALIGN_UP(d->table->UPB_PRIVATE(size), align);
static const size_t max = UINT16_MAX;
size_t new_size = ret + size;
if (new_size > max) {
upb_MdDecoder_ErrorJmp(
&d->base, "Message size exceeded maximum size of %zu bytes", max);
}
- d->table->size = new_size;
+ d->table->UPB_PRIVATE(size) = new_size;
return ret;
}
@@ -586,9 +599,10 @@
upb_MiniTableField* f = &d->fields[item->field_index];
while (true) {
f->presence = ~item->offset;
- if (f->offset == kUpb_LayoutItem_IndexSentinel) break;
- UPB_ASSERT(f->offset - kOneofBase < d->table->field_count);
- f = &d->fields[f->offset - kOneofBase];
+ if (f->UPB_PRIVATE(offset) == kUpb_LayoutItem_IndexSentinel) break;
+ UPB_ASSERT(f->UPB_PRIVATE(offset) - kOneofBase <
+ d->table->UPB_PRIVATE(field_count));
+ f = &d->fields[f->UPB_PRIVATE(offset) - kOneofBase];
}
}
@@ -598,14 +612,14 @@
switch (item->type) {
case kUpb_LayoutItemType_OneofField:
while (true) {
- uint16_t next_offset = f->offset;
- f->offset = item->offset;
+ uint16_t next_offset = f->UPB_PRIVATE(offset);
+ f->UPB_PRIVATE(offset) = item->offset;
if (next_offset == kUpb_LayoutItem_IndexSentinel) break;
f = &d->fields[next_offset - kOneofBase];
}
break;
case kUpb_LayoutItemType_Field:
- f->offset = item->offset;
+ f->UPB_PRIVATE(offset) = item->offset;
break;
default:
break;
@@ -617,20 +631,21 @@
//
// On 32-bit we could potentially make this smaller, but there is no
// compelling reason to optimize this right now.
- d->table->size = UPB_ALIGN_UP(d->table->size, 8);
+ d->table->UPB_PRIVATE(size) = UPB_ALIGN_UP(d->table->UPB_PRIVATE(size), 8);
}
static void upb_MtDecoder_ValidateEntryField(upb_MtDecoder* d,
const upb_MiniTableField* f,
uint32_t expected_num) {
const char* name = expected_num == 1 ? "key" : "val";
- if (f->number != expected_num) {
+ const uint32_t f_number = upb_MiniTableField_Number(f);
+ if (f_number != expected_num) {
upb_MdDecoder_ErrorJmp(&d->base,
"map %s did not have expected number (%d vs %d)",
- name, expected_num, (int)f->number);
+ name, expected_num, f_number);
}
- if (upb_IsRepeatedOrMap(f)) {
+ if (!upb_MiniTableField_IsScalar(f)) {
upb_MdDecoder_ErrorJmp(
&d->base, "map %s cannot be repeated or map, or be in oneof", name);
}
@@ -655,9 +670,9 @@
upb_MtDecoder_ParseMessage(d, data, len);
upb_MtDecoder_AssignHasbits(d);
- if (UPB_UNLIKELY(d->table->field_count != 2)) {
+ if (UPB_UNLIKELY(d->table->UPB_PRIVATE(field_count) != 2)) {
upb_MdDecoder_ErrorJmp(&d->base, "%hu fields in map",
- d->table->field_count);
+ d->table->UPB_PRIVATE(field_count));
UPB_UNREACHABLE();
}
@@ -668,20 +683,21 @@
}
}
- upb_MtDecoder_ValidateEntryField(d, &d->table->fields[0], 1);
- upb_MtDecoder_ValidateEntryField(d, &d->table->fields[1], 2);
+ upb_MtDecoder_ValidateEntryField(d, &d->table->UPB_PRIVATE(fields)[0], 1);
+ upb_MtDecoder_ValidateEntryField(d, &d->table->UPB_PRIVATE(fields)[1], 2);
// Map entries have a pre-determined layout, regardless of types.
// NOTE: sync with mini_table/message_internal.h.
const size_t kv_size = d->platform == kUpb_MiniTablePlatform_32Bit ? 8 : 16;
const size_t hasbit_size = 8;
- d->fields[0].offset = hasbit_size;
- d->fields[1].offset = hasbit_size + kv_size;
- d->table->size = UPB_ALIGN_UP(hasbit_size + kv_size + kv_size, 8);
+ d->fields[0].UPB_PRIVATE(offset) = hasbit_size;
+ d->fields[1].UPB_PRIVATE(offset) = hasbit_size + kv_size;
+ d->table->UPB_PRIVATE(size) =
+ UPB_ALIGN_UP(hasbit_size + kv_size + kv_size, 8);
// Map entries have a special bit set to signal it's a map entry, used in
// upb_MiniTable_SetSubMessage() below.
- d->table->ext |= kUpb_ExtMode_IsMapEntry;
+ d->table->UPB_PRIVATE(ext) |= kUpb_ExtMode_IsMapEntry;
}
static void upb_MtDecoder_ParseMessageSet(upb_MtDecoder* d, const char* data,
@@ -692,12 +708,12 @@
}
upb_MiniTable* ret = d->table;
- ret->size = 0;
- ret->field_count = 0;
- ret->ext = kUpb_ExtMode_IsMessageSet;
- ret->dense_below = 0;
- ret->table_mask = -1;
- ret->required_count = 0;
+ ret->UPB_PRIVATE(size) = 0;
+ ret->UPB_PRIVATE(field_count) = 0;
+ ret->UPB_PRIVATE(ext) = kUpb_ExtMode_IsMessageSet;
+ ret->UPB_PRIVATE(dense_below) = 0;
+ ret->UPB_PRIVATE(table_mask) = -1;
+ ret->UPB_PRIVATE(required_count) = 0;
}
static upb_MiniTable* upb_MtDecoder_DoBuildMiniTableWithBuf(
@@ -705,12 +721,12 @@
size_t* buf_size) {
upb_MdDecoder_CheckOutOfMemory(&decoder->base, decoder->table);
- decoder->table->size = 0;
- decoder->table->field_count = 0;
- decoder->table->ext = kUpb_ExtMode_NonExtendable;
- decoder->table->dense_below = 0;
- decoder->table->table_mask = -1;
- decoder->table->required_count = 0;
+ decoder->table->UPB_PRIVATE(size) = 0;
+ decoder->table->UPB_PRIVATE(field_count) = 0;
+ decoder->table->UPB_PRIVATE(ext) = kUpb_ExtMode_NonExtendable;
+ decoder->table->UPB_PRIVATE(dense_below) = 0;
+ decoder->table->UPB_PRIVATE(table_mask) = -1;
+ decoder->table->UPB_PRIVATE(required_count) = 0;
// Strip off and verify the version tag.
if (!len--) goto done;
@@ -797,22 +813,22 @@
&count, &sub_counts);
if (!ret || count != 1) return NULL;
- upb_MiniTableField* f = &ext->field;
+ upb_MiniTableField* f = &ext->UPB_PRIVATE(field);
- f->mode |= kUpb_LabelFlags_IsExtension;
- f->offset = 0;
+ f->UPB_PRIVATE(mode) |= kUpb_LabelFlags_IsExtension;
+ f->UPB_PRIVATE(offset) = 0;
f->presence = 0;
- if (extendee->ext & kUpb_ExtMode_IsMessageSet) {
+ if (extendee->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMessageSet) {
// Extensions of MessageSet must be messages.
- if (!upb_IsSubMessage(f)) return NULL;
+ if (!upb_MiniTableField_IsSubMessage(f)) return NULL;
// Extensions of MessageSet must be non-repeating.
- if ((f->mode & kUpb_FieldMode_Mask) == kUpb_FieldMode_Array) return NULL;
+ if (upb_MiniTableField_IsArray(f)) return NULL;
}
- ext->extendee = extendee;
- ext->sub = sub;
+ ext->UPB_PRIVATE(extendee) = extendee;
+ ext->UPB_PRIVATE(sub) = sub;
return ret;
}
diff --git a/upb/mini_descriptor/decode.h b/upb/mini_descriptor/decode.h
index ec7c12e..ca0afc0 100644
--- a/upb/mini_descriptor/decode.h
+++ b/upb/mini_descriptor/decode.h
@@ -11,8 +11,6 @@
#include "upb/base/status.h"
#include "upb/mem/arena.h"
#include "upb/mini_table/extension.h"
-#include "upb/mini_table/field.h"
-#include "upb/mini_table/message.h"
#include "upb/mini_table/sub.h"
// Export the newer headers, for legacy users. New users should include the
@@ -76,8 +74,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_Build(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.submsg = NULL;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(NULL);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -85,8 +82,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildMessage(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTable* submsg, upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.submsg = submsg;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(submsg);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
@@ -94,8 +90,7 @@
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildEnum(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTableEnum* subenum, upb_Arena* arena, upb_Status* status) {
- upb_MiniTableSub sub;
- sub.subenum = subenum;
+ upb_MiniTableSub sub = upb_MiniTableSub_FromEnum(subenum);
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
diff --git a/upb/mini_descriptor/internal/encode_test.cc b/upb/mini_descriptor/internal/encode_test.cc
index dcb33b5..3ae2f6f 100644
--- a/upb/mini_descriptor/internal/encode_test.cc
+++ b/upb/mini_descriptor/internal/encode_test.cc
@@ -7,13 +7,16 @@
#include "upb/mini_descriptor/internal/encode.hpp"
+#include <stddef.h>
+#include <stdint.h>
+
#include <string_view>
#include <vector>
-#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "absl/container/flat_hash_set.h"
#include "google/protobuf/descriptor.h"
+#include "upb/base/descriptor_constants.h"
#include "upb/base/status.hpp"
#include "upb/mem/arena.hpp"
#include "upb/message/internal/accessors.h"
@@ -21,12 +24,17 @@
#include "upb/mini_descriptor/internal/base92.h"
#include "upb/mini_descriptor/internal/modifiers.h"
#include "upb/mini_table/enum.h"
-#include "upb/wire/decode.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
// begin:google_only
// #include "testing/fuzzing/fuzztest.h"
// end:google_only
+// Must be last.
+#include "upb/port/def.inc"
+
namespace protobuf = ::google::protobuf;
class MiniTableTest : public testing::TestWithParam<upb_MiniTablePlatform> {};
@@ -37,8 +45,8 @@
upb_MiniTable* table =
_upb_MiniTable_Build(nullptr, 0, GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table);
- EXPECT_EQ(0, table->field_count);
- EXPECT_EQ(0, table->required_count);
+ EXPECT_EQ(0, table->UPB_PRIVATE(field_count));
+ EXPECT_EQ(0, table->UPB_PRIVATE(required_count));
}
TEST_P(MiniTableTest, AllScalarTypes) {
@@ -54,16 +62,16 @@
upb_MiniTable* table = _upb_MiniTable_Build(
e.data().data(), e.data().size(), GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table);
- EXPECT_EQ(count, table->field_count);
+ EXPECT_EQ(count, table->UPB_PRIVATE(field_count));
absl::flat_hash_set<size_t> offsets;
for (int i = 0; i < 16; i++) {
- const upb_MiniTableField* f = &table->fields[i];
- EXPECT_EQ(i + 1, f->number);
- EXPECT_EQ(kUpb_FieldMode_Scalar, f->mode & kUpb_FieldMode_Mask);
- EXPECT_TRUE(offsets.insert(f->offset).second);
- EXPECT_TRUE(f->offset < table->size);
+ const upb_MiniTableField* f = &table->UPB_PRIVATE(fields)[i];
+ EXPECT_EQ(i + 1, upb_MiniTableField_Number(f));
+ EXPECT_TRUE(upb_MiniTableField_IsScalar(f));
+ EXPECT_TRUE(offsets.insert(f->UPB_PRIVATE(offset)).second);
+ EXPECT_TRUE(f->UPB_PRIVATE(offset) < table->UPB_PRIVATE(size));
}
- EXPECT_EQ(0, table->required_count);
+ EXPECT_EQ(0, table->UPB_PRIVATE(required_count));
}
TEST_P(MiniTableTest, AllRepeatedTypes) {
@@ -80,16 +88,16 @@
upb_MiniTable* table = _upb_MiniTable_Build(
e.data().data(), e.data().size(), GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table);
- EXPECT_EQ(count, table->field_count);
+ EXPECT_EQ(count, table->UPB_PRIVATE(field_count));
absl::flat_hash_set<size_t> offsets;
for (int i = 0; i < 16; i++) {
- const upb_MiniTableField* f = &table->fields[i];
- EXPECT_EQ(i + 1, f->number);
- EXPECT_EQ(kUpb_FieldMode_Array, f->mode & kUpb_FieldMode_Mask);
- EXPECT_TRUE(offsets.insert(f->offset).second);
- EXPECT_TRUE(f->offset < table->size);
+ const upb_MiniTableField* f = &table->UPB_PRIVATE(fields)[i];
+ EXPECT_EQ(i + 1, upb_MiniTableField_Number(f));
+ EXPECT_TRUE(upb_MiniTableField_IsArray(f));
+ EXPECT_TRUE(offsets.insert(f->UPB_PRIVATE(offset)).second);
+ EXPECT_TRUE(f->UPB_PRIVATE(offset) < table->UPB_PRIVATE(size));
}
- EXPECT_EQ(0, table->required_count);
+ EXPECT_EQ(0, table->UPB_PRIVATE(required_count));
}
TEST_P(MiniTableTest, Skips) {
@@ -108,17 +116,17 @@
upb_MiniTable* table = _upb_MiniTable_Build(
e.data().data(), e.data().size(), GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table);
- EXPECT_EQ(count, table->field_count);
+ EXPECT_EQ(count, table->UPB_PRIVATE(field_count));
absl::flat_hash_set<size_t> offsets;
for (size_t i = 0; i < field_numbers.size(); i++) {
- const upb_MiniTableField* f = &table->fields[i];
- EXPECT_EQ(field_numbers[i], f->number);
+ const upb_MiniTableField* f = &table->UPB_PRIVATE(fields)[i];
+ EXPECT_EQ(field_numbers[i], upb_MiniTableField_Number(f));
EXPECT_EQ(kUpb_FieldType_Float, upb_MiniTableField_Type(f));
- EXPECT_EQ(kUpb_FieldMode_Scalar, f->mode & kUpb_FieldMode_Mask);
- EXPECT_TRUE(offsets.insert(f->offset).second);
- EXPECT_TRUE(f->offset < table->size);
+ EXPECT_TRUE(upb_MiniTableField_IsScalar(f));
+ EXPECT_TRUE(offsets.insert(f->UPB_PRIVATE(offset)).second);
+ EXPECT_TRUE(f->UPB_PRIVATE(offset) < table->UPB_PRIVATE(size));
}
- EXPECT_EQ(0, table->required_count);
+ EXPECT_EQ(0, table->UPB_PRIVATE(required_count));
}
TEST_P(MiniTableTest, AllScalarTypesOneof) {
@@ -138,22 +146,23 @@
upb_MiniTable* table = _upb_MiniTable_Build(
e.data().data(), e.data().size(), GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table) << status.error_message();
- EXPECT_EQ(count, table->field_count);
+ EXPECT_EQ(count, table->UPB_PRIVATE(field_count));
absl::flat_hash_set<size_t> offsets;
for (int i = 0; i < 16; i++) {
- const upb_MiniTableField* f = &table->fields[i];
- EXPECT_EQ(i + 1, f->number);
- EXPECT_EQ(kUpb_FieldMode_Scalar, f->mode & kUpb_FieldMode_Mask);
+ const upb_MiniTableField* f = &table->UPB_PRIVATE(fields)[i];
+ EXPECT_EQ(i + 1, upb_MiniTableField_Number(f));
+ EXPECT_TRUE(upb_MiniTableField_IsScalar(f));
// For a oneof all fields have the same offset.
- EXPECT_EQ(table->fields[0].offset, f->offset);
+ EXPECT_EQ(table->UPB_PRIVATE(fields)[0].UPB_PRIVATE(offset),
+ f->UPB_PRIVATE(offset));
// All presence fields should point to the same oneof case offset.
- size_t case_ofs = _upb_oneofcase_ofs(f);
- EXPECT_EQ(table->fields[0].presence, f->presence);
- EXPECT_TRUE(f->offset < table->size);
- EXPECT_TRUE(case_ofs < table->size);
- EXPECT_TRUE(case_ofs != f->offset);
+ size_t case_ofs = UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(f);
+ EXPECT_EQ(table->UPB_PRIVATE(fields)[0].presence, f->presence);
+ EXPECT_TRUE(f->UPB_PRIVATE(offset) < table->UPB_PRIVATE(size));
+ EXPECT_TRUE(case_ofs < table->UPB_PRIVATE(size));
+ EXPECT_TRUE(case_ofs != f->UPB_PRIVATE(offset));
}
- EXPECT_EQ(0, table->required_count);
+ EXPECT_EQ(0, table->UPB_PRIVATE(required_count));
}
TEST_P(MiniTableTest, SizeOverflow) {
@@ -233,9 +242,11 @@
upb_MiniTable* table = _upb_MiniTable_Build(
e.data().data(), e.data().size(), GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table);
- EXPECT_EQ(table->field_count, 2);
- EXPECT_EQ(table->subs[0].submsg, &_kUpb_MiniTable_Empty);
- EXPECT_EQ(table->subs[1].submsg, &_kUpb_MiniTable_Empty);
+ EXPECT_EQ(table->UPB_PRIVATE(field_count), 2);
+ EXPECT_TRUE(UPB_PRIVATE(_upb_MiniTable_IsEmpty)(
+ upb_MiniTableSub_Message(table->UPB_PRIVATE(subs)[0])));
+ EXPECT_TRUE(UPB_PRIVATE(_upb_MiniTable_IsEmpty)(
+ upb_MiniTableSub_Message(table->UPB_PRIVATE(subs)[1])));
}
TEST(MiniTableEnumTest, PositiveAndNegative) {
@@ -275,7 +286,8 @@
upb_MiniTable* table = _upb_MiniTable_Build(
e.data().data(), e.data().size(), GetParam(), arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table);
- EXPECT_EQ(kUpb_ExtMode_Extendable, table->ext & kUpb_ExtMode_Extendable);
+ EXPECT_EQ(kUpb_ExtMode_Extendable,
+ table->UPB_PRIVATE(ext) & kUpb_ExtMode_Extendable);
}
// begin:google_only
diff --git a/upb/mini_descriptor/link.c b/upb/mini_descriptor/link.c
index 39da601..3749779 100644
--- a/upb/mini_descriptor/link.c
+++ b/upb/mini_descriptor/link.c
@@ -7,26 +7,38 @@
#include "upb/mini_descriptor/link.h"
+#include <stddef.h>
+#include <stdint.h>
+
+#include "upb/base/descriptor_constants.h"
+#include "upb/mini_table/enum.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
+
// Must be last.
#include "upb/port/def.inc"
bool upb_MiniTable_SetSubMessage(upb_MiniTable* table,
upb_MiniTableField* field,
const upb_MiniTable* sub) {
- UPB_ASSERT((uintptr_t)table->fields <= (uintptr_t)field &&
- (uintptr_t)field <
- (uintptr_t)(table->fields + table->field_count));
+ UPB_ASSERT((uintptr_t)table->UPB_PRIVATE(fields) <= (uintptr_t)field &&
+ (uintptr_t)field < (uintptr_t)(table->UPB_PRIVATE(fields) +
+ table->UPB_PRIVATE(field_count)));
UPB_ASSERT(sub);
- const bool sub_is_map = sub->ext & kUpb_ExtMode_IsMapEntry;
+ const bool sub_is_map = sub->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMapEntry;
switch (field->UPB_PRIVATE(descriptortype)) {
case kUpb_FieldType_Message:
if (sub_is_map) {
- const bool table_is_map = table->ext & kUpb_ExtMode_IsMapEntry;
+ const bool table_is_map =
+ table->UPB_PRIVATE(ext) & kUpb_ExtMode_IsMapEntry;
if (UPB_UNLIKELY(table_is_map)) return false;
- field->mode = (field->mode & ~kUpb_FieldMode_Mask) | kUpb_FieldMode_Map;
+ field->UPB_PRIVATE(mode) =
+ (field->UPB_PRIVATE(mode) & ~kUpb_FieldMode_Mask) |
+ kUpb_FieldMode_Map;
}
break;
@@ -39,24 +51,24 @@
}
upb_MiniTableSub* table_sub =
- (void*)&table->subs[field->UPB_PRIVATE(submsg_index)];
+ (void*)&table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)];
// TODO: Add this assert back once YouTube is updated to not call
// this function repeatedly.
- // UPB_ASSERT(table_sub->submsg == &_kUpb_MiniTable_Empty);
- table_sub->submsg = sub;
+ // UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_IsEmpty)(table_sub->submsg));
+ *table_sub = upb_MiniTableSub_FromMessage(sub);
return true;
}
bool upb_MiniTable_SetSubEnum(upb_MiniTable* table, upb_MiniTableField* field,
const upb_MiniTableEnum* sub) {
- UPB_ASSERT((uintptr_t)table->fields <= (uintptr_t)field &&
- (uintptr_t)field <
- (uintptr_t)(table->fields + table->field_count));
+ UPB_ASSERT((uintptr_t)table->UPB_PRIVATE(fields) <= (uintptr_t)field &&
+ (uintptr_t)field < (uintptr_t)(table->UPB_PRIVATE(fields) +
+ table->UPB_PRIVATE(field_count)));
UPB_ASSERT(sub);
upb_MiniTableSub* table_sub =
- (void*)&table->subs[field->UPB_PRIVATE(submsg_index)];
- table_sub->subenum = sub;
+ (void*)&table->UPB_PRIVATE(subs)[field->UPB_PRIVATE(submsg_index)];
+ *table_sub = upb_MiniTableSub_FromEnum(sub);
return true;
}
@@ -65,8 +77,8 @@
uint32_t msg_count = 0;
uint32_t enum_count = 0;
- for (int i = 0; i < mt->field_count; i++) {
- const upb_MiniTableField* f = &mt->fields[i];
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt->UPB_PRIVATE(fields)[i];
if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
*subs = f;
++subs;
@@ -74,8 +86,8 @@
}
}
- for (int i = 0; i < mt->field_count; i++) {
- const upb_MiniTableField* f = &mt->fields[i];
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt->UPB_PRIVATE(fields)[i];
if (upb_MiniTableField_CType(f) == kUpb_CType_Enum) {
*subs = f;
++subs;
@@ -96,8 +108,8 @@
uint32_t msg_count = 0;
uint32_t enum_count = 0;
- for (int i = 0; i < mt->field_count; i++) {
- upb_MiniTableField* f = (upb_MiniTableField*)&mt->fields[i];
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ upb_MiniTableField* f = (upb_MiniTableField*)&mt->UPB_PRIVATE(fields)[i];
if (upb_MiniTableField_CType(f) == kUpb_CType_Message) {
const upb_MiniTable* sub = sub_tables[msg_count++];
if (msg_count > sub_table_count) return false;
@@ -107,8 +119,8 @@
}
}
- for (int i = 0; i < mt->field_count; i++) {
- upb_MiniTableField* f = (upb_MiniTableField*)&mt->fields[i];
+ for (int i = 0; i < mt->UPB_PRIVATE(field_count); i++) {
+ upb_MiniTableField* f = (upb_MiniTableField*)&mt->UPB_PRIVATE(fields)[i];
if (upb_MiniTableField_IsClosedEnum(f)) {
const upb_MiniTableEnum* sub = sub_enums[enum_count++];
if (enum_count > sub_enum_count) return false;
diff --git a/upb/mini_descriptor/link.h b/upb/mini_descriptor/link.h
index db3aac1..3e880fd 100644
--- a/upb/mini_descriptor/link.h
+++ b/upb/mini_descriptor/link.h
@@ -18,7 +18,7 @@
#include "upb/base/status.h"
#include "upb/mem/arena.h"
-#include "upb/mini_table/extension.h"
+#include "upb/mini_table/enum.h"
#include "upb/mini_table/field.h"
#include "upb/mini_table/message.h"
#include "upb/mini_table/sub.h"
diff --git a/upb/mini_table/BUILD b/upb/mini_table/BUILD
index f4b2ffe..6df9ff0 100644
--- a/upb/mini_table/BUILD
+++ b/upb/mini_table/BUILD
@@ -11,25 +11,6 @@
)
cc_library(
- name = "compat",
- srcs = [
- "compat.c",
- ],
- hdrs = [
- "compat.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ":mini_table",
- "//upb:base",
- "//upb:hash",
- "//upb:mem",
- "//upb:port",
- ],
-)
-
-cc_library(
name = "mini_table",
srcs = [
"extension_registry.c",
@@ -49,9 +30,9 @@
deps = [
":internal",
"//upb:base",
- "//upb:hash",
"//upb:mem",
"//upb:port",
+ "//upb/hash",
],
)
@@ -66,25 +47,47 @@
"internal/field.h",
"internal/file.h",
"internal/message.h",
+ "internal/size_log2.h",
"internal/sub.h",
],
+ copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
"//upb:base",
- "//upb:message_types",
+ "//upb:mem",
"//upb:port",
],
)
+cc_library(
+ name = "compat",
+ srcs = [
+ "compat.c",
+ ],
+ hdrs = [
+ "compat.h",
+ ],
+ copts = UPB_DEFAULT_COPTS,
+ visibility = ["//visibility:public"],
+ deps = [
+ ":mini_table",
+ "//upb:base",
+ "//upb:mem",
+ "//upb:port",
+ "//upb/hash",
+ ],
+)
+
cc_test(
name = "compat_test",
srcs = ["compat_test.cc"],
deps = [
- "@com_google_googletest//:gtest_main",
"//upb:mini_table_compat",
"//upb/test:test_messages_proto2_upb_minitable",
"//upb/test:test_messages_proto3_upb_minitable",
"//upb/test:test_upb_proto",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -98,8 +101,20 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/mini_table/compat.c b/upb/mini_table/compat.c
index ad169ce..e834c4f 100644
--- a/upb/mini_table/compat.c
+++ b/upb/mini_table/compat.c
@@ -7,6 +7,9 @@
#include "upb/mini_table/compat.h"
+#include <stddef.h>
+#include <stdint.h>
+
#include "upb/base/descriptor_constants.h"
#include "upb/hash/common.h"
#include "upb/hash/int_table.h"
@@ -29,19 +32,21 @@
const upb_MiniTable* dst,
upb_inttable* table,
upb_Arena** arena) {
- if (src->field_count != dst->field_count)
+ if (src->UPB_PRIVATE(field_count) != dst->UPB_PRIVATE(field_count))
return kUpb_MiniTableEquals_NotEqual;
bool marked_src = false;
- for (int i = 0; i < src->field_count; i++) {
- const upb_MiniTableField* src_field = &src->fields[i];
- const upb_MiniTableField* dst_field =
- upb_MiniTable_FindFieldByNumber(dst, src_field->number);
+ for (int i = 0; i < upb_MiniTable_FieldCount(src); i++) {
+ const upb_MiniTableField* src_field = upb_MiniTable_GetFieldByIndex(src, i);
+ const upb_MiniTableField* dst_field = upb_MiniTable_FindFieldByNumber(
+ dst, upb_MiniTableField_Number(src_field));
if (upb_MiniTableField_CType(src_field) !=
upb_MiniTableField_CType(dst_field))
return false;
- if (src_field->mode != dst_field->mode) return false;
- if (src_field->offset != dst_field->offset) return false;
+ if (src_field->UPB_PRIVATE(mode) != dst_field->UPB_PRIVATE(mode))
+ return false;
+ if (src_field->UPB_PRIVATE(offset) != dst_field->UPB_PRIVATE(offset))
+ return false;
if (src_field->presence != dst_field->presence) return false;
if (src_field->UPB_PRIVATE(submsg_index) !=
dst_field->UPB_PRIVATE(submsg_index))
diff --git a/upb/mini_table/enum.h b/upb/mini_table/enum.h
index c2810fb..cad31ec 100644
--- a/upb/mini_table/enum.h
+++ b/upb/mini_table/enum.h
@@ -8,6 +8,8 @@
#ifndef UPB_MINI_TABLE_ENUM_H_
#define UPB_MINI_TABLE_ENUM_H_
+#include <stdint.h>
+
#include "upb/mini_table/internal/enum.h"
// Must be last
@@ -20,13 +22,9 @@
#endif
// Validates enum value against range defined by enum mini table.
-UPB_INLINE bool upb_MiniTableEnum_CheckValue(const struct upb_MiniTableEnum* e,
+UPB_INLINE bool upb_MiniTableEnum_CheckValue(const upb_MiniTableEnum* e,
uint32_t val) {
- _kUpb_FastEnumCheck_Status status = _upb_MiniTable_CheckEnumValueFast(e, val);
- if (UPB_UNLIKELY(status == _kUpb_FastEnumCheck_CannotCheckFast)) {
- return _upb_MiniTable_CheckEnumValueSlow(e, val);
- }
- return status == _kUpb_FastEnumCheck_ValueIsInEnum ? true : false;
+ return UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)(e, val);
}
#ifdef __cplusplus
diff --git a/upb/mini_table/extension.h b/upb/mini_table/extension.h
index 7fde315..58a71b6 100644
--- a/upb/mini_table/extension.h
+++ b/upb/mini_table/extension.h
@@ -8,8 +8,45 @@
#ifndef UPB_MINI_TABLE_EXTENSION_H_
#define UPB_MINI_TABLE_EXTENSION_H_
+#include <stdint.h>
+
+#include "upb/mini_table/field.h"
#include "upb/mini_table/internal/extension.h"
+#include "upb/mini_table/message.h"
+
+// Must be last.
+#include "upb/port/def.inc"
typedef struct upb_MiniTableExtension upb_MiniTableExtension;
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTableExtension_AsField(
+ const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_AsField)(e);
+}
+
+UPB_API_INLINE uint32_t
+upb_MiniTableExtension_Number(const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_Number)(e);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableExtension_GetSubMessage(
+ const upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableExtension_GetSubMessage)(e);
+}
+
+UPB_API_INLINE void upb_MiniTableExtension_SetSubMessage(
+ upb_MiniTableExtension* e, const upb_MiniTable* m) {
+ UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(e, m);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
#endif /* UPB_MINI_TABLE_EXTENSION_H_ */
diff --git a/upb/mini_table/extension_registry.c b/upb/mini_table/extension_registry.c
index 3c3f58f..f5b118f 100644
--- a/upb/mini_table/extension_registry.c
+++ b/upb/mini_table/extension_registry.c
@@ -7,8 +7,14 @@
#include "upb/mini_table/extension_registry.h"
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
#include "upb/hash/str_table.h"
+#include "upb/mem/arena.h"
#include "upb/mini_table/extension.h"
+#include "upb/mini_table/message.h"
// Must be last.
#include "upb/port/def.inc"
@@ -36,7 +42,7 @@
UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
const upb_MiniTableExtension* e) {
char buf[EXTREG_KEY_SIZE];
- extreg_key(buf, e->extendee, e->field.number);
+ extreg_key(buf, e->UPB_PRIVATE(extendee), upb_MiniTableExtension_Number(e));
if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
upb_value_constptr(e), r->arena);
@@ -57,7 +63,8 @@
for (end = e, e = start; e < end; e++) {
const upb_MiniTableExtension* ext = *e;
char buf[EXTREG_KEY_SIZE];
- extreg_key(buf, ext->extendee, ext->field.number);
+ extreg_key(buf, ext->UPB_PRIVATE(extendee),
+ upb_MiniTableExtension_Number(ext));
upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
}
return false;
diff --git a/upb/mini_table/field.h b/upb/mini_table/field.h
index 7f382c4..1df96ce 100644
--- a/upb/mini_table/field.h
+++ b/upb/mini_table/field.h
@@ -8,85 +8,71 @@
#ifndef UPB_MINI_TABLE_FIELD_H_
#define UPB_MINI_TABLE_FIELD_H_
+#include <stdint.h>
+
+#include "upb/base/descriptor_constants.h"
#include "upb/mini_table/internal/field.h"
-#include "upb/mini_table/internal/message.h"
-#include "upb/mini_table/internal/sub.h"
// Must be last.
#include "upb/port/def.inc"
+typedef struct upb_MiniTableField upb_MiniTableField;
+
#ifdef __cplusplus
extern "C" {
#endif
-typedef struct upb_MiniTableField upb_MiniTableField;
-
-UPB_API_INLINE upb_FieldType
-upb_MiniTableField_Type(const upb_MiniTableField* field) {
- if (field->mode & kUpb_LabelFlags_IsAlternate) {
- if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Int32) {
- return kUpb_FieldType_Enum;
- } else if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bytes) {
- return kUpb_FieldType_String;
- } else {
- UPB_ASSERT(false);
- }
- }
- return (upb_FieldType)field->UPB_PRIVATE(descriptortype);
-}
-
UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField* f) {
- switch (upb_MiniTableField_Type(f)) {
- case kUpb_FieldType_Double:
- return kUpb_CType_Double;
- case kUpb_FieldType_Float:
- return kUpb_CType_Float;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_SInt64:
- case kUpb_FieldType_SFixed64:
- return kUpb_CType_Int64;
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_SFixed32:
- case kUpb_FieldType_SInt32:
- return kUpb_CType_Int32;
- case kUpb_FieldType_UInt64:
- case kUpb_FieldType_Fixed64:
- return kUpb_CType_UInt64;
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Fixed32:
- return kUpb_CType_UInt32;
- case kUpb_FieldType_Enum:
- return kUpb_CType_Enum;
- case kUpb_FieldType_Bool:
- return kUpb_CType_Bool;
- case kUpb_FieldType_String:
- return kUpb_CType_String;
- case kUpb_FieldType_Bytes:
- return kUpb_CType_Bytes;
- case kUpb_FieldType_Group:
- case kUpb_FieldType_Message:
- return kUpb_CType_Message;
- }
- UPB_UNREACHABLE();
-}
-
-UPB_API_INLINE bool upb_MiniTableField_IsExtension(
- const upb_MiniTableField* field) {
- return field->mode & kUpb_LabelFlags_IsExtension;
-}
-
-UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
- const upb_MiniTableField* field) {
- return field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum;
+ return UPB_PRIVATE(_upb_MiniTableField_CType)(f);
}
UPB_API_INLINE bool upb_MiniTableField_HasPresence(
- const upb_MiniTableField* field) {
- if (upb_MiniTableField_IsExtension(field)) {
- return !upb_IsRepeatedOrMap(field);
- } else {
- return field->presence != 0;
- }
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_HasPresence)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsArray(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsArray)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsClosedEnum)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsExtension(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsExtension)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsInOneof(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsMap(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsMap)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsPacked(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsPacked)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsScalar(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsScalar)(f);
+}
+
+UPB_API_INLINE bool upb_MiniTableField_IsSubMessage(
+ const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsSubMessage)(f);
+}
+
+UPB_API_INLINE uint32_t upb_MiniTableField_Number(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Number)(f);
+}
+
+UPB_API_INLINE upb_FieldType
+upb_MiniTableField_Type(const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Type)(f);
}
#ifdef __cplusplus
diff --git a/upb/mini_table/file.h b/upb/mini_table/file.h
index 590164f..bc109eb 100644
--- a/upb/mini_table/file.h
+++ b/upb/mini_table/file.h
@@ -8,8 +8,52 @@
#ifndef UPB_MINI_TABLE_FILE_H_
#define UPB_MINI_TABLE_FILE_H_
+#include "upb/mini_table/enum.h"
+#include "upb/mini_table/extension.h"
#include "upb/mini_table/internal/file.h"
+#include "upb/mini_table/message.h"
+
+// Must be last.
+#include "upb/port/def.inc"
typedef struct upb_MiniTableFile upb_MiniTableFile;
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTableFile_Enum(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Enum)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_EnumCount(const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(f);
+}
+
+UPB_API_INLINE const upb_MiniTableExtension* upb_MiniTableFile_Extension(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Extension)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_ExtensionCount(
+ const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(f);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableFile_Message(
+ const upb_MiniTableFile* f, int i) {
+ return UPB_PRIVATE(_upb_MiniTableFile_Message)(f, i);
+}
+
+UPB_API_INLINE int upb_MiniTableFile_MessageCount(const upb_MiniTableFile* f) {
+ return UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(f);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
#endif /* UPB_MINI_TABLE_FILE_H_ */
diff --git a/upb/mini_table/internal/enum.h b/upb/mini_table/internal/enum.h
index bbc353a..6f8bec8 100644
--- a/upb/mini_table/internal/enum.h
+++ b/upb/mini_table/internal/enum.h
@@ -14,35 +14,34 @@
#include "upb/port/def.inc"
struct upb_MiniTableEnum {
- uint32_t mask_limit; // Limit enum value that can be tested with mask.
- uint32_t value_count; // Number of values after the bitfield.
- uint32_t data[]; // Bitmask + enumerated values follow.
+ uint32_t UPB_PRIVATE(mask_limit); // Highest that can be tested with mask.
+ uint32_t UPB_PRIVATE(value_count); // Number of values after the bitfield.
+ uint32_t UPB_PRIVATE(data)[]; // Bitmask + enumerated values follow.
};
-typedef enum {
- _kUpb_FastEnumCheck_ValueIsInEnum = 0,
- _kUpb_FastEnumCheck_ValueIsNotInEnum = 1,
- _kUpb_FastEnumCheck_CannotCheckFast = 2,
-} _kUpb_FastEnumCheck_Status;
-
#ifdef __cplusplus
extern "C" {
#endif
-UPB_INLINE _kUpb_FastEnumCheck_Status _upb_MiniTable_CheckEnumValueFast(
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableEnum_CheckValue)(
const struct upb_MiniTableEnum* e, uint32_t val) {
- if (UPB_UNLIKELY(val >= 64)) return _kUpb_FastEnumCheck_CannotCheckFast;
- uint64_t mask = e->data[0] | ((uint64_t)e->data[1] << 32);
- return (mask & (1ULL << val)) ? _kUpb_FastEnumCheck_ValueIsInEnum
- : _kUpb_FastEnumCheck_ValueIsNotInEnum;
-}
+ if (UPB_LIKELY(val < 64)) {
+ const uint64_t mask =
+ e->UPB_PRIVATE(data)[0] | ((uint64_t)e->UPB_PRIVATE(data)[1] << 32);
+ const uint64_t bit = 1ULL << val;
+ return (mask & bit) != 0;
+ }
+ if (UPB_LIKELY(val < e->UPB_PRIVATE(mask_limit))) {
+ const uint32_t mask = e->UPB_PRIVATE(data)[val / 32];
+ const uint32_t bit = 1ULL << (val % 32);
+ return (mask & bit) != 0;
+ }
-UPB_INLINE bool _upb_MiniTable_CheckEnumValueSlow(
- const struct upb_MiniTableEnum* e, uint32_t val) {
- if (val < e->mask_limit) return e->data[val / 32] & (1ULL << (val % 32));
// OPT: binary search long lists?
- const uint32_t* start = &e->data[e->mask_limit / 32];
- const uint32_t* limit = &e->data[(e->mask_limit / 32) + e->value_count];
+ const uint32_t* start =
+ &e->UPB_PRIVATE(data)[e->UPB_PRIVATE(mask_limit) / 32];
+ const uint32_t* limit = &e->UPB_PRIVATE(
+ data)[e->UPB_PRIVATE(mask_limit) / 32 + e->UPB_PRIVATE(value_count)];
for (const uint32_t* p = start; p < limit; p++) {
if (*p == val) return true;
}
diff --git a/upb/mini_table/internal/extension.h b/upb/mini_table/internal/extension.h
index f052fe6..b46ee76 100644
--- a/upb/mini_table/internal/extension.h
+++ b/upb/mini_table/internal/extension.h
@@ -8,6 +8,8 @@
#ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
#define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
+#include <stdint.h>
+
#include "upb/mini_table/internal/field.h"
#include "upb/mini_table/internal/sub.h"
@@ -16,12 +18,41 @@
struct upb_MiniTableExtension {
// Do not move this field. We need to be able to alias pointers.
- struct upb_MiniTableField field;
+ struct upb_MiniTableField UPB_PRIVATE(field);
- const struct upb_MiniTable* extendee;
- union upb_MiniTableSub sub; // NULL unless submessage or proto2 enum
+ const struct upb_MiniTable* UPB_PRIVATE(extendee);
+ union upb_MiniTableSub UPB_PRIVATE(sub); // NULL unless submsg or proto2 enum
};
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTableExtension_AsField)(const struct upb_MiniTableExtension* e) {
+ return (const struct upb_MiniTableField*)&e->UPB_PRIVATE(field);
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_MiniTableExtension_Number)(
+ const struct upb_MiniTableExtension* e) {
+ return e->UPB_PRIVATE(field).UPB_ONLYBITS(number);
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+ _upb_MiniTableExtension_GetSubMessage)(
+ const struct upb_MiniTableExtension* e) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Message)(e->UPB_PRIVATE(sub));
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(
+ struct upb_MiniTableExtension* e, const struct upb_MiniTable* m) {
+ e->UPB_PRIVATE(sub).UPB_PRIVATE(submsg) = m;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
#include "upb/port/undef.inc"
#endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */
diff --git a/upb/mini_table/internal/field.h b/upb/mini_table/internal/field.h
index 3ed8afe..166463a 100644
--- a/upb/mini_table/internal/field.h
+++ b/upb/mini_table/internal/field.h
@@ -8,17 +8,20 @@
#ifndef UPB_MINI_TABLE_INTERNAL_FIELD_H_
#define UPB_MINI_TABLE_INTERNAL_FIELD_H_
+#include <stddef.h>
#include <stdint.h>
#include "upb/base/descriptor_constants.h"
+#include "upb/mini_table/internal/size_log2.h"
// Must be last.
#include "upb/port/def.inc"
+// LINT.IfChange(struct_definition)
struct upb_MiniTableField {
- uint32_t number;
- uint16_t offset;
- int16_t presence; // If >0, hasbit_index. If <0, ~oneof_index
+ uint32_t UPB_ONLYBITS(number);
+ uint16_t UPB_ONLYBITS(offset);
+ int16_t presence; // If >0, hasbit_index. If <0, ~oneof_index
// Indexes into `upb_MiniTable.subs`
// Will be set to `kUpb_NoSub` if `descriptortype` != MESSAGE/GROUP/ENUM
@@ -27,7 +30,7 @@
uint8_t UPB_PRIVATE(descriptortype);
// upb_FieldMode | upb_LabelFlags | (upb_FieldRep << kUpb_FieldRep_Shift)
- uint8_t mode;
+ uint8_t UPB_ONLYBITS(mode);
};
#define kUpb_NoSub ((uint16_t)-1)
@@ -67,44 +70,150 @@
#define kUpb_FieldRep_Shift 6
-UPB_INLINE upb_FieldRep
-_upb_MiniTableField_GetRep(const struct upb_MiniTableField* field) {
- return (upb_FieldRep)(field->mode >> kUpb_FieldRep_Shift);
-}
-
#ifdef __cplusplus
extern "C" {
#endif
UPB_INLINE upb_FieldMode
-upb_FieldMode_Get(const struct upb_MiniTableField* field) {
- return (upb_FieldMode)(field->mode & 3);
+UPB_PRIVATE(_upb_MiniTableField_Mode)(const struct upb_MiniTableField* f) {
+ return (upb_FieldMode)(f->UPB_ONLYBITS(mode) & kUpb_FieldMode_Mask);
}
-UPB_INLINE void _upb_MiniTableField_CheckIsArray(
- const struct upb_MiniTableField* field) {
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_NativePointer);
- UPB_ASSUME(upb_FieldMode_Get(field) == kUpb_FieldMode_Array);
- UPB_ASSUME(field->presence == 0);
+UPB_INLINE upb_FieldRep
+UPB_PRIVATE(_upb_MiniTableField_GetRep)(const struct upb_MiniTableField* f) {
+ return (upb_FieldRep)(f->UPB_ONLYBITS(mode) >> kUpb_FieldRep_Shift);
}
-UPB_INLINE void _upb_MiniTableField_CheckIsMap(
- const struct upb_MiniTableField* field) {
- UPB_ASSUME(_upb_MiniTableField_GetRep(field) == kUpb_FieldRep_NativePointer);
- UPB_ASSUME(upb_FieldMode_Get(field) == kUpb_FieldMode_Map);
- UPB_ASSUME(field->presence == 0);
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsArray)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Array;
}
-UPB_INLINE bool upb_IsRepeatedOrMap(const struct upb_MiniTableField* field) {
- // This works because upb_FieldMode has no value 3.
- return !(field->mode & kUpb_FieldMode_Scalar);
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsMap)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Map;
}
-UPB_INLINE bool upb_IsSubMessage(const struct upb_MiniTableField* field) {
- return field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
- field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group;
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsScalar)(
+ const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTableField_Mode)(f) == kUpb_FieldMode_Scalar;
}
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsAlternate)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsAlternate) != 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsExtension)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsExtension) != 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsPacked)(
+ const struct upb_MiniTableField* f) {
+ return (f->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsPacked) != 0;
+}
+
+UPB_INLINE upb_FieldType
+UPB_PRIVATE(_upb_MiniTableField_Type)(const struct upb_MiniTableField* f) {
+ const upb_FieldType type = (upb_FieldType)f->UPB_PRIVATE(descriptortype);
+ if (UPB_PRIVATE(_upb_MiniTableField_IsAlternate)(f)) {
+ if (type == kUpb_FieldType_Int32) return kUpb_FieldType_Enum;
+ if (type == kUpb_FieldType_Bytes) return kUpb_FieldType_String;
+ UPB_ASSERT(false);
+ }
+ return type;
+}
+
+UPB_INLINE upb_CType
+UPB_PRIVATE(_upb_MiniTableField_CType)(const struct upb_MiniTableField* f) {
+ return upb_FieldType_CType(UPB_PRIVATE(_upb_MiniTableField_Type)(f));
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(
+ const struct upb_MiniTableField* f) {
+ return f->presence > 0;
+}
+
+UPB_INLINE char UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f));
+ const size_t index = f->presence;
+ return 1 << (index % 8);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f));
+ const size_t index = f->presence;
+ return index / 8;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsClosedEnum)(
+ const struct upb_MiniTableField* f) {
+ return f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Enum;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(
+ const struct upb_MiniTableField* f) {
+ return f->presence < 0;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_IsSubMessage)(
+ const struct upb_MiniTableField* f) {
+ return f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
+ f->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTableField_HasPresence)(
+ const struct upb_MiniTableField* f) {
+ if (UPB_PRIVATE(_upb_MiniTableField_IsExtension)(f)) {
+ return UPB_PRIVATE(_upb_MiniTableField_IsScalar)(f);
+ } else {
+ return f->presence != 0;
+ }
+}
+
+UPB_INLINE uint32_t
+UPB_PRIVATE(_upb_MiniTableField_Number)(const struct upb_MiniTableField* f) {
+ return f->UPB_ONLYBITS(number);
+}
+
+UPB_INLINE uint16_t
+UPB_PRIVATE(_upb_MiniTableField_Offset)(const struct upb_MiniTableField* f) {
+ return f->UPB_ONLYBITS(offset);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_OneofOffset)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(f));
+ return ~(ptrdiff_t)f->presence;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(f) ==
+ kUpb_FieldRep_NativePointer);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_IsArray)(f));
+ UPB_ASSUME(f->presence == 0);
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableField_CheckIsMap)(
+ const struct upb_MiniTableField* f) {
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(f) ==
+ kUpb_FieldRep_NativePointer);
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_IsMap)(f));
+ UPB_ASSUME(f->presence == 0);
+}
+
+UPB_INLINE size_t UPB_PRIVATE(_upb_MiniTableField_ElemSizeLg2)(
+ const struct upb_MiniTableField* f) {
+ const upb_FieldType field_type = UPB_PRIVATE(_upb_MiniTableField_Type)(f);
+ return UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
+}
+
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/mini_table_field.ts)
+
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/upb/mini_table/internal/file.h b/upb/mini_table/internal/file.h
index c8f069f..0afabcf 100644
--- a/upb/mini_table/internal/file.h
+++ b/upb/mini_table/internal/file.h
@@ -8,22 +8,59 @@
#ifndef UPB_MINI_TABLE_INTERNAL_FILE_H_
#define UPB_MINI_TABLE_INTERNAL_FILE_H_
-#include "upb/mini_table/internal/enum.h"
-#include "upb/mini_table/internal/extension.h"
-#include "upb/mini_table/internal/message.h"
-
// Must be last.
#include "upb/port/def.inc"
struct upb_MiniTableFile {
- const struct upb_MiniTable** msgs;
- const struct upb_MiniTableEnum** enums;
- const struct upb_MiniTableExtension** exts;
- int msg_count;
- int enum_count;
- int ext_count;
+ const struct upb_MiniTable** UPB_PRIVATE(msgs);
+ const struct upb_MiniTableEnum** UPB_PRIVATE(enums);
+ const struct upb_MiniTableExtension** UPB_PRIVATE(exts);
+ int UPB_PRIVATE(msg_count);
+ int UPB_PRIVATE(enum_count);
+ int UPB_PRIVATE(ext_count);
};
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_EnumCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(enum_count);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_ExtensionCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(ext_count);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTableFile_MessageCount)(
+ const struct upb_MiniTableFile* f) {
+ return f->UPB_PRIVATE(msg_count);
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableFile_Enum)(
+ const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(enum_count));
+ return f->UPB_PRIVATE(enums)[i];
+}
+
+UPB_INLINE const struct upb_MiniTableExtension* UPB_PRIVATE(
+ _upb_MiniTableFile_Extension)(const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(ext_count));
+ return f->UPB_PRIVATE(exts)[i];
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableFile_Message)(
+ const struct upb_MiniTableFile* f, int i) {
+ UPB_ASSERT(i < f->UPB_PRIVATE(msg_count));
+ return f->UPB_PRIVATE(msgs)[i];
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
#include "upb/port/undef.inc"
#endif /* UPB_MINI_TABLE_INTERNAL_FILE_H_ */
diff --git a/upb/mini_table/internal/message.c b/upb/mini_table/internal/message.c
index b25edac..a1d736a 100644
--- a/upb/mini_table/internal/message.c
+++ b/upb/mini_table/internal/message.c
@@ -7,13 +7,19 @@
#include "upb/mini_table/internal/message.h"
-const struct upb_MiniTable _kUpb_MiniTable_Empty = {
- .subs = NULL,
- .fields = NULL,
- .size = 0,
- .field_count = 0,
- .ext = kUpb_ExtMode_NonExtendable,
- .dense_below = 0,
- .table_mask = -1,
- .required_count = 0,
+#include <stddef.h>
+
+// Must be last.
+#include "upb/port/def.inc"
+
+// A MiniTable for an empty message, used for unlinked sub-messages.
+const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty) = {
+ .UPB_PRIVATE(subs) = NULL,
+ .UPB_PRIVATE(fields) = NULL,
+ .UPB_PRIVATE(size) = 0,
+ .UPB_PRIVATE(field_count) = 0,
+ .UPB_PRIVATE(ext) = kUpb_ExtMode_NonExtendable,
+ .UPB_PRIVATE(dense_below) = 0,
+ .UPB_PRIVATE(table_mask) = -1,
+ .UPB_PRIVATE(required_count) = 0,
};
diff --git a/upb/mini_table/internal/message.h b/upb/mini_table/internal/message.h
index 3457ea2..d833a45 100644
--- a/upb/mini_table/internal/message.h
+++ b/upb/mini_table/internal/message.h
@@ -8,15 +8,18 @@
#ifndef UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
#define UPB_MINI_TABLE_INTERNAL_MESSAGE_H_
-#include "upb/message/types.h"
+#include <stdint.h>
+
#include "upb/mini_table/internal/field.h"
+#include "upb/mini_table/internal/sub.h"
// Must be last.
#include "upb/port/def.inc"
struct upb_Decoder;
+struct upb_Message;
typedef const char* _upb_FieldParser(struct upb_Decoder* d, const char* ptr,
- upb_Message* msg, intptr_t table,
+ struct upb_Message* msg, intptr_t table,
uint64_t hasbits, uint64_t data);
typedef struct {
uint64_t field_data;
@@ -35,47 +38,116 @@
kUpb_ExtMode_IsMapEntry = 4,
} upb_ExtMode;
-union upb_MiniTableSub;
-
// upb_MiniTable represents the memory layout of a given upb_MessageDef.
// The members are public so generated code can initialize them,
// but users MUST NOT directly read or write any of its members.
+
+// LINT.IfChange(minitable_struct_definition)
struct upb_MiniTable {
- const union upb_MiniTableSub* subs;
- const struct upb_MiniTableField* fields;
+ const union upb_MiniTableSub* UPB_PRIVATE(subs);
+ const struct upb_MiniTableField* UPB_ONLYBITS(fields);
// Must be aligned to sizeof(void*). Doesn't include internal members like
// unknown fields, extension dict, pointer to msglayout, etc.
- uint16_t size;
+ uint16_t UPB_PRIVATE(size);
- uint16_t field_count;
- uint8_t ext; // upb_ExtMode, declared as uint8_t so sizeof(ext) == 1
- uint8_t dense_below;
- uint8_t table_mask;
- uint8_t required_count; // Required fields have the lowest hasbits.
+ uint16_t UPB_ONLYBITS(field_count);
+
+ uint8_t UPB_PRIVATE(ext); // upb_ExtMode, uint8_t here so sizeof(ext) == 1
+ uint8_t UPB_PRIVATE(dense_below);
+ uint8_t UPB_PRIVATE(table_mask);
+ uint8_t UPB_PRIVATE(required_count); // Required fields have the low hasbits.
// To statically initialize the tables of variable length, we need a flexible
// array member, and we need to compile in gnu99 mode (constant initialization
// of flexible array members is a GNU extension, not in C99 unfortunately.
- _upb_FastTable_Entry fasttable[];
+ _upb_FastTable_Entry UPB_PRIVATE(fasttable)[];
};
+// LINT.ThenChange(//depot/google3/third_party/upb/bits/typescript/mini_table.ts)
#ifdef __cplusplus
extern "C" {
#endif
-// A MiniTable for an empty message, used for unlinked sub-messages.
-extern const struct upb_MiniTable _kUpb_MiniTable_Empty;
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTable_Empty)(void) {
+ extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty);
-// Computes a bitmask in which the |l->required_count| lowest bits are set,
+ return &UPB_PRIVATE(_kUpb_MiniTable_Empty);
+}
+
+UPB_INLINE int UPB_PRIVATE(_upb_MiniTable_FieldCount)(
+ const struct upb_MiniTable* m) {
+ return m->UPB_ONLYBITS(field_count);
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_IsEmpty)(
+ const struct upb_MiniTable* m) {
+ extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_Empty);
+
+ return m == &UPB_PRIVATE(_kUpb_MiniTable_Empty);
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTable_GetFieldByIndex)(const struct upb_MiniTable* m, uint32_t i) {
+ return &m->UPB_ONLYBITS(fields)[i];
+}
+
+UPB_INLINE const union upb_MiniTableSub* UPB_PRIVATE(
+ _upb_MiniTable_GetSubByIndex)(const struct upb_MiniTable* m, uint32_t i) {
+ return &m->UPB_PRIVATE(subs)[i];
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+ _upb_MiniTable_GetSubMessageTable)(const struct upb_MiniTable* m,
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_CType)(f) == kUpb_CType_Message);
+ const struct upb_MiniTable* ret = UPB_PRIVATE(_upb_MiniTableSub_Message)(
+ m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSUME(ret);
+ return UPB_PRIVATE(_upb_MiniTable_IsEmpty)(ret) ? NULL : ret;
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(
+ _upb_MiniTable_GetSubEnumTable)(const struct upb_MiniTable* m,
+ const struct upb_MiniTableField* f) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_CType)(f) == kUpb_CType_Enum);
+ return UPB_PRIVATE(_upb_MiniTableSub_Enum)(
+ m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(_upb_MiniTable_MapKey)(
+ const struct upb_MiniTable* m) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
+ const struct upb_MiniTableField* f =
+ UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 0);
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 1);
+ return f;
+}
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+ _upb_MiniTable_MapValue)(const struct upb_MiniTable* m) {
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
+ const struct upb_MiniTableField* f =
+ UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 1);
+ UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 2);
+ return f;
+}
+
+UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(
+ const struct upb_MiniTable* m, const struct upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f) != NULL;
+}
+
+// Computes a bitmask in which the |m->required_count| lowest bits are set,
// except that we skip the lowest bit (because upb never uses hasbit 0).
//
// Sample output:
-// requiredmask(1) => 0b10 (0x2)
-// requiredmask(5) => 0b111110 (0x3e)
-UPB_INLINE uint64_t upb_MiniTable_requiredmask(const struct upb_MiniTable* l) {
- int n = l->required_count;
- assert(0 < n && n <= 63);
+// RequiredMask(1) => 0b10 (0x2)
+// RequiredMask(5) => 0b111110 (0x3e)
+UPB_INLINE uint64_t
+UPB_PRIVATE(_upb_MiniTable_RequiredMask)(const struct upb_MiniTable* m) {
+ int n = m->UPB_PRIVATE(required_count);
+ UPB_ASSERT(0 < n && n <= 63);
return ((1ULL << n) - 1) << 1;
}
diff --git a/upb/mini_table/internal/size_log2.h b/upb/mini_table/internal/size_log2.h
new file mode 100644
index 0000000..291ead0
--- /dev/null
+++ b/upb/mini_table/internal/size_log2.h
@@ -0,0 +1,77 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+// https://developers.google.com/protocol-buffers/
+///
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_
+#define UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "upb/base/descriptor_constants.h"
+
+// Must be last.
+#include "upb/port/def.inc"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Return the log2 of the storage size in bytes for a upb_CType
+UPB_INLINE int UPB_PRIVATE(_upb_CType_SizeLg2)(upb_CType c_type) {
+ static const int8_t size[] = {
+ 0, // kUpb_CType_Bool
+ 2, // kUpb_CType_Float
+ 2, // kUpb_CType_Int32
+ 2, // kUpb_CType_UInt32
+ 2, // kUpb_CType_Enum
+ UPB_SIZE(2, 3), // kUpb_CType_Message
+ 3, // kUpb_CType_Double
+ 3, // kUpb_CType_Int64
+ 3, // kUpb_CType_UInt64
+ UPB_SIZE(3, 4), // kUpb_CType_String
+ UPB_SIZE(3, 4), // kUpb_CType_Bytes
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return size[c_type - 1];
+}
+
+// Return the log2 of the storage size in bytes for a upb_FieldType
+UPB_INLINE int UPB_PRIVATE(_upb_FieldType_SizeLg2)(upb_FieldType field_type) {
+ static const int8_t size[] = {
+ 3, // kUpb_FieldType_Double
+ 2, // kUpb_FieldType_Float
+ 3, // kUpb_FieldType_Int64
+ 3, // kUpb_FieldType_UInt64
+ 2, // kUpb_FieldType_Int32
+ 3, // kUpb_FieldType_Fixed64
+ 2, // kUpb_FieldType_Fixed32
+ 0, // kUpb_FieldType_Bool
+ UPB_SIZE(3, 4), // kUpb_FieldType_String
+ UPB_SIZE(2, 3), // kUpb_FieldType_Group
+ UPB_SIZE(2, 3), // kUpb_FieldType_Message
+ UPB_SIZE(3, 4), // kUpb_FieldType_Bytes
+ 2, // kUpb_FieldType_UInt32
+ 2, // kUpb_FieldType_Enum
+ 2, // kUpb_FieldType_SFixed32
+ 3, // kUpb_FieldType_SFixed64
+ 2, // kUpb_FieldType_SInt32
+ 3, // kUpb_FieldType_SInt64
+ };
+
+ // -1 here because the enum is one-based but the table is zero-based.
+ return size[field_type - 1];
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif /* UPB_MINI_TABLE_INTERNAL_SIZE_LOG2_H_ */
diff --git a/upb/mini_table/internal/sub.h b/upb/mini_table/internal/sub.h
index 7887dba..99e35bd 100644
--- a/upb/mini_table/internal/sub.h
+++ b/upb/mini_table/internal/sub.h
@@ -4,15 +4,50 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+
#ifndef UPB_MINI_TABLE_INTERNAL_SUB_H_
#define UPB_MINI_TABLE_INTERNAL_SUB_H_
-#include "upb/mini_table/internal/enum.h"
-#include "upb/mini_table/internal/message.h"
+// Must be last.
+#include "upb/port/def.inc"
union upb_MiniTableSub {
- const struct upb_MiniTable* submsg;
- const struct upb_MiniTableEnum* subenum;
+ const struct upb_MiniTable* UPB_PRIVATE(submsg);
+ const struct upb_MiniTableEnum* UPB_PRIVATE(subenum);
};
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE union upb_MiniTableSub UPB_PRIVATE(_upb_MiniTableSub_FromEnum)(
+ const struct upb_MiniTableEnum* subenum) {
+ union upb_MiniTableSub out;
+ out.UPB_PRIVATE(subenum) = subenum;
+ return out;
+}
+
+UPB_INLINE union upb_MiniTableSub UPB_PRIVATE(_upb_MiniTableSub_FromMessage)(
+ const struct upb_MiniTable* submsg) {
+ union upb_MiniTableSub out;
+ out.UPB_PRIVATE(submsg) = submsg;
+ return out;
+}
+
+UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(_upb_MiniTableSub_Enum)(
+ const union upb_MiniTableSub sub) {
+ return sub.UPB_PRIVATE(subenum);
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(_upb_MiniTableSub_Message)(
+ const union upb_MiniTableSub sub) {
+ return sub.UPB_PRIVATE(submsg);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
diff --git a/upb/mini_table/message.c b/upb/mini_table/message.c
index 28635cd..5984a6c 100644
--- a/upb/mini_table/message.c
+++ b/upb/mini_table/message.c
@@ -8,29 +8,30 @@
#include "upb/mini_table/message.h"
#include <inttypes.h>
+#include <stddef.h>
+#include <stdint.h>
-#include "upb/mem/arena.h"
-#include "upb/mini_table/internal/message.h"
+#include "upb/mini_table/field.h"
// Must be last.
#include "upb/port/def.inc"
const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
- const upb_MiniTable* t, uint32_t number) {
+ const upb_MiniTable* m, uint32_t number) {
const size_t i = ((size_t)number) - 1; // 0 wraps to SIZE_MAX
// Ideal case: index into dense fields
- if (i < t->dense_below) {
- UPB_ASSERT(t->fields[i].number == number);
- return &t->fields[i];
+ if (i < m->UPB_PRIVATE(dense_below)) {
+ UPB_ASSERT(m->UPB_PRIVATE(fields)[i].UPB_PRIVATE(number) == number);
+ return &m->UPB_PRIVATE(fields)[i];
}
// Slow case: binary search
- int lo = t->dense_below;
- int hi = t->field_count - 1;
+ int lo = m->UPB_PRIVATE(dense_below);
+ int hi = m->UPB_PRIVATE(field_count) - 1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
- uint32_t num = t->fields[mid].number;
+ uint32_t num = m->UPB_PRIVATE(fields)[mid].UPB_PRIVATE(number);
if (num < number) {
lo = mid + 1;
continue;
@@ -39,22 +40,19 @@
hi = mid - 1;
continue;
}
- return &t->fields[mid];
+ return &m->UPB_PRIVATE(fields)[mid];
}
return NULL;
}
-static bool upb_MiniTable_Is_Oneof(const upb_MiniTableField* f) {
- return f->presence < 0;
-}
-
const upb_MiniTableField* upb_MiniTable_GetOneof(const upb_MiniTable* m,
const upb_MiniTableField* f) {
- if (UPB_UNLIKELY(!upb_MiniTable_Is_Oneof(f))) {
+ if (UPB_UNLIKELY(!upb_MiniTableField_IsInOneof(f))) {
return NULL;
}
- const upb_MiniTableField* ptr = &m->fields[0];
- const upb_MiniTableField* end = &m->fields[m->field_count];
+ const upb_MiniTableField* ptr = &m->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* end =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
for (; ptr < end; ptr++) {
if (ptr->presence == (*f).presence) {
return ptr;
@@ -66,7 +64,8 @@
bool upb_MiniTable_NextOneofField(const upb_MiniTable* m,
const upb_MiniTableField** f) {
const upb_MiniTableField* ptr = *f;
- const upb_MiniTableField* end = &m->fields[m->field_count];
+ const upb_MiniTableField* end =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
while (++ptr < end) {
if (ptr->presence == (*f)->presence) {
*f = ptr;
diff --git a/upb/mini_table/message.h b/upb/mini_table/message.h
index b53e87e..3a1517c 100644
--- a/upb/mini_table/message.h
+++ b/upb/mini_table/message.h
@@ -15,44 +15,53 @@
// Must be last.
#include "upb/port/def.inc"
+typedef struct upb_MiniTable upb_MiniTable;
+
#ifdef __cplusplus
extern "C" {
#endif
-typedef struct upb_MiniTable upb_MiniTable;
-
UPB_API const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
- const upb_MiniTable* table, uint32_t number);
+ const upb_MiniTable* m, uint32_t number);
UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_GetFieldByIndex(
- const upb_MiniTable* t, uint32_t index) {
- return &t->fields[index];
+ const upb_MiniTable* m, uint32_t index) {
+ return UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, index);
}
-// Returns the MiniTable for this message field. If the field is unlinked,
-// returns NULL.
+UPB_API_INLINE int upb_MiniTable_FieldCount(const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_FieldCount)(m);
+}
+
+// Returns the MiniTable for a message field, NULL if the field is unlinked.
UPB_API_INLINE const upb_MiniTable* upb_MiniTable_GetSubMessageTable(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_CType(field) == kUpb_CType_Message);
- const upb_MiniTable* ret =
- mini_table->subs[field->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSUME(ret);
- return ret == &_kUpb_MiniTable_Empty ? NULL : ret;
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f);
}
-// Returns the MiniTableEnum for this enum field. If the field is unlinked,
-// returns NULL.
+// Returns the MiniTableEnum for a message field, NULL if the field is unlinked.
UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTable_GetSubEnumTable(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- UPB_ASSERT(upb_MiniTableField_CType(field) == kUpb_CType_Enum);
- return mini_table->subs[field->UPB_PRIVATE(submsg_index)].subenum;
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_GetSubEnumTable)(m, f);
+}
+
+// Returns the MiniTableField for the key of a map.
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapKey(
+ const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_MapKey)(m);
+}
+
+// Returns the MiniTableField for the value of a map.
+UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapValue(
+ const upb_MiniTable* m) {
+ return UPB_PRIVATE(_upb_MiniTable_MapValue)(m);
}
// Returns true if this MiniTable field is linked to a MiniTable for the
// sub-message.
UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
- const upb_MiniTable* mini_table, const upb_MiniTableField* field) {
- return upb_MiniTable_GetSubMessageTable(mini_table, field) != NULL;
+ const upb_MiniTable* m, const upb_MiniTableField* f) {
+ return UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(m, f);
}
// If this field is in a oneof, returns the first field in the oneof.
diff --git a/upb/mini_table/sub.h b/upb/mini_table/sub.h
index 1c5d67e..c2798a1 100644
--- a/upb/mini_table/sub.h
+++ b/upb/mini_table/sub.h
@@ -8,8 +8,47 @@
#ifndef UPB_MINI_TABLE_SUB_H_
#define UPB_MINI_TABLE_SUB_H_
+#include "upb/mini_table/enum.h"
#include "upb/mini_table/internal/sub.h"
+#include "upb/mini_table/message.h"
+
+// Must be last.
+#include "upb/port/def.inc"
typedef union upb_MiniTableSub upb_MiniTableSub;
-#endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Constructors
+
+UPB_API_INLINE upb_MiniTableSub
+upb_MiniTableSub_FromEnum(const upb_MiniTableEnum* subenum) {
+ return UPB_PRIVATE(_upb_MiniTableSub_FromEnum)(subenum);
+}
+
+UPB_API_INLINE upb_MiniTableSub
+upb_MiniTableSub_FromMessage(const upb_MiniTable* submsg) {
+ return UPB_PRIVATE(_upb_MiniTableSub_FromMessage)(submsg);
+}
+
+// Getters
+
+UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTableSub_Enum(
+ upb_MiniTableSub sub) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Enum)(sub);
+}
+
+UPB_API_INLINE const upb_MiniTable* upb_MiniTableSub_Message(
+ upb_MiniTableSub sub) {
+ return UPB_PRIVATE(_upb_MiniTableSub_Message)(sub);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif /* UPB_MINI_TABLE_SUB_H_ */
diff --git a/upb/port/BUILD b/upb/port/BUILD
index fe20c08..db3a91f 100644
--- a/upb/port/BUILD
+++ b/upb/port/BUILD
@@ -45,8 +45,8 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
)
# end:github_only
diff --git a/upb/port/def.inc b/upb/port/def.inc
index aa335c8..5d07592 100644
--- a/upb/port/def.inc
+++ b/upb/port/def.inc
@@ -99,6 +99,13 @@
#define UPB_ALIGN_OF(type) offsetof (struct { char c; type member; }, member)
#endif
+#ifdef _MSC_VER
+// Some versions of our Windows compiler don't support the C11 syntax.
+#define UPB_ALIGN_AS(x) __declspec(align(x))
+#else
+#define UPB_ALIGN_AS(x) _Alignas(x)
+#endif
+
// Hints to the compiler about likely/unlikely branches.
#if defined (__GNUC__) || defined(__clang__)
#define UPB_LIKELY(x) __builtin_expect((bool)(x), 1)
@@ -185,6 +192,12 @@
#define UPB_PRIVATE(x) x##_dont_copy_me__upb_internal_use_only
+#ifdef UPB_ALLOW_PRIVATE_ACCESS__FOR_BITS_ONLY
+#define UPB_ONLYBITS(x) x
+#else
+#define UPB_ONLYBITS(x) UPB_PRIVATE(x)
+#endif
+
/* Configure whether fasttable is switched on or not. *************************/
#ifdef __has_attribute
diff --git a/upb/port/undef.inc b/upb/port/undef.inc
index 5a1429e..e4aec84 100644
--- a/upb/port/undef.inc
+++ b/upb/port/undef.inc
@@ -18,6 +18,7 @@
#undef UPB_ALIGN_DOWN
#undef UPB_ALIGN_MALLOC
#undef UPB_ALIGN_OF
+#undef UPB_ALIGN_AS
#undef UPB_MALLOC_ALIGN
#undef UPB_LIKELY
#undef UPB_UNLIKELY
@@ -54,3 +55,4 @@
#undef UPB_ATOMIC
#undef UPB_USE_C11_ATOMICS
#undef UPB_PRIVATE
+#undef UPB_ONLYBITS
diff --git a/upb/reflection/BUILD b/upb/reflection/BUILD
index f6ea369..ee3f40d 100644
--- a/upb/reflection/BUILD
+++ b/upb/reflection/BUILD
@@ -64,8 +64,10 @@
"//upb:base",
"//upb:mem",
"//upb:message",
- "//upb:message_value",
+ "//upb:mini_descriptor",
+ "//upb:mini_table",
"//upb:port",
+ "//upb/message:internal",
],
)
@@ -131,17 +133,17 @@
visibility = ["//visibility:public"],
deps = [
"//upb:base",
- "//upb:hash",
"//upb:mem",
"//upb:message",
- "//upb:message_accessors",
"//upb:message_copy",
- "//upb:message_value",
"//upb:mini_descriptor",
- "//upb:mini_descriptor_internal",
"//upb:mini_table",
"//upb:port",
+ "//upb:wire",
"//upb/base:internal",
+ "//upb/hash",
+ "//upb/message:internal",
+ "//upb/mini_descriptor:internal",
],
)
@@ -157,9 +159,9 @@
],
visibility = ["//visibility:public"],
deps = [
+ ":internal",
"//upb:mem",
"//upb:mini_descriptor",
- "//upb:reflection_internal",
],
)
@@ -173,13 +175,15 @@
],
deps = [
":descriptor_upb_proto",
- "@com_google_googletest//:gtest_main",
- "//upb:hash",
+ ":internal",
+ "//upb:base",
"//upb:mem",
"//upb:port",
"//upb:reflection",
- "//upb:reflection_internal",
+ "//upb/hash",
"@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -219,8 +223,8 @@
exclude = ["stage0/**"],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
)
# end:github_only
diff --git a/upb/reflection/def.hpp b/upb/reflection/def.hpp
index 855ef3d..983ffbf 100644
--- a/upb/reflection/def.hpp
+++ b/upb/reflection/def.hpp
@@ -8,13 +8,20 @@
#ifndef UPB_REFLECTION_DEF_HPP_
#define UPB_REFLECTION_DEF_HPP_
+#include <stdint.h>
+
#include <cstring>
#include <memory>
#include <string>
-#include <vector>
+#include "upb/base/descriptor_constants.h"
#include "upb/base/status.hpp"
+#include "upb/base/string_view.h"
#include "upb/mem/arena.hpp"
+#include "upb/mini_descriptor/decode.h"
+#include "upb/mini_table/enum.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
#include "upb/reflection/def.h"
#include "upb/reflection/internal/def_pool.h"
#include "upb/reflection/internal/enum_def.h"
@@ -555,9 +562,6 @@
std::unique_ptr<upb_DefPool, decltype(&upb_DefPool_Free)> ptr_;
};
-// TODO: This typedef is deprecated. Delete it.
-using SymbolTable = DefPool;
-
inline FileDefPtr FieldDefPtr::file() const {
return FileDefPtr(upb_FieldDef_File(ptr_));
}
diff --git a/upb/reflection/def_pool.c b/upb/reflection/def_pool.c
index 88e42de..0250d1b 100644
--- a/upb/reflection/def_pool.c
+++ b/upb/reflection/def_pool.c
@@ -7,9 +7,13 @@
#include "upb/reflection/internal/def_pool.h"
+#include "upb/base/status.h"
#include "upb/hash/int_table.h"
#include "upb/hash/str_table.h"
+#include "upb/mem/alloc.h"
+#include "upb/mem/arena.h"
#include "upb/reflection/def_type.h"
+#include "upb/reflection/file_def.h"
#include "upb/reflection/internal/def_builder.h"
#include "upb/reflection/internal/enum_def.h"
#include "upb/reflection/internal/enum_value_def.h"
@@ -62,8 +66,12 @@
if (!s->extreg) goto err;
s->platform = kUpb_MiniTablePlatform_Native;
- s->feature_set_defaults = UPB_DESC(FeatureSetDefaults_parse)(
- serialized_defaults, sizeof(serialized_defaults) - 1, s->arena);
+
+ upb_Status status;
+ if (!upb_DefPool_SetFeatureSetDefaults(
+ s, serialized_defaults, sizeof(serialized_defaults) - 1, &status)) {
+ goto err;
+ }
if (!s->feature_set_defaults) goto err;
@@ -79,6 +87,58 @@
return s->feature_set_defaults;
}
+bool upb_DefPool_SetFeatureSetDefaults(upb_DefPool* s,
+ const char* serialized_defaults,
+ size_t serialized_len,
+ upb_Status* status) {
+ const UPB_DESC(FeatureSetDefaults)* defaults = UPB_DESC(
+ FeatureSetDefaults_parse)(serialized_defaults, serialized_len, s->arena);
+ if (!defaults) {
+ upb_Status_SetErrorFormat(status, "Failed to parse defaults");
+ return false;
+ }
+ if (upb_strtable_count(&s->files) > 0) {
+ upb_Status_SetErrorFormat(status,
+ "Feature set defaults can't be changed once the "
+ "pool has started building");
+ return false;
+ }
+ int min_edition = UPB_DESC(FeatureSetDefaults_minimum_edition(defaults));
+ int max_edition = UPB_DESC(FeatureSetDefaults_maximum_edition(defaults));
+ if (min_edition > max_edition) {
+ upb_Status_SetErrorFormat(status, "Invalid edition range %s to %s",
+ upb_FileDef_EditionName(min_edition),
+ upb_FileDef_EditionName(max_edition));
+ return false;
+ }
+ size_t size;
+ const UPB_DESC(
+ FeatureSetDefaults_FeatureSetEditionDefault)* const* default_list =
+ UPB_DESC(FeatureSetDefaults_defaults(defaults, &size));
+ int prev_edition = UPB_DESC(EDITION_UNKNOWN);
+ for (size_t i = 0; i < size; ++i) {
+ int edition = UPB_DESC(
+ FeatureSetDefaults_FeatureSetEditionDefault_edition(default_list[i]));
+ if (edition == UPB_DESC(EDITION_UNKNOWN)) {
+ upb_Status_SetErrorFormat(status, "Invalid edition UNKNOWN specified");
+ return false;
+ }
+ if (edition <= prev_edition) {
+ upb_Status_SetErrorFormat(status,
+ "Feature set defaults are not strictly "
+ "increasing, %s is greater than or equal to %s",
+ upb_FileDef_EditionName(prev_edition),
+ upb_FileDef_EditionName(edition));
+ return false;
+ }
+ prev_edition = edition;
+ }
+
+ // Copy the defaults into the pool.
+ s->feature_set_defaults = defaults;
+ return true;
+}
+
bool _upb_DefPool_InsertExt(upb_DefPool* s, const upb_MiniTableExtension* ext,
const upb_FieldDef* f) {
return upb_inttable_insert(&s->exts, (uintptr_t)ext, upb_value_constptr(f),
@@ -446,7 +506,7 @@
const upb_FieldDef* f = upb_value_getconstptr(val);
if (upb_FieldDef_ContainingType(f) == m) n++;
}
- const upb_FieldDef** exts = malloc(n * sizeof(*exts));
+ const upb_FieldDef** exts = upb_gmalloc(n * sizeof(*exts));
iter = UPB_INTTABLE_BEGIN;
size_t i = 0;
while (upb_inttable_next(&s->exts, &key, &val, &iter)) {
diff --git a/upb/reflection/def_pool.h b/upb/reflection/def_pool.h
index 63cce8a..7ca02a8 100644
--- a/upb/reflection/def_pool.h
+++ b/upb/reflection/def_pool.h
@@ -29,6 +29,11 @@
UPB_API const UPB_DESC(FeatureSetDefaults) *
upb_DefPool_FeatureSetDefaults(const upb_DefPool* s);
+UPB_API bool upb_DefPool_SetFeatureSetDefaults(upb_DefPool* s,
+ const char* serialized_defaults,
+ size_t serialized_len,
+ upb_Status* status);
+
UPB_API const upb_MessageDef* upb_DefPool_FindMessageByName(
const upb_DefPool* s, const char* sym);
@@ -51,7 +56,7 @@
const upb_FieldDef* upb_DefPool_FindExtensionByMiniTable(
const upb_DefPool* s, const upb_MiniTableExtension* ext);
-const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
+UPB_API const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
const char* sym);
const upb_FieldDef* upb_DefPool_FindExtensionByNameWithSize(
@@ -74,7 +79,7 @@
upb_DefPool* s, const UPB_DESC(FileDescriptorProto) * file_proto,
upb_Status* status);
-const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
+UPB_API const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
const upb_DefPool* s);
const upb_FieldDef** upb_DefPool_GetAllExtensions(const upb_DefPool* s,
diff --git a/upb/reflection/enum_def.c b/upb/reflection/enum_def.c
index 8ba894f..de85cbd 100644
--- a/upb/reflection/enum_def.c
+++ b/upb/reflection/enum_def.c
@@ -7,16 +7,27 @@
#include "upb/reflection/internal/enum_def.h"
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "upb/base/status.h"
+#include "upb/base/string_view.h"
+#include "upb/hash/common.h"
#include "upb/hash/int_table.h"
#include "upb/hash/str_table.h"
+#include "upb/mem/arena.h"
#include "upb/mini_descriptor/decode.h"
+#include "upb/mini_descriptor/internal/encode.h"
+#include "upb/mini_table/enum.h"
+#include "upb/mini_table/file.h"
+#include "upb/reflection/def.h"
#include "upb/reflection/def_type.h"
#include "upb/reflection/internal/def_builder.h"
#include "upb/reflection/internal/desc_state.h"
#include "upb/reflection/internal/enum_reserved_range.h"
#include "upb/reflection/internal/enum_value_def.h"
#include "upb/reflection/internal/file_def.h"
-#include "upb/reflection/internal/message_def.h"
#include "upb/reflection/internal/strdup2.h"
// Must be last.
@@ -74,6 +85,11 @@
return e->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_EnumDef_ResolvedFeatures(const upb_EnumDef* e) {
+ return e->resolved_features;
+}
+
const char* upb_EnumDef_FullName(const upb_EnumDef* e) { return e->full_name; }
const char* upb_EnumDef_Name(const upb_EnumDef* e) {
@@ -269,8 +285,7 @@
if (upb_EnumDef_IsClosed(e)) {
if (ctx->layout) {
- UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count);
- e->layout = ctx->layout->enums[ctx->enum_count++];
+ e->layout = upb_MiniTableFile_Enum(ctx->layout, ctx->enum_count++);
} else {
e->layout = create_enumlayout(ctx, e);
}
diff --git a/upb/reflection/enum_value_def.c b/upb/reflection/enum_value_def.c
index d250daa..b9b94c9 100644
--- a/upb/reflection/enum_value_def.c
+++ b/upb/reflection/enum_value_def.c
@@ -64,6 +64,11 @@
return v->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_EnumValueDef_ResolvedFeatures(const upb_EnumValueDef* e) {
+ return e->resolved_features;
+}
+
const upb_EnumDef* upb_EnumValueDef_Enum(const upb_EnumValueDef* v) {
return v->parent;
}
diff --git a/upb/reflection/field_def.c b/upb/reflection/field_def.c
index 0a4ae25..8f849a5 100644
--- a/upb/reflection/field_def.c
+++ b/upb/reflection/field_def.c
@@ -10,14 +10,27 @@
#include <ctype.h>
#include <errno.h>
#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
#include "upb/base/descriptor_constants.h"
+#include "upb/base/string_view.h"
+#include "upb/base/upcast.h"
+#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
#include "upb/mini_descriptor/decode.h"
+#include "upb/mini_descriptor/internal/encode.h"
#include "upb/mini_descriptor/internal/modifiers.h"
+#include "upb/mini_table/enum.h"
+#include "upb/mini_table/extension.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
#include "upb/reflection/def.h"
#include "upb/reflection/def_type.h"
#include "upb/reflection/internal/def_builder.h"
+#include "upb/reflection/internal/def_pool.h"
#include "upb/reflection/internal/desc_state.h"
#include "upb/reflection/internal/enum_def.h"
#include "upb/reflection/internal/file_def.h"
@@ -84,43 +97,17 @@
return f->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_FieldDef_ResolvedFeatures(const upb_FieldDef* f) {
+ return f->resolved_features;
+}
+
const char* upb_FieldDef_FullName(const upb_FieldDef* f) {
return f->full_name;
}
upb_CType upb_FieldDef_CType(const upb_FieldDef* f) {
- switch (f->type_) {
- case kUpb_FieldType_Double:
- return kUpb_CType_Double;
- case kUpb_FieldType_Float:
- return kUpb_CType_Float;
- case kUpb_FieldType_Int64:
- case kUpb_FieldType_SInt64:
- case kUpb_FieldType_SFixed64:
- return kUpb_CType_Int64;
- case kUpb_FieldType_Int32:
- case kUpb_FieldType_SFixed32:
- case kUpb_FieldType_SInt32:
- return kUpb_CType_Int32;
- case kUpb_FieldType_UInt64:
- case kUpb_FieldType_Fixed64:
- return kUpb_CType_UInt64;
- case kUpb_FieldType_UInt32:
- case kUpb_FieldType_Fixed32:
- return kUpb_CType_UInt32;
- case kUpb_FieldType_Enum:
- return kUpb_CType_Enum;
- case kUpb_FieldType_Bool:
- return kUpb_CType_Bool;
- case kUpb_FieldType_String:
- return kUpb_CType_String;
- case kUpb_FieldType_Bytes:
- return kUpb_CType_Bytes;
- case kUpb_FieldType_Group:
- case kUpb_FieldType_Message:
- return kUpb_CType_Message;
- }
- UPB_UNREACHABLE();
+ return upb_FieldType_CType(f->type_);
}
upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f) {
@@ -246,7 +233,7 @@
file, f->layout_index);
} else {
const upb_MiniTable* layout = upb_MessageDef_MiniTable(f->msgdef);
- return &layout->fields[f->layout_index];
+ return &layout->UPB_PRIVATE(fields)[f->layout_index];
}
}
@@ -620,7 +607,8 @@
bool implicit = false;
if (syntax != kUpb_Syntax_Editions) {
- upb_Message_Clear(ctx->legacy_features, UPB_DESC_MINITABLE(FeatureSet));
+ upb_Message_Clear(UPB_UPCAST(ctx->legacy_features),
+ UPB_DESC_MINITABLE(FeatureSet));
if (_upb_FieldDef_InferLegacyFeatures(ctx, f, field_proto, f->opts, syntax,
ctx->legacy_features)) {
implicit = true;
@@ -628,6 +616,25 @@
}
}
+ if (UPB_DESC(FieldDescriptorProto_has_oneof_index)(field_proto)) {
+ int oneof_index = UPB_DESC(FieldDescriptorProto_oneof_index)(field_proto);
+
+ if (!m) {
+ _upb_DefBuilder_Errf(ctx, "oneof field (%s) has no containing msg",
+ f->full_name);
+ }
+
+ if (oneof_index >= upb_MessageDef_OneofCount(m)) {
+ _upb_DefBuilder_Errf(ctx, "oneof_index out of range (%s)", f->full_name);
+ }
+
+ upb_OneofDef* oneof = (upb_OneofDef*)upb_MessageDef_Oneof(m, oneof_index);
+ f->scope.oneof = oneof;
+ parent_features = upb_OneofDef_ResolvedFeatures(oneof);
+
+ _upb_OneofDef_Insert(ctx, oneof, f, name.data, name.size);
+ }
+
f->resolved_features = _upb_DefBuilder_DoResolveFeatures(
ctx, parent_features, unresolved_features, implicit);
@@ -691,26 +698,10 @@
f->sub.unresolved = field_proto;
if (UPB_DESC(FieldDescriptorProto_has_oneof_index)(field_proto)) {
- int oneof_index = UPB_DESC(FieldDescriptorProto_oneof_index)(field_proto);
-
if (upb_FieldDef_Label(f) != kUpb_Label_Optional) {
_upb_DefBuilder_Errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
f->full_name);
}
-
- if (!m) {
- _upb_DefBuilder_Errf(ctx, "oneof field (%s) has no containing msg",
- f->full_name);
- }
-
- if (oneof_index >= upb_MessageDef_OneofCount(m)) {
- _upb_DefBuilder_Errf(ctx, "oneof_index out of range (%s)", f->full_name);
- }
-
- upb_OneofDef* oneof = (upb_OneofDef*)upb_MessageDef_Oneof(m, oneof_index);
- f->scope.oneof = oneof;
-
- _upb_OneofDef_Insert(ctx, oneof, f, name.data, name.size);
}
f->has_presence =
@@ -739,7 +730,8 @@
f->layout_index = ctx->ext_count++;
if (ctx->layout) {
- UPB_ASSERT(_upb_FieldDef_ExtensionMiniTable(f)->field.number == f->number_);
+ UPB_ASSERT(upb_MiniTableExtension_Number(
+ _upb_FieldDef_ExtensionMiniTable(f)) == f->number_);
}
}
@@ -934,7 +926,7 @@
const upb_MiniTableExtension* ext = _upb_FieldDef_ExtensionMiniTable(f);
if (ctx->layout) {
- UPB_ASSERT(upb_FieldDef_Number(f) == ext->field.number);
+ UPB_ASSERT(upb_FieldDef_Number(f) == upb_MiniTableExtension_Number(ext));
} else {
upb_StringView desc;
if (!upb_FieldDef_MiniDescriptorEncode(f, ctx->tmp_arena, &desc)) {
@@ -944,9 +936,11 @@
upb_MiniTableExtension* mut_ext = (upb_MiniTableExtension*)ext;
upb_MiniTableSub sub = {NULL};
if (upb_FieldDef_IsSubMessage(f)) {
- sub.submsg = upb_MessageDef_MiniTable(f->sub.msgdef);
+ const upb_MiniTable* submsg = upb_MessageDef_MiniTable(f->sub.msgdef);
+ sub = upb_MiniTableSub_FromMessage(submsg);
} else if (_upb_FieldDef_IsClosedEnum(f)) {
- sub.subenum = _upb_EnumDef_MiniTable(f->sub.enumdef);
+ const upb_MiniTableEnum* subenum = _upb_EnumDef_MiniTable(f->sub.enumdef);
+ sub = upb_MiniTableSub_FromEnum(subenum);
}
bool ok2 = upb_MiniTableExtension_Init(desc.data, desc.size, mut_ext,
upb_MessageDef_MiniTable(f->msgdef),
diff --git a/upb/reflection/file_def.c b/upb/reflection/file_def.c
index abdbd35..e287d7e 100644
--- a/upb/reflection/file_def.c
+++ b/upb/reflection/file_def.c
@@ -8,9 +8,16 @@
#include "upb/reflection/internal/file_def.h"
#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
-#include "upb/reflection/def_pool.h"
+#include "upb/base/string_view.h"
+#include "upb/mini_table/extension.h"
+#include "upb/mini_table/extension_registry.h"
+#include "upb/mini_table/file.h"
+#include "upb/reflection/def.h"
#include "upb/reflection/internal/def_builder.h"
+#include "upb/reflection/internal/def_pool.h"
#include "upb/reflection/internal/enum_def.h"
#include "upb/reflection/internal/field_def.h"
#include "upb/reflection/internal/message_def.h"
@@ -48,6 +55,20 @@
upb_Syntax syntax;
};
+UPB_API const char* upb_FileDef_EditionName(int edition) {
+ // TODO Synchronize this with descriptor.proto better.
+ switch (edition) {
+ case UPB_DESC(EDITION_PROTO2):
+ return "PROTO2";
+ case UPB_DESC(EDITION_PROTO3):
+ return "PROTO3";
+ case UPB_DESC(EDITION_2023):
+ return "2023";
+ default:
+ return "UNKNOWN";
+ }
+}
+
const UPB_DESC(FileOptions) * upb_FileDef_Options(const upb_FileDef* f) {
return f->opts;
}
@@ -180,11 +201,21 @@
int min = UPB_DESC(FeatureSetDefaults_minimum_edition)(defaults);
int max = UPB_DESC(FeatureSetDefaults_maximum_edition)(defaults);
- if (edition < min || edition > max) {
+ if (edition < min) {
_upb_DefBuilder_Errf(ctx,
- "Edition %d is outside the supported range [%d, %d] "
+ "Edition %s is earlier than the minimum edition %s "
"given in the defaults",
- edition, min, max);
+ upb_FileDef_EditionName(edition),
+ upb_FileDef_EditionName(min));
+ return NULL;
+ }
+ if (edition > max) {
+ _upb_DefBuilder_Errf(ctx,
+ "Edition %s is later than the maximum edition %s "
+ "given in the defaults",
+ upb_FileDef_EditionName(edition),
+ upb_FileDef_EditionName(max));
+ return NULL;
}
size_t n;
@@ -198,6 +229,11 @@
}
ret = UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault_features)(d[i]);
}
+ if (ret == NULL) {
+ _upb_DefBuilder_Errf(ctx, "No valid default found for edition %s",
+ upb_FileDef_EditionName(edition));
+ return NULL;
+ }
return ret;
}
@@ -229,11 +265,12 @@
if (ctx->layout) {
// We are using the ext layouts that were passed in.
- file->ext_layouts = ctx->layout->exts;
- if (ctx->layout->ext_count != file->ext_count) {
+ file->ext_layouts = ctx->layout->UPB_PRIVATE(exts);
+ const int mt_ext_count = upb_MiniTableFile_ExtensionCount(ctx->layout);
+ if (mt_ext_count != file->ext_count) {
_upb_DefBuilder_Errf(ctx,
"Extension count did not match layout (%d vs %d)",
- ctx->layout->ext_count, file->ext_count);
+ mt_ext_count, file->ext_count);
}
} else {
// We are building ext layouts from scratch.
diff --git a/upb/reflection/file_def.h b/upb/reflection/file_def.h
index 912d008..e3a7442 100644
--- a/upb/reflection/file_def.h
+++ b/upb/reflection/file_def.h
@@ -19,6 +19,8 @@
extern "C" {
#endif
+UPB_API const char* upb_FileDef_EditionName(int edition);
+
const upb_FileDef* upb_FileDef_Dependency(const upb_FileDef* f, int i);
int upb_FileDef_DependencyCount(const upb_FileDef* f);
bool upb_FileDef_HasOptions(const upb_FileDef* f);
diff --git a/upb/reflection/internal/def_builder.c b/upb/reflection/internal/def_builder.c
index d673798..7e56017 100644
--- a/upb/reflection/internal/def_builder.c
+++ b/upb/reflection/internal/def_builder.c
@@ -10,12 +10,15 @@
#include <string.h>
#include "upb/base/internal/log2.h"
+#include "upb/base/upcast.h"
+#include "upb/mem/alloc.h"
#include "upb/message/copy.h"
#include "upb/reflection/def_pool.h"
#include "upb/reflection/def_type.h"
#include "upb/reflection/field_def.h"
#include "upb/reflection/file_def.h"
#include "upb/reflection/internal/strdup2.h"
+#include "upb/wire/decode.h"
// Must be last.
#include "upb/port/def.inc"
@@ -26,7 +29,8 @@
* initialized to zeroes.
*
* We have to allocate an extra pointer for upb's internal metadata. */
-static const char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
+static UPB_ALIGN_AS(8) const
+ char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
const char* kUpbDefOptDefault = &opt_default_buf[sizeof(void*)];
const char* _upb_DefBuilder_FullToShort(const char* fullname) {
@@ -116,15 +120,15 @@
if (sym.size == 0) goto notfound;
upb_value v;
if (sym.data[0] == '.') {
- /* Symbols starting with '.' are absolute, so we do a single lookup.
- * Slice to omit the leading '.' */
+ // Symbols starting with '.' are absolute, so we do a single lookup.
+ // Slice to omit the leading '.'
if (!_upb_DefPool_LookupSym(ctx->symtab, sym.data + 1, sym.size - 1, &v)) {
goto notfound;
}
} else {
- /* Remove components from base until we find an entry or run out. */
+ // Remove components from base until we find an entry or run out.
size_t baselen = base ? strlen(base) : 0;
- char* tmp = malloc(sym.size + baselen + 1);
+ char* tmp = upb_gmalloc(sym.size + baselen + 1);
while (1) {
char* p = tmp;
if (baselen) {
@@ -138,11 +142,11 @@
break;
}
if (!remove_component(tmp, &baselen)) {
- free(tmp);
+ upb_gfree(tmp);
goto notfound;
}
}
- free(tmp);
+ upb_gfree(tmp);
}
*type = _upb_DefType_Type(v);
@@ -367,8 +371,8 @@
return false;
}
- *set =
- upb_Message_DeepClone(parent, UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
+ *set = (UPB_DESC(FeatureSet*))upb_Message_DeepClone(
+ UPB_UPCAST(parent), UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
if (!*set) _upb_DefBuilder_OomErr(ctx);
v = upb_value_ptr(*set);
@@ -405,7 +409,7 @@
}
upb_DecodeStatus dec_status =
- upb_Decode(child_bytes, child_size, resolved,
+ upb_Decode(child_bytes, child_size, UPB_UPCAST(resolved),
UPB_DESC_MINITABLE(FeatureSet), NULL, 0, ctx->arena);
if (dec_status != kUpb_DecodeStatus_Ok) _upb_DefBuilder_OomErr(ctx);
diff --git a/upb/reflection/internal/upb_edition_defaults.h b/upb/reflection/internal/upb_edition_defaults.h
index 587d3b1..b5fedd3 100644
--- a/upb/reflection/internal/upb_edition_defaults.h
+++ b/upb/reflection/internal/upb_edition_defaults.h
@@ -13,7 +13,7 @@
// features. This is used for feature resolution under Editions.
// NOLINTBEGIN
// clang-format off
-#define UPB_INTERNAL_UPB_EDITION_DEFAULTS "\n\021\022\014\010\001\020\002\030\002 \001(\0010\002\030\346\007\n\021\022\014\010\002\020\001\030\001 \002(\0010\001\030\347\007\n\021\022\014\010\001\020\001\030\001 \002(\0010\001\030\350\007 \346\007(\350\007"
+#define UPB_INTERNAL_UPB_EDITION_DEFAULTS "\n\021\022\014\010\001\020\002\030\002 \003(\0010\002\030\346\007\n\021\022\014\010\002\020\001\030\001 \002(\0010\001\030\347\007\n\021\022\014\010\001\020\001\030\001 \002(\0010\001\030\350\007 \346\007(\350\007"
// clang-format on
// NOLINTEND
diff --git a/upb/reflection/message.c b/upb/reflection/message.c
index dc014ae..471e6db 100644
--- a/upb/reflection/message.c
+++ b/upb/reflection/message.c
@@ -7,17 +7,20 @@
#include "upb/reflection/message.h"
+#include <stdint.h>
#include <string.h>
-#include "upb/hash/common.h"
+#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
+#include "upb/message/array.h"
+#include "upb/message/internal/accessors.h"
+#include "upb/message/internal/extension.h"
+#include "upb/message/internal/message.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
#include "upb/mini_table/field.h"
#include "upb/reflection/def.h"
#include "upb/reflection/def_pool.h"
-#include "upb/reflection/def_type.h"
-#include "upb/reflection/internal/field_def.h"
#include "upb/reflection/message_def.h"
#include "upb/reflection/oneof_def.h"
@@ -47,9 +50,7 @@
upb_MessageValue upb_Message_GetFieldByDef(const upb_Message* msg,
const upb_FieldDef* f) {
upb_MessageValue default_val = upb_FieldDef_Default(f);
- upb_MessageValue ret;
- _upb_Message_GetField(msg, upb_FieldDef_MiniTable(f), &default_val, &ret);
- return ret;
+ return upb_Message_GetField(msg, upb_FieldDef_MiniTable(f), default_val);
}
upb_MutableMessageValue upb_Message_Mutable(upb_Message* msg,
@@ -93,7 +94,7 @@
bool upb_Message_SetFieldByDef(upb_Message* msg, const upb_FieldDef* f,
upb_MessageValue val, upb_Arena* a) {
- return _upb_Message_SetField(msg, upb_FieldDef_MiniTable(f), &val, a);
+ return upb_Message_SetField(msg, upb_FieldDef_MiniTable(f), val, a);
}
void upb_Message_ClearFieldByDef(upb_Message* msg, const upb_FieldDef* f) {
@@ -121,7 +122,7 @@
if (upb_MiniTableField_HasPresence(field)) {
if (!upb_Message_HasFieldByDef(msg, f)) continue;
} else {
- switch (upb_FieldMode_Get(field)) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(field)) {
case kUpb_FieldMode_Map:
if (!val.map_val || upb_Map_Size(val.map_val) == 0) continue;
break;
@@ -129,7 +130,8 @@
if (!val.array_val || upb_Array_Size(val.array_val) == 0) continue;
break;
case kUpb_FieldMode_Scalar:
- if (!_upb_MiniTable_ValueIsNonZero(&val, field)) continue;
+ if (UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, &val))
+ continue;
break;
}
}
@@ -143,7 +145,7 @@
if (ext_pool) {
// Return any extensions that are set.
size_t count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &count);
+ const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getexts)(msg, &count);
if (i - n < count) {
ext += count - 1 - (i - n);
memcpy(out_val, &ext->data, sizeof(*out_val));
diff --git a/upb/reflection/message.h b/upb/reflection/message.h
index 54af6f1..d31f6b9 100644
--- a/upb/reflection/message.h
+++ b/upb/reflection/message.h
@@ -13,7 +13,6 @@
#include "upb/mem/arena.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
-#include "upb/message/value.h" // IWYU pragma: export
#include "upb/reflection/common.h"
// Must be last.
diff --git a/upb/reflection/message_def.c b/upb/reflection/message_def.c
index 96037d1..7bd72b2 100644
--- a/upb/reflection/message_def.c
+++ b/upb/reflection/message_def.c
@@ -7,13 +7,22 @@
#include "upb/reflection/internal/message_def.h"
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
#include "upb/base/descriptor_constants.h"
+#include "upb/base/string_view.h"
+#include "upb/hash/common.h"
#include "upb/hash/int_table.h"
#include "upb/hash/str_table.h"
+#include "upb/mem/arena.h"
#include "upb/mini_descriptor/decode.h"
+#include "upb/mini_descriptor/internal/encode.h"
#include "upb/mini_descriptor/internal/modifiers.h"
+#include "upb/mini_table/file.h"
+#include "upb/mini_table/message.h"
#include "upb/reflection/def.h"
-#include "upb/reflection/def_type.h"
#include "upb/reflection/internal/def_builder.h"
#include "upb/reflection/internal/desc_state.h"
#include "upb/reflection/internal/enum_def.h"
@@ -138,6 +147,11 @@
return m->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_MessageDef_ResolvedFeatures(const upb_MessageDef* m) {
+ return m->resolved_features;
+}
+
const char* upb_MessageDef_FullName(const upb_MessageDef* m) {
return m->full_name;
}
@@ -431,9 +445,8 @@
if (ctx->layout == NULL) {
m->layout = _upb_MessageDef_MakeMiniTable(ctx, m);
} else {
- UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count);
- m->layout = ctx->layout->msgs[ctx->msg_count++];
- UPB_ASSERT(m->field_count == m->layout->field_count);
+ m->layout = upb_MiniTableFile_Message(ctx->layout, ctx->msg_count++);
+ UPB_ASSERT(m->field_count == m->layout->UPB_PRIVATE(field_count));
// We don't need the result of this call, but it will assign layout_index
// for all the fields in O(n lg n) time.
@@ -469,9 +482,9 @@
UPB_ASSERT(layout_index < m->field_count);
upb_MiniTableField* mt_f =
- (upb_MiniTableField*)&m->layout->fields[layout_index];
+ (upb_MiniTableField*)&m->layout->UPB_PRIVATE(fields)[layout_index];
if (sub_m) {
- if (!mt->subs) {
+ if (!mt->UPB_PRIVATE(subs)) {
_upb_DefBuilder_Errf(ctx, "unexpected submsg for (%s)", m->full_name);
}
UPB_ASSERT(mt_f);
@@ -491,8 +504,9 @@
for (int i = 0; i < m->field_count; i++) {
const upb_FieldDef* f = upb_MessageDef_Field(m, i);
const int layout_index = _upb_FieldDef_LayoutIndex(f);
- UPB_ASSERT(layout_index < m->layout->field_count);
- const upb_MiniTableField* mt_f = &m->layout->fields[layout_index];
+ UPB_ASSERT(layout_index < m->layout->UPB_PRIVATE(field_count));
+ const upb_MiniTableField* mt_f =
+ &m->layout->UPB_PRIVATE(fields)[layout_index];
UPB_ASSERT(upb_FieldDef_Type(f) == upb_MiniTableField_Type(mt_f));
UPB_ASSERT(upb_FieldDef_CType(f) == upb_MiniTableField_CType(mt_f));
UPB_ASSERT(upb_FieldDef_HasPresence(f) ==
diff --git a/upb/reflection/method_def.c b/upb/reflection/method_def.c
index ee4e06e..8993b25 100644
--- a/upb/reflection/method_def.c
+++ b/upb/reflection/method_def.c
@@ -42,6 +42,11 @@
return m->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_MethodDef_ResolvedFeatures(const upb_MethodDef* m) {
+ return m->resolved_features;
+}
+
const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
return m->full_name;
}
diff --git a/upb/reflection/oneof_def.c b/upb/reflection/oneof_def.c
index 8f639df..4dc005e 100644
--- a/upb/reflection/oneof_def.c
+++ b/upb/reflection/oneof_def.c
@@ -45,6 +45,11 @@
return o->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_OneofDef_ResolvedFeatures(const upb_OneofDef* o) {
+ return o->resolved_features;
+}
+
const char* upb_OneofDef_FullName(const upb_OneofDef* o) {
return o->full_name;
}
diff --git a/upb/reflection/service_def.c b/upb/reflection/service_def.c
index 34ea9c9..8a06f3c 100644
--- a/upb/reflection/service_def.c
+++ b/upb/reflection/service_def.c
@@ -41,6 +41,11 @@
return s->opts != (void*)kUpbDefOptDefault;
}
+const UPB_DESC(FeatureSet) *
+ upb_ServiceDef_ResolvedFeatures(const upb_ServiceDef* s) {
+ return s->resolved_features;
+}
+
const char* upb_ServiceDef_FullName(const upb_ServiceDef* s) {
return s->full_name;
}
diff --git a/upb/reflection/stage0/google/protobuf/descriptor.upb.c b/upb/reflection/stage0/google/protobuf/descriptor.upb.c
index a3c69be..46c1e47 100644
--- a/upb/reflection/stage0/google/protobuf/descriptor.upb.c
+++ b/upb/reflection/stage0/google/protobuf/descriptor.upb.c
@@ -182,7 +182,7 @@
const upb_MiniTable* google__protobuf__FileOptions_msg_init() {
static upb_MiniTable* mini_table = NULL;
- static const char* mini_descriptor = "$P1f14/1d///a/b/c/c/d11a111/a11d3t|G";
+ static const char* mini_descriptor = "$P1f14/1d///a/b/c/c/d11a111b11d3t|G";
if (mini_table) return mini_table;
mini_table =
upb_MiniTable_Build(mini_descriptor, strlen(mini_descriptor),
@@ -401,7 +401,7 @@
const upb_MiniTableEnum* google_protobuf_Edition_enum_init() {
static const upb_MiniTableEnum* mini_table = NULL;
- static const char* mini_descriptor = "!)`~)qt_b)";
+ static const char* mini_descriptor = "!)`~)qt_b)|i}{~~`!";
if (mini_table) return mini_table;
mini_table =
upb_MiniTableEnum_Build(mini_descriptor, strlen(mini_descriptor),
@@ -471,7 +471,7 @@
const upb_MiniTableEnum* google_protobuf_FeatureSet_Utf8Validation_enum_init() {
static const upb_MiniTableEnum* mini_table = NULL;
- static const char* mini_descriptor = "!)";
+ static const char* mini_descriptor = "!/";
if (mini_table) return mini_table;
mini_table =
upb_MiniTableEnum_Build(mini_descriptor, strlen(mini_descriptor),
diff --git a/upb/reflection/stage0/google/protobuf/descriptor.upb.h b/upb/reflection/stage0/google/protobuf/descriptor.upb.h
index 064a821..932a818 100644
--- a/upb/reflection/stage0/google/protobuf/descriptor.upb.h
+++ b/upb/reflection/stage0/google/protobuf/descriptor.upb.h
@@ -67,38 +67,38 @@
extern const upb_MiniTableEnum* google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init();
extern const upb_MiniTableEnum* google_protobuf_MethodOptions_IdempotencyLevel_enum_init();
-typedef struct google_protobuf_FileDescriptorSet google_protobuf_FileDescriptorSet;
-typedef struct google_protobuf_FileDescriptorProto google_protobuf_FileDescriptorProto;
-typedef struct google_protobuf_DescriptorProto google_protobuf_DescriptorProto;
-typedef struct google_protobuf_DescriptorProto_ExtensionRange google_protobuf_DescriptorProto_ExtensionRange;
-typedef struct google_protobuf_DescriptorProto_ReservedRange google_protobuf_DescriptorProto_ReservedRange;
-typedef struct google_protobuf_ExtensionRangeOptions google_protobuf_ExtensionRangeOptions;
-typedef struct google_protobuf_ExtensionRangeOptions_Declaration google_protobuf_ExtensionRangeOptions_Declaration;
-typedef struct google_protobuf_FieldDescriptorProto google_protobuf_FieldDescriptorProto;
-typedef struct google_protobuf_OneofDescriptorProto google_protobuf_OneofDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto google_protobuf_EnumDescriptorProto;
-typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange google_protobuf_EnumDescriptorProto_EnumReservedRange;
-typedef struct google_protobuf_EnumValueDescriptorProto google_protobuf_EnumValueDescriptorProto;
-typedef struct google_protobuf_ServiceDescriptorProto google_protobuf_ServiceDescriptorProto;
-typedef struct google_protobuf_MethodDescriptorProto google_protobuf_MethodDescriptorProto;
-typedef struct google_protobuf_FileOptions google_protobuf_FileOptions;
-typedef struct google_protobuf_MessageOptions google_protobuf_MessageOptions;
-typedef struct google_protobuf_FieldOptions google_protobuf_FieldOptions;
-typedef struct google_protobuf_FieldOptions_EditionDefault google_protobuf_FieldOptions_EditionDefault;
-typedef struct google_protobuf_OneofOptions google_protobuf_OneofOptions;
-typedef struct google_protobuf_EnumOptions google_protobuf_EnumOptions;
-typedef struct google_protobuf_EnumValueOptions google_protobuf_EnumValueOptions;
-typedef struct google_protobuf_ServiceOptions google_protobuf_ServiceOptions;
-typedef struct google_protobuf_MethodOptions google_protobuf_MethodOptions;
-typedef struct google_protobuf_UninterpretedOption google_protobuf_UninterpretedOption;
-typedef struct google_protobuf_UninterpretedOption_NamePart google_protobuf_UninterpretedOption_NamePart;
-typedef struct google_protobuf_FeatureSet google_protobuf_FeatureSet;
-typedef struct google_protobuf_FeatureSetDefaults google_protobuf_FeatureSetDefaults;
-typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
-typedef struct google_protobuf_SourceCodeInfo google_protobuf_SourceCodeInfo;
-typedef struct google_protobuf_SourceCodeInfo_Location google_protobuf_SourceCodeInfo_Location;
-typedef struct google_protobuf_GeneratedCodeInfo google_protobuf_GeneratedCodeInfo;
-typedef struct google_protobuf_GeneratedCodeInfo_Annotation google_protobuf_GeneratedCodeInfo_Annotation;
+typedef struct google_protobuf_FileDescriptorSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorSet;
+typedef struct google_protobuf_FileDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FileDescriptorProto;
+typedef struct google_protobuf_DescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto;
+typedef struct google_protobuf_DescriptorProto_ExtensionRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ExtensionRange;
+typedef struct google_protobuf_DescriptorProto_ReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_DescriptorProto_ReservedRange;
+typedef struct google_protobuf_ExtensionRangeOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions;
+typedef struct google_protobuf_ExtensionRangeOptions_Declaration { upb_Message UPB_PRIVATE(base); } google_protobuf_ExtensionRangeOptions_Declaration;
+typedef struct google_protobuf_FieldDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldDescriptorProto;
+typedef struct google_protobuf_OneofDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto;
+typedef struct google_protobuf_EnumDescriptorProto_EnumReservedRange { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumDescriptorProto_EnumReservedRange;
+typedef struct google_protobuf_EnumValueDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueDescriptorProto;
+typedef struct google_protobuf_ServiceDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceDescriptorProto;
+typedef struct google_protobuf_MethodDescriptorProto { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodDescriptorProto;
+typedef struct google_protobuf_FileOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FileOptions;
+typedef struct google_protobuf_MessageOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MessageOptions;
+typedef struct google_protobuf_FieldOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions;
+typedef struct google_protobuf_FieldOptions_EditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FieldOptions_EditionDefault;
+typedef struct google_protobuf_OneofOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_OneofOptions;
+typedef struct google_protobuf_EnumOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumOptions;
+typedef struct google_protobuf_EnumValueOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_EnumValueOptions;
+typedef struct google_protobuf_ServiceOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_ServiceOptions;
+typedef struct google_protobuf_MethodOptions { upb_Message UPB_PRIVATE(base); } google_protobuf_MethodOptions;
+typedef struct google_protobuf_UninterpretedOption { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption;
+typedef struct google_protobuf_UninterpretedOption_NamePart { upb_Message UPB_PRIVATE(base); } google_protobuf_UninterpretedOption_NamePart;
+typedef struct google_protobuf_FeatureSet { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSet;
+typedef struct google_protobuf_FeatureSetDefaults { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults;
+typedef struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault { upb_Message UPB_PRIVATE(base); } google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault;
+typedef struct google_protobuf_SourceCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo;
+typedef struct google_protobuf_SourceCodeInfo_Location { upb_Message UPB_PRIVATE(base); } google_protobuf_SourceCodeInfo_Location;
+typedef struct google_protobuf_GeneratedCodeInfo { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo;
+typedef struct google_protobuf_GeneratedCodeInfo_Annotation { upb_Message UPB_PRIVATE(base); } google_protobuf_GeneratedCodeInfo_Annotation;
typedef enum {
google_protobuf_EDITION_UNKNOWN = 0,
@@ -109,7 +109,8 @@
google_protobuf_EDITION_2023 = 1000,
google_protobuf_EDITION_99997_TEST_ONLY = 99997,
google_protobuf_EDITION_99998_TEST_ONLY = 99998,
- google_protobuf_EDITION_99999_TEST_ONLY = 99999
+ google_protobuf_EDITION_99999_TEST_ONLY = 99999,
+ google_protobuf_EDITION_MAX = 2147483647
} google_protobuf_Edition;
typedef enum {
@@ -150,8 +151,8 @@
typedef enum {
google_protobuf_FeatureSet_UTF8_VALIDATION_UNKNOWN = 0,
- google_protobuf_FeatureSet_NONE = 1,
- google_protobuf_FeatureSet_VERIFY = 2
+ google_protobuf_FeatureSet_VERIFY = 2,
+ google_protobuf_FeatureSet_NONE = 3
} google_protobuf_FeatureSet_Utf8Validation;
typedef enum {
@@ -240,7 +241,8 @@
UPB_INLINE google_protobuf_FileDescriptorSet* google_protobuf_FileDescriptorSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FileDescriptorSet_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FileDescriptorSet_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -250,32 +252,32 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorSet* ret = google_protobuf_FileDescriptorSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FileDescriptorSet_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FileDescriptorSet_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize(const google_protobuf_FileDescriptorSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FileDescriptorSet_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FileDescriptorSet_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorSet_serialize_ex(const google_protobuf_FileDescriptorSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FileDescriptorSet_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FileDescriptorSet_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorSet_clear_file(google_protobuf_FileDescriptorSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileDescriptorProto* const* google_protobuf_FileDescriptorSet_file(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -284,32 +286,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorSet_file_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(const google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorSet_file_mutable_upb_array(google_protobuf_FileDescriptorSet* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorSet_has_file(const google_protobuf_FileDescriptorSet* msg) {
- size_t size;
- google_protobuf_FileDescriptorSet_file(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_mutable_file(google_protobuf_FileDescriptorSet* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -318,17 +315,21 @@
}
UPB_INLINE google_protobuf_FileDescriptorProto** google_protobuf_FileDescriptorSet_resize_file(google_protobuf_FileDescriptorSet* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorSet_add_file(google_protobuf_FileDescriptorSet* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorSet_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FileDescriptorProto* sub = (struct google_protobuf_FileDescriptorProto*)_upb_Message_New(google__protobuf__FileDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -340,7 +341,8 @@
UPB_INLINE google_protobuf_FileDescriptorProto* google_protobuf_FileDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FileDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FileDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -350,62 +352,64 @@
int options, upb_Arena* arena) {
google_protobuf_FileDescriptorProto* ret = google_protobuf_FileDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FileDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FileDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize(const google_protobuf_FileDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FileDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FileDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileDescriptorProto_serialize_ex(const google_protobuf_FileDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FileDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FileDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_name(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_name(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_name(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_package(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_package(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_package(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_FileDescriptorProto_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -414,35 +418,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_message_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_FileDescriptorProto_message_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -451,35 +450,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_message_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_message_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_message_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_message_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_enum_type(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_FileDescriptorProto_enum_type(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -488,35 +482,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_enum_type_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_enum_type_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_enum_type(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_service(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceDescriptorProto* const* google_protobuf_FileDescriptorProto_service(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ServiceDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -525,35 +514,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_service_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_service_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_service(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_service(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_extension(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_FileDescriptorProto_extension(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -562,65 +546,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_extension_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_extension_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_extension(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_options(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 8);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_options(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_FileOptions* default_val = NULL;
const google_protobuf_FileOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 8);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_options(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 8);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_source_code_info(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 9);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const google_protobuf_SourceCodeInfo* default_val = NULL;
const google_protobuf_SourceCodeInfo* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 9);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_source_code_info(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 9);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_public_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_public_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -629,35 +610,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_public_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_public_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_public_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_weak_dependency(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FileDescriptorProto_weak_dependency(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -666,70 +642,67 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(const google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileDescriptorProto_weak_dependency_mutable_upb_array(google_protobuf_FileDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileDescriptorProto_has_weak_dependency(const google_protobuf_FileDescriptorProto* msg) {
- size_t size;
- google_protobuf_FileDescriptorProto_weak_dependency(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_syntax(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 12);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileDescriptorProto_syntax(const google_protobuf_FileDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 12);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_syntax(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 12);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_clear_edition(google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 14);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileDescriptorProto_edition(const google_protobuf_FileDescriptorProto* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 14);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_has_edition(const google_protobuf_FileDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 14);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_name(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_package(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_mutable_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -738,22 +711,26 @@
}
UPB_INLINE upb_StringView* google_protobuf_FileDescriptorProto_resize_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_dependency(google_protobuf_FileDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 3);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_mutable_message_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -762,24 +739,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_FileDescriptorProto_resize_message_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_FileDescriptorProto_add_message_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(google__protobuf__DescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_mutable_enum_type(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -788,24 +769,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_FileDescriptorProto_resize_enum_type(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_FileDescriptorProto_add_enum_type(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(google__protobuf__EnumDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_mutable_service(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ServiceDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -814,24 +799,28 @@
}
UPB_INLINE google_protobuf_ServiceDescriptorProto** google_protobuf_FileDescriptorProto_resize_service(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ServiceDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ServiceDescriptorProto* google_protobuf_FileDescriptorProto_add_service(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 6);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ServiceDescriptorProto* sub = (struct google_protobuf_ServiceDescriptorProto*)_upb_Message_New(google__protobuf__ServiceDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_mutable_extension(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -840,22 +829,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_FileDescriptorProto_resize_extension(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_FileDescriptorProto_add_extension(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 7);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(google__protobuf__FieldDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_options(google_protobuf_FileDescriptorProto *msg, google_protobuf_FileOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 8);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FileOptions* google_protobuf_FileDescriptorProto_mutable_options(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FileOptions* sub = (struct google_protobuf_FileOptions*)google_protobuf_FileDescriptorProto_options(msg);
@@ -867,7 +860,7 @@
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_source_code_info(google_protobuf_FileDescriptorProto *msg, google_protobuf_SourceCodeInfo* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 9);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo* google_protobuf_FileDescriptorProto_mutable_source_code_info(google_protobuf_FileDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_SourceCodeInfo* sub = (struct google_protobuf_SourceCodeInfo*)google_protobuf_FileDescriptorProto_source_code_info(msg);
@@ -879,9 +872,9 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -890,22 +883,26 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_public_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_public_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 10);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_mutable_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -914,24 +911,28 @@
}
UPB_INLINE int32_t* google_protobuf_FileDescriptorProto_resize_weak_dependency(google_protobuf_FileDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FileDescriptorProto_add_weak_dependency(google_protobuf_FileDescriptorProto* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 11);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_syntax(google_protobuf_FileDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 12);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileDescriptorProto_set_edition(google_protobuf_FileDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileDescriptorProto_msg_init(), 14);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.DescriptorProto */
@@ -942,7 +943,8 @@
UPB_INLINE google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__DescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__DescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -952,47 +954,48 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto* ret = google_protobuf_DescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__DescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__DescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize(const google_protobuf_DescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__DescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__DescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_serialize_ex(const google_protobuf_DescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__DescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__DescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_DescriptorProto_name(const google_protobuf_DescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_name(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_field(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_field(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1001,35 +1004,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_field_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_field_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_field(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_field(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_nested_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto* const* google_protobuf_DescriptorProto_nested_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1038,35 +1036,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_nested_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_nested_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_nested_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_nested_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_enum_type(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto* const* google_protobuf_DescriptorProto_enum_type(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1075,35 +1068,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_enum_type_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_enum_type_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_enum_type(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_enum_type(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ExtensionRange* const* google_protobuf_DescriptorProto_extension_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ExtensionRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1112,35 +1100,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_extension(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldDescriptorProto* const* google_protobuf_DescriptorProto_extension(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1149,50 +1132,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_extension_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_extension_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_extension(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_extension(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_options(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 7);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MessageOptions* google_protobuf_DescriptorProto_options(const google_protobuf_DescriptorProto* msg) {
const google_protobuf_MessageOptions* default_val = NULL;
const google_protobuf_MessageOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 7);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_has_options(const google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 7);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_clear_oneof_decl(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofDescriptorProto* const* google_protobuf_DescriptorProto_oneof_decl(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_OneofDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1201,35 +1180,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_oneof_decl_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_oneof_decl_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_oneof_decl(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_oneof_decl(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_range(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_DescriptorProto_ReservedRange* const* google_protobuf_DescriptorProto_reserved_range(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_DescriptorProto_ReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1238,35 +1212,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_range_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_range_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_range(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_clear_reserved_name(google_protobuf_DescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_DescriptorProto_reserved_name(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1275,36 +1244,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_DescriptorProto_reserved_name_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_DescriptorProto_reserved_name_mutable_upb_array(google_protobuf_DescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_DescriptorProto_has_reserved_name(const google_protobuf_DescriptorProto* msg) {
- size_t size;
- google_protobuf_DescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_DescriptorProto_set_name(google_protobuf_DescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_field(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1313,24 +1277,28 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_field(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_field(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(google__protobuf__FieldDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_mutable_nested_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1339,24 +1307,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto** google_protobuf_DescriptorProto_resize_nested_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto* google_protobuf_DescriptorProto_add_nested_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 3);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto* sub = (struct google_protobuf_DescriptorProto*)_upb_Message_New(google__protobuf__DescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_mutable_enum_type(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1365,24 +1337,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto** google_protobuf_DescriptorProto_resize_enum_type(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto* google_protobuf_DescriptorProto_add_enum_type(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto* sub = (struct google_protobuf_EnumDescriptorProto*)_upb_Message_New(google__protobuf__EnumDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_mutable_extension_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ExtensionRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1391,24 +1367,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange** google_protobuf_DescriptorProto_resize_extension_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ExtensionRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_add_extension_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ExtensionRange* sub = (struct google_protobuf_DescriptorProto_ExtensionRange*)_upb_Message_New(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_mutable_extension(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1417,22 +1397,26 @@
}
UPB_INLINE google_protobuf_FieldDescriptorProto** google_protobuf_DescriptorProto_resize_extension(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldDescriptorProto* google_protobuf_DescriptorProto_add_extension(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 6);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldDescriptorProto* sub = (struct google_protobuf_FieldDescriptorProto*)_upb_Message_New(google__protobuf__FieldDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_DescriptorProto_set_options(google_protobuf_DescriptorProto *msg, google_protobuf_MessageOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 7);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MessageOptions* google_protobuf_DescriptorProto_mutable_options(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MessageOptions* sub = (struct google_protobuf_MessageOptions*)google_protobuf_DescriptorProto_options(msg);
@@ -1444,9 +1428,9 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_mutable_oneof_decl(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_OneofDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1455,24 +1439,28 @@
}
UPB_INLINE google_protobuf_OneofDescriptorProto** google_protobuf_DescriptorProto_resize_oneof_decl(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_OneofDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_OneofDescriptorProto* google_protobuf_DescriptorProto_add_oneof_decl(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 8);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_OneofDescriptorProto* sub = (struct google_protobuf_OneofDescriptorProto*)_upb_Message_New(google__protobuf__OneofDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_mutable_reserved_range(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_DescriptorProto_ReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1481,24 +1469,28 @@
}
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange** google_protobuf_DescriptorProto_resize_reserved_range(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_DescriptorProto_ReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_add_reserved_range(google_protobuf_DescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 9);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_DescriptorProto_ReservedRange* sub = (struct google_protobuf_DescriptorProto_ReservedRange*)_upb_Message_New(google__protobuf__DescriptorProto__ReservedRange_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_mutable_reserved_name(google_protobuf_DescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1507,15 +1499,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_DescriptorProto_resize_reserved_name(google_protobuf_DescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_DescriptorProto_add_reserved_name(google_protobuf_DescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto_msg_init(), 10);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -1527,7 +1523,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange* google_protobuf_DescriptorProto_ExtensionRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__DescriptorProto__ExtensionRange_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__DescriptorProto__ExtensionRange_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1537,80 +1534,83 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ExtensionRange* ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__DescriptorProto__ExtensionRange_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__DescriptorProto__ExtensionRange_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize(const google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ExtensionRange_serialize_ex(const google_protobuf_DescriptorProto_ExtensionRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__DescriptorProto__ExtensionRange_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__DescriptorProto__ExtensionRange_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_start(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_start(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_end(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ExtensionRange_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_end(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_clear_options(google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const google_protobuf_ExtensionRangeOptions* default_val = NULL;
const google_protobuf_ExtensionRangeOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ExtensionRange_has_options(const google_protobuf_DescriptorProto_ExtensionRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_start(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_end(google_protobuf_DescriptorProto_ExtensionRange *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ExtensionRange_set_options(google_protobuf_DescriptorProto_ExtensionRange *msg, google_protobuf_ExtensionRangeOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ExtensionRange_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions* google_protobuf_DescriptorProto_ExtensionRange_mutable_options(google_protobuf_DescriptorProto_ExtensionRange* msg, upb_Arena* arena) {
struct google_protobuf_ExtensionRangeOptions* sub = (struct google_protobuf_ExtensionRangeOptions*)google_protobuf_DescriptorProto_ExtensionRange_options(msg);
@@ -1629,7 +1629,8 @@
UPB_INLINE google_protobuf_DescriptorProto_ReservedRange* google_protobuf_DescriptorProto_ReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__DescriptorProto__ReservedRange_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__DescriptorProto__ReservedRange_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1639,61 +1640,63 @@
int options, upb_Arena* arena) {
google_protobuf_DescriptorProto_ReservedRange* ret = google_protobuf_DescriptorProto_ReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__DescriptorProto__ReservedRange_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__DescriptorProto__ReservedRange_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize(const google_protobuf_DescriptorProto_ReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__DescriptorProto__ReservedRange_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__DescriptorProto__ReservedRange_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_DescriptorProto_ReservedRange_serialize_ex(const google_protobuf_DescriptorProto_ReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__DescriptorProto__ReservedRange_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__DescriptorProto__ReservedRange_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_start(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_start(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_clear_end(google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_DescriptorProto_ReservedRange_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_DescriptorProto_ReservedRange_has_end(const google_protobuf_DescriptorProto_ReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_start(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_DescriptorProto_ReservedRange_set_end(google_protobuf_DescriptorProto_ReservedRange *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__DescriptorProto__ReservedRange_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.ExtensionRangeOptions */
@@ -1704,7 +1707,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions* google_protobuf_ExtensionRangeOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ExtensionRangeOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ExtensionRangeOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1714,32 +1718,32 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions* ret = google_protobuf_ExtensionRangeOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ExtensionRangeOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ExtensionRangeOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize(const google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ExtensionRangeOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ExtensionRangeOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_serialize_ex(const google_protobuf_ExtensionRangeOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ExtensionRangeOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ExtensionRangeOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_declaration(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ExtensionRangeOptions_Declaration* const* google_protobuf_ExtensionRangeOptions_declaration(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_ExtensionRangeOptions_Declaration* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1748,65 +1752,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_declaration_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_declaration(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_declaration(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_verification(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_verification(const google_protobuf_ExtensionRangeOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_verification(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_features(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 50);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_features(const google_protobuf_ExtensionRangeOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 50);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_features(const google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 50);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_clear_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ExtensionRangeOptions_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -1815,32 +1816,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ExtensionRangeOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ExtensionRangeOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ExtensionRangeOptions_has_uninterpreted_option(const google_protobuf_ExtensionRangeOptions* msg) {
- size_t size;
- google_protobuf_ExtensionRangeOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_mutable_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_ExtensionRangeOptions_Declaration**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1849,26 +1845,30 @@
}
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration** google_protobuf_ExtensionRangeOptions_resize_declaration(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_ExtensionRangeOptions_Declaration**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_add_declaration(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_ExtensionRangeOptions_Declaration* sub = (struct google_protobuf_ExtensionRangeOptions_Declaration*)_upb_Message_New(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_verification(google_protobuf_ExtensionRangeOptions *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_set_features(google_protobuf_ExtensionRangeOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 50);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ExtensionRangeOptions_mutable_features(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ExtensionRangeOptions_features(msg);
@@ -1880,9 +1880,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_mutable_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -1891,17 +1891,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ExtensionRangeOptions_resize_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ExtensionRangeOptions_add_uninterpreted_option(google_protobuf_ExtensionRangeOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -1913,7 +1917,8 @@
UPB_INLINE google_protobuf_ExtensionRangeOptions_Declaration* google_protobuf_ExtensionRangeOptions_Declaration_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -1923,118 +1928,123 @@
int options, upb_Arena* arena) {
google_protobuf_ExtensionRangeOptions_Declaration* ret = google_protobuf_ExtensionRangeOptions_Declaration_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize(const google_protobuf_ExtensionRangeOptions_Declaration* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ExtensionRangeOptions_Declaration_serialize_ex(const google_protobuf_ExtensionRangeOptions_Declaration* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_number(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_ExtensionRangeOptions_Declaration_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_number(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_full_name(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_full_name(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_type(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ExtensionRangeOptions_Declaration_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_type(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_reserved(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_reserved(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_clear_repeated(google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ExtensionRangeOptions_Declaration_has_repeated(const google_protobuf_ExtensionRangeOptions_Declaration* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_number(google_protobuf_ExtensionRangeOptions_Declaration *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_full_name(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_type(google_protobuf_ExtensionRangeOptions_Declaration *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_reserved(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ExtensionRangeOptions_Declaration_set_repeated(google_protobuf_ExtensionRangeOptions_Declaration *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ExtensionRangeOptions__Declaration_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FieldDescriptorProto */
@@ -2045,7 +2055,8 @@
UPB_INLINE google_protobuf_FieldDescriptorProto* google_protobuf_FieldDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FieldDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FieldDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2055,220 +2066,231 @@
int options, upb_Arena* arena) {
google_protobuf_FieldDescriptorProto* ret = google_protobuf_FieldDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FieldDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FieldDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize(const google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FieldDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FieldDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldDescriptorProto_serialize_ex(const google_protobuf_FieldDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FieldDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FieldDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_extendee(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_extendee(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_extendee(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_number(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_number(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_number(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_label(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_label(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_label(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_type(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_type_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_type_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_type_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_default_value(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 7);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_default_value(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 7);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_default_value(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 7);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_options(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 8);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_options(const google_protobuf_FieldDescriptorProto* msg) {
const google_protobuf_FieldOptions* default_val = NULL;
const google_protobuf_FieldOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 8);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_options(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 8);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_oneof_index(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 9);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldDescriptorProto_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 9);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_oneof_index(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 9);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_json_name(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 10);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldDescriptorProto_json_name(const google_protobuf_FieldDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 10);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_json_name(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 10);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_clear_proto3_optional(google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 17);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 17);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldDescriptorProto_has_proto3_optional(const google_protobuf_FieldDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 17);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_extendee(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_number(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_label(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_type_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_default_value(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 7);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_options(google_protobuf_FieldDescriptorProto *msg, google_protobuf_FieldOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 8);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FieldOptions* google_protobuf_FieldDescriptorProto_mutable_options(google_protobuf_FieldDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_FieldOptions* sub = (struct google_protobuf_FieldOptions*)google_protobuf_FieldDescriptorProto_options(msg);
@@ -2280,15 +2302,15 @@
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_oneof_index(google_protobuf_FieldDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 9);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_json_name(google_protobuf_FieldDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 10);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldDescriptorProto_set_proto3_optional(google_protobuf_FieldDescriptorProto *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldDescriptorProto_msg_init(), 17);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofDescriptorProto */
@@ -2299,7 +2321,8 @@
UPB_INLINE google_protobuf_OneofDescriptorProto* google_protobuf_OneofDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__OneofDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__OneofDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2309,61 +2332,63 @@
int options, upb_Arena* arena) {
google_protobuf_OneofDescriptorProto* ret = google_protobuf_OneofDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__OneofDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__OneofDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize(const google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__OneofDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__OneofDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofDescriptorProto_serialize_ex(const google_protobuf_OneofDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__OneofDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__OneofDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_name(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_OneofDescriptorProto_name(const google_protobuf_OneofDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_name(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_clear_options(google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_options(const google_protobuf_OneofDescriptorProto* msg) {
const google_protobuf_OneofOptions* default_val = NULL;
const google_protobuf_OneofOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofDescriptorProto_has_options(const google_protobuf_OneofDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_name(google_protobuf_OneofDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_OneofDescriptorProto_set_options(google_protobuf_OneofDescriptorProto *msg, google_protobuf_OneofOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofDescriptorProto_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_OneofOptions* google_protobuf_OneofDescriptorProto_mutable_options(google_protobuf_OneofDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_OneofOptions* sub = (struct google_protobuf_OneofOptions*)google_protobuf_OneofDescriptorProto_options(msg);
@@ -2382,7 +2407,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto* google_protobuf_EnumDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2392,47 +2418,48 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto* ret = google_protobuf_EnumDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize(const google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_serialize_ex(const google_protobuf_EnumDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumDescriptorProto_name(const google_protobuf_EnumDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_name(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_value(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueDescriptorProto* const* google_protobuf_EnumDescriptorProto_value(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumValueDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2441,50 +2468,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_value_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_value_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_value(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_value(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_options(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_options(const google_protobuf_EnumDescriptorProto* msg) {
const google_protobuf_EnumOptions* default_val = NULL;
const google_protobuf_EnumOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_options(const google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_range(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumDescriptorProto_EnumReservedRange* const* google_protobuf_EnumDescriptorProto_reserved_range(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_EnumDescriptorProto_EnumReservedRange* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2493,35 +2516,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_range_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_range(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_range(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_clear_reserved_name(google_protobuf_EnumDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_EnumDescriptorProto_reserved_name(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2530,36 +2548,31 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(const google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumDescriptorProto_reserved_name_mutable_upb_array(google_protobuf_EnumDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumDescriptorProto_has_reserved_name(const google_protobuf_EnumDescriptorProto* msg) {
- size_t size;
- google_protobuf_EnumDescriptorProto_reserved_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_name(google_protobuf_EnumDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_mutable_value(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumValueDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2568,22 +2581,26 @@
}
UPB_INLINE google_protobuf_EnumValueDescriptorProto** google_protobuf_EnumDescriptorProto_resize_value(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumValueDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumDescriptorProto_add_value(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumValueDescriptorProto* sub = (struct google_protobuf_EnumValueDescriptorProto*)_upb_Message_New(google__protobuf__EnumValueDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_set_options(google_protobuf_EnumDescriptorProto *msg, google_protobuf_EnumOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumOptions* google_protobuf_EnumDescriptorProto_mutable_options(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumOptions* sub = (struct google_protobuf_EnumOptions*)google_protobuf_EnumDescriptorProto_options(msg);
@@ -2595,9 +2612,9 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_mutable_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2606,24 +2623,28 @@
}
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange** google_protobuf_EnumDescriptorProto_resize_reserved_range(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_EnumDescriptorProto_EnumReservedRange**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_add_reserved_range(google_protobuf_EnumDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 4);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_EnumDescriptorProto_EnumReservedRange* sub = (struct google_protobuf_EnumDescriptorProto_EnumReservedRange*)_upb_Message_New(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_mutable_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2632,15 +2653,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_EnumDescriptorProto_resize_reserved_name(google_protobuf_EnumDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_add_reserved_name(google_protobuf_EnumDescriptorProto* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto_msg_init(), 5);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -2652,7 +2677,8 @@
UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange* google_protobuf_EnumDescriptorProto_EnumReservedRange_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2662,61 +2688,63 @@
int options, upb_Arena* arena) {
google_protobuf_EnumDescriptorProto_EnumReservedRange* ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize_ex(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_start(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_start(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_clear_end(google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumDescriptorProto_EnumReservedRange_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumDescriptorProto_EnumReservedRange_has_end(const google_protobuf_EnumDescriptorProto_EnumReservedRange* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_start(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumDescriptorProto_EnumReservedRange_set_end(google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumDescriptorProto__EnumReservedRange_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.EnumValueDescriptorProto */
@@ -2727,7 +2755,8 @@
UPB_INLINE google_protobuf_EnumValueDescriptorProto* google_protobuf_EnumValueDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumValueDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumValueDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2737,80 +2766,83 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueDescriptorProto* ret = google_protobuf_EnumValueDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumValueDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumValueDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize(const google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumValueDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumValueDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueDescriptorProto_serialize_ex(const google_protobuf_EnumValueDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumValueDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumValueDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_name(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_EnumValueDescriptorProto_name(const google_protobuf_EnumValueDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_name(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_number(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_EnumValueDescriptorProto_number(const google_protobuf_EnumValueDescriptorProto* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_number(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_clear_options(google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const google_protobuf_EnumValueOptions* default_val = NULL;
const google_protobuf_EnumValueOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueDescriptorProto_has_options(const google_protobuf_EnumValueDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_name(google_protobuf_EnumValueDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_number(google_protobuf_EnumValueDescriptorProto *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueDescriptorProto_set_options(google_protobuf_EnumValueDescriptorProto *msg, google_protobuf_EnumValueOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueDescriptorProto_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_EnumValueOptions* google_protobuf_EnumValueDescriptorProto_mutable_options(google_protobuf_EnumValueDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_EnumValueOptions* sub = (struct google_protobuf_EnumValueOptions*)google_protobuf_EnumValueDescriptorProto_options(msg);
@@ -2829,7 +2861,8 @@
UPB_INLINE google_protobuf_ServiceDescriptorProto* google_protobuf_ServiceDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ServiceDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ServiceDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2839,47 +2872,48 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceDescriptorProto* ret = google_protobuf_ServiceDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ServiceDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ServiceDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize(const google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ServiceDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ServiceDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceDescriptorProto_serialize_ex(const google_protobuf_ServiceDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ServiceDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ServiceDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_name(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_ServiceDescriptorProto_name(const google_protobuf_ServiceDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_name(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_method(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodDescriptorProto* const* google_protobuf_ServiceDescriptorProto_method(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_MethodDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -2888,51 +2922,47 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceDescriptorProto_method_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(const google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceDescriptorProto_method_mutable_upb_array(google_protobuf_ServiceDescriptorProto* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_method(const google_protobuf_ServiceDescriptorProto* msg) {
- size_t size;
- google_protobuf_ServiceDescriptorProto_method(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_clear_options(google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_options(const google_protobuf_ServiceDescriptorProto* msg) {
const google_protobuf_ServiceOptions* default_val = NULL;
const google_protobuf_ServiceOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceDescriptorProto_has_options(const google_protobuf_ServiceDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_name(google_protobuf_ServiceDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_mutable_method(google_protobuf_ServiceDescriptorProto* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_MethodDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -2941,22 +2971,26 @@
}
UPB_INLINE google_protobuf_MethodDescriptorProto** google_protobuf_ServiceDescriptorProto_resize_method(google_protobuf_ServiceDescriptorProto* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_MethodDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_MethodDescriptorProto* google_protobuf_ServiceDescriptorProto_add_method(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_MethodDescriptorProto* sub = (struct google_protobuf_MethodDescriptorProto*)_upb_Message_New(google__protobuf__MethodDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_ServiceDescriptorProto_set_options(google_protobuf_ServiceDescriptorProto *msg, google_protobuf_ServiceOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceDescriptorProto_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_ServiceOptions* google_protobuf_ServiceDescriptorProto_mutable_options(google_protobuf_ServiceDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_ServiceOptions* sub = (struct google_protobuf_ServiceOptions*)google_protobuf_ServiceDescriptorProto_options(msg);
@@ -2975,7 +3009,8 @@
UPB_INLINE google_protobuf_MethodDescriptorProto* google_protobuf_MethodDescriptorProto_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__MethodDescriptorProto_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__MethodDescriptorProto_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -2985,129 +3020,135 @@
int options, upb_Arena* arena) {
google_protobuf_MethodDescriptorProto* ret = google_protobuf_MethodDescriptorProto_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__MethodDescriptorProto_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__MethodDescriptorProto_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize(const google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__MethodDescriptorProto_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__MethodDescriptorProto_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodDescriptorProto_serialize_ex(const google_protobuf_MethodDescriptorProto* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__MethodDescriptorProto_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__MethodDescriptorProto_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_name(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_name(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_name(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_input_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_input_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_input_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_output_type(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_MethodDescriptorProto_output_type(const google_protobuf_MethodDescriptorProto* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_output_type(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_options(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_options(const google_protobuf_MethodDescriptorProto* msg) {
const google_protobuf_MethodOptions* default_val = NULL;
const google_protobuf_MethodOptions* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_options(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_client_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_client_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_clear_server_streaming(google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodDescriptorProto_has_server_streaming(const google_protobuf_MethodDescriptorProto* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_name(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_input_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_output_type(google_protobuf_MethodDescriptorProto *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_options(google_protobuf_MethodDescriptorProto *msg, google_protobuf_MethodOptions* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_MethodOptions* google_protobuf_MethodDescriptorProto_mutable_options(google_protobuf_MethodDescriptorProto* msg, upb_Arena* arena) {
struct google_protobuf_MethodOptions* sub = (struct google_protobuf_MethodOptions*)google_protobuf_MethodDescriptorProto_options(msg);
@@ -3119,11 +3160,11 @@
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_client_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodDescriptorProto_set_server_streaming(google_protobuf_MethodDescriptorProto *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodDescriptorProto_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FileOptions */
@@ -3134,7 +3175,8 @@
UPB_INLINE google_protobuf_FileOptions* google_protobuf_FileOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FileOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FileOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3144,347 +3186,352 @@
int options, upb_Arena* arena) {
google_protobuf_FileOptions* ret = google_protobuf_FileOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FileOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FileOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize(const google_protobuf_FileOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FileOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FileOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FileOptions_serialize_ex(const google_protobuf_FileOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FileOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FileOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_package(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_package(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_outer_classname(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 8);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_java_outer_classname(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 8);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_outer_classname(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 8);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_optimize_for(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 9);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FileOptions_optimize_for(const google_protobuf_FileOptions* msg) {
int32_t default_val = 1;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 9);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_optimize_for(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 9);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_multiple_files(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 10);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_multiple_files(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 10);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_multiple_files(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 10);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_go_package(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 11);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_go_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 11);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_go_package(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 11);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 16);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 16);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 16);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 17);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 17);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 17);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_py_generic_services(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 18);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_py_generic_services(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 18);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_py_generic_services(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 18);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_generate_equals_and_hash(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 20);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 20);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_generate_equals_and_hash(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 20);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_deprecated(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 23);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_deprecated(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 23);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_deprecated(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 23);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_java_string_check_utf8(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 27);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 27);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_java_string_check_utf8(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 27);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_cc_enable_arenas(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 31);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FileOptions_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
bool default_val = true;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 31);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_cc_enable_arenas(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 31);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_objc_class_prefix(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 36);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_objc_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 36);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_objc_class_prefix(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 36);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_csharp_namespace(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 37);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_csharp_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 37);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_csharp_namespace(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 37);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_swift_prefix(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 39);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_swift_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 39);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_swift_prefix(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 39);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_class_prefix(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 40);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_class_prefix(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 40);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_class_prefix(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 40);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_namespace(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 41);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 41);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_namespace(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 41);
- return _upb_Message_HasNonExtensionField(msg, &field);
-}
-UPB_INLINE void google_protobuf_FileOptions_clear_php_generic_services(google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 42);
- _upb_Message_ClearNonExtensionField(msg, &field);
-}
-UPB_INLINE bool google_protobuf_FileOptions_php_generic_services(const google_protobuf_FileOptions* msg) {
- bool default_val = false;
- bool ret;
- const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 42);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
- return ret;
-}
-UPB_INLINE bool google_protobuf_FileOptions_has_php_generic_services(const google_protobuf_FileOptions* msg) {
- const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 42);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_php_metadata_namespace(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 44);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 44);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_php_metadata_namespace(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 44);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_ruby_package(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 45);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FileOptions_ruby_package(const google_protobuf_FileOptions* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 45);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_ruby_package(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 45);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_features(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 50);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FileOptions_features(const google_protobuf_FileOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 50);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FileOptions_has_features(const google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 50);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FileOptions_clear_uninterpreted_option(google_protobuf_FileOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FileOptions_uninterpreted_option(const google_protobuf_FileOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -3493,110 +3540,101 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FileOptions_uninterpreted_option_upb_array(const google_protobuf_FileOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FileOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FileOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FileOptions_has_uninterpreted_option(const google_protobuf_FileOptions* msg) {
- size_t size;
- google_protobuf_FileOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FileOptions_set_java_package(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_outer_classname(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 8);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_optimize_for(google_protobuf_FileOptions *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 9);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_multiple_files(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 10);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_go_package(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 11);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 16);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 17);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_py_generic_services(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 18);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_generate_equals_and_hash(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 20);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_deprecated(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 23);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_java_string_check_utf8(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 27);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_cc_enable_arenas(google_protobuf_FileOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 31);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_objc_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 36);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_csharp_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 37);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_swift_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 39);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_class_prefix(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 40);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 41);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
-}
-UPB_INLINE void google_protobuf_FileOptions_set_php_generic_services(google_protobuf_FileOptions *msg, bool value) {
- const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 42);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_php_metadata_namespace(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 44);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_ruby_package(google_protobuf_FileOptions *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 45);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FileOptions_set_features(google_protobuf_FileOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 50);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FileOptions_mutable_features(google_protobuf_FileOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FileOptions_features(msg);
@@ -3608,9 +3646,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_mutable_uninterpreted_option(google_protobuf_FileOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -3619,17 +3657,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FileOptions_resize_uninterpreted_option(google_protobuf_FileOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FileOptions_add_uninterpreted_option(google_protobuf_FileOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FileOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -3641,7 +3683,8 @@
UPB_INLINE google_protobuf_MessageOptions* google_protobuf_MessageOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__MessageOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__MessageOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3651,122 +3694,128 @@
int options, upb_Arena* arena) {
google_protobuf_MessageOptions* ret = google_protobuf_MessageOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__MessageOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__MessageOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize(const google_protobuf_MessageOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__MessageOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__MessageOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MessageOptions_serialize_ex(const google_protobuf_MessageOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__MessageOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__MessageOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MessageOptions_clear_message_set_wire_format(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_message_set_wire_format(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_no_standard_descriptor_accessor(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_no_standard_descriptor_accessor(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_map_entry(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 7);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_map_entry(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 7);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_map_entry(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 7);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 11);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MessageOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 11);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 11);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_features(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 12);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MessageOptions_features(const google_protobuf_MessageOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 12);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MessageOptions_has_features(const google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 12);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MessageOptions_clear_uninterpreted_option(google_protobuf_MessageOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MessageOptions_uninterpreted_option(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -3775,50 +3824,45 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_upb_array(const google_protobuf_MessageOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MessageOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MessageOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MessageOptions_has_uninterpreted_option(const google_protobuf_MessageOptions* msg) {
- size_t size;
- google_protobuf_MessageOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MessageOptions_set_message_set_wire_format(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_no_standard_descriptor_accessor(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_map_entry(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 7);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_MessageOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 11);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MessageOptions_set_features(google_protobuf_MessageOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 12);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MessageOptions_mutable_features(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MessageOptions_features(msg);
@@ -3830,9 +3874,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_mutable_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -3841,17 +3885,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MessageOptions_resize_uninterpreted_option(google_protobuf_MessageOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MessageOptions_add_uninterpreted_option(google_protobuf_MessageOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MessageOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -3863,7 +3911,8 @@
UPB_INLINE google_protobuf_FieldOptions* google_protobuf_FieldOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FieldOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FieldOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -3873,167 +3922,176 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions* ret = google_protobuf_FieldOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FieldOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FieldOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize(const google_protobuf_FieldOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FieldOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FieldOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_serialize_ex(const google_protobuf_FieldOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FieldOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FieldOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_clear_ctype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_ctype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_ctype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_packed(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_packed(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_packed(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_deprecated(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_deprecated(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_deprecated(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_jstype(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_jstype(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_jstype(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_weak(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 10);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_weak(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 10);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_weak(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 10);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_unverified_lazy(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 15);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_unverified_lazy(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 15);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_unverified_lazy(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 15);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_debug_redact(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 16);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_FieldOptions_debug_redact(const google_protobuf_FieldOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 16);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_debug_redact(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 16);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_retention(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 17);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_retention(const google_protobuf_FieldOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 17);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_retention(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 17);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_targets(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_FieldOptions_targets(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4042,35 +4100,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_targets_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_targets_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_targets(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_targets(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_edition_defaults(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FieldOptions_EditionDefault* const* google_protobuf_FieldOptions_edition_defaults(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FieldOptions_EditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4079,50 +4132,46 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_edition_defaults_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_edition_defaults_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_edition_defaults(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_edition_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_clear_features(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 21);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FieldOptions_features(const google_protobuf_FieldOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 21);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_has_features(const google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 21);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_clear_uninterpreted_option(google_protobuf_FieldOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_FieldOptions_uninterpreted_option(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4131,68 +4180,63 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_upb_array(const google_protobuf_FieldOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FieldOptions_uninterpreted_option_mutable_upb_array(google_protobuf_FieldOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FieldOptions_has_uninterpreted_option(const google_protobuf_FieldOptions* msg) {
- size_t size;
- google_protobuf_FieldOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FieldOptions_set_ctype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_packed(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_deprecated(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_jstype(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_weak(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 10);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_unverified_lazy(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 15);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_debug_redact(google_protobuf_FieldOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 16);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_set_retention(google_protobuf_FieldOptions *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 17);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_mutable_targets(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4201,22 +4245,26 @@
}
UPB_INLINE int32_t* google_protobuf_FieldOptions_resize_targets(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_FieldOptions_add_targets(google_protobuf_FieldOptions* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 19);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_mutable_edition_defaults(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FieldOptions_EditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4225,22 +4273,26 @@
}
UPB_INLINE google_protobuf_FieldOptions_EditionDefault** google_protobuf_FieldOptions_resize_edition_defaults(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FieldOptions_EditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_add_edition_defaults(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 20);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FieldOptions_EditionDefault* sub = (struct google_protobuf_FieldOptions_EditionDefault*)_upb_Message_New(google__protobuf__FieldOptions__EditionDefault_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FieldOptions_set_features(google_protobuf_FieldOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 21);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FieldOptions_mutable_features(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FieldOptions_features(msg);
@@ -4252,9 +4304,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_mutable_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4263,17 +4315,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_FieldOptions_resize_uninterpreted_option(google_protobuf_FieldOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_FieldOptions_add_uninterpreted_option(google_protobuf_FieldOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4285,7 +4341,8 @@
UPB_INLINE google_protobuf_FieldOptions_EditionDefault* google_protobuf_FieldOptions_EditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FieldOptions__EditionDefault_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FieldOptions__EditionDefault_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4295,61 +4352,63 @@
int options, upb_Arena* arena) {
google_protobuf_FieldOptions_EditionDefault* ret = google_protobuf_FieldOptions_EditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FieldOptions__EditionDefault_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FieldOptions__EditionDefault_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize(const google_protobuf_FieldOptions_EditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FieldOptions__EditionDefault_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FieldOptions__EditionDefault_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FieldOptions_EditionDefault_serialize_ex(const google_protobuf_FieldOptions_EditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FieldOptions__EditionDefault_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FieldOptions__EditionDefault_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_value(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_FieldOptions_EditionDefault_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_value(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_clear_edition(google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FieldOptions_EditionDefault_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FieldOptions_EditionDefault_has_edition(const google_protobuf_FieldOptions_EditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_value(google_protobuf_FieldOptions_EditionDefault *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FieldOptions_EditionDefault_set_edition(google_protobuf_FieldOptions_EditionDefault *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FieldOptions__EditionDefault_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.OneofOptions */
@@ -4360,7 +4419,8 @@
UPB_INLINE google_protobuf_OneofOptions* google_protobuf_OneofOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__OneofOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__OneofOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4370,47 +4430,48 @@
int options, upb_Arena* arena) {
google_protobuf_OneofOptions* ret = google_protobuf_OneofOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__OneofOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__OneofOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize(const google_protobuf_OneofOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__OneofOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__OneofOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_OneofOptions_serialize_ex(const google_protobuf_OneofOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__OneofOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__OneofOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_OneofOptions_clear_features(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_OneofOptions_features(const google_protobuf_OneofOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_OneofOptions_has_features(const google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_OneofOptions_clear_uninterpreted_option(google_protobuf_OneofOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_OneofOptions_uninterpreted_option(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4419,30 +4480,25 @@
}
UPB_INLINE const upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_upb_array(const google_protobuf_OneofOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_OneofOptions_uninterpreted_option_mutable_upb_array(google_protobuf_OneofOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_OneofOptions_has_uninterpreted_option(const google_protobuf_OneofOptions* msg) {
- size_t size;
- google_protobuf_OneofOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_OneofOptions_set_features(google_protobuf_OneofOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_OneofOptions_mutable_features(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_OneofOptions_features(msg);
@@ -4454,9 +4510,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_mutable_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4465,17 +4521,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_OneofOptions_resize_uninterpreted_option(google_protobuf_OneofOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_OneofOptions_add_uninterpreted_option(google_protobuf_OneofOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__OneofOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4487,7 +4547,8 @@
UPB_INLINE google_protobuf_EnumOptions* google_protobuf_EnumOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4497,92 +4558,96 @@
int options, upb_Arena* arena) {
google_protobuf_EnumOptions* ret = google_protobuf_EnumOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize(const google_protobuf_EnumOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumOptions_serialize_ex(const google_protobuf_EnumOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumOptions_clear_allow_alias(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_allow_alias(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_allow_alias(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumOptions_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_deprecated_legacy_json_field_conflicts(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_features(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 7);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumOptions_features(const google_protobuf_EnumOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 7);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumOptions_has_features(const google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 7);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumOptions_clear_uninterpreted_option(google_protobuf_EnumOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumOptions_uninterpreted_option(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4591,42 +4656,37 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_upb_array(const google_protobuf_EnumOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumOptions_has_uninterpreted_option(const google_protobuf_EnumOptions* msg) {
- size_t size;
- google_protobuf_EnumOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumOptions_set_allow_alias(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_deprecated_legacy_json_field_conflicts(google_protobuf_EnumOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumOptions_set_features(google_protobuf_EnumOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 7);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumOptions_mutable_features(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumOptions_features(msg);
@@ -4638,9 +4698,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_mutable_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4649,17 +4709,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumOptions_resize_uninterpreted_option(google_protobuf_EnumOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumOptions_add_uninterpreted_option(google_protobuf_EnumOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4671,7 +4735,8 @@
UPB_INLINE google_protobuf_EnumValueOptions* google_protobuf_EnumValueOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumValueOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumValueOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4681,77 +4746,80 @@
int options, upb_Arena* arena) {
google_protobuf_EnumValueOptions* ret = google_protobuf_EnumValueOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__EnumValueOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__EnumValueOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize(const google_protobuf_EnumValueOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumValueOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumValueOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_EnumValueOptions_serialize_ex(const google_protobuf_EnumValueOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__EnumValueOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__EnumValueOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_deprecated(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_deprecated(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_deprecated(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_features(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_features(const google_protobuf_EnumValueOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_features(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_debug_redact(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_EnumValueOptions_debug_redact(const google_protobuf_EnumValueOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_EnumValueOptions_has_debug_redact(const google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_EnumValueOptions_clear_uninterpreted_option(google_protobuf_EnumValueOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_EnumValueOptions_uninterpreted_option(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4760,34 +4828,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_EnumValueOptions_uninterpreted_option_mutable_upb_array(google_protobuf_EnumValueOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_EnumValueOptions_has_uninterpreted_option(const google_protobuf_EnumValueOptions* msg) {
- size_t size;
- google_protobuf_EnumValueOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_EnumValueOptions_set_deprecated(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_features(google_protobuf_EnumValueOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_EnumValueOptions_mutable_features(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_EnumValueOptions_features(msg);
@@ -4799,13 +4862,13 @@
}
UPB_INLINE void google_protobuf_EnumValueOptions_set_debug_redact(google_protobuf_EnumValueOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_mutable_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4814,17 +4877,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_EnumValueOptions_resize_uninterpreted_option(google_protobuf_EnumValueOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_EnumValueOptions_add_uninterpreted_option(google_protobuf_EnumValueOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__EnumValueOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4836,7 +4903,8 @@
UPB_INLINE google_protobuf_ServiceOptions* google_protobuf_ServiceOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ServiceOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ServiceOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4846,62 +4914,64 @@
int options, upb_Arena* arena) {
google_protobuf_ServiceOptions* ret = google_protobuf_ServiceOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__ServiceOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__ServiceOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize(const google_protobuf_ServiceOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ServiceOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ServiceOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_ServiceOptions_serialize_ex(const google_protobuf_ServiceOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__ServiceOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__ServiceOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_deprecated(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 33);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_ServiceOptions_deprecated(const google_protobuf_ServiceOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 33);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_deprecated(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 33);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_features(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 34);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_ServiceOptions_features(const google_protobuf_ServiceOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 34);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_ServiceOptions_has_features(const google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 34);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_ServiceOptions_clear_uninterpreted_option(google_protobuf_ServiceOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_ServiceOptions_uninterpreted_option(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -4910,34 +4980,29 @@
}
UPB_INLINE const upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_ServiceOptions_uninterpreted_option_mutable_upb_array(google_protobuf_ServiceOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_ServiceOptions_has_uninterpreted_option(const google_protobuf_ServiceOptions* msg) {
- size_t size;
- google_protobuf_ServiceOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_ServiceOptions_set_deprecated(google_protobuf_ServiceOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 33);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_ServiceOptions_set_features(google_protobuf_ServiceOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 34);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_ServiceOptions_mutable_features(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_ServiceOptions_features(msg);
@@ -4949,9 +5014,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_mutable_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -4960,17 +5025,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_ServiceOptions_resize_uninterpreted_option(google_protobuf_ServiceOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_ServiceOptions_add_uninterpreted_option(google_protobuf_ServiceOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__ServiceOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -4982,7 +5051,8 @@
UPB_INLINE google_protobuf_MethodOptions* google_protobuf_MethodOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__MethodOptions_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__MethodOptions_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -4992,77 +5062,80 @@
int options, upb_Arena* arena) {
google_protobuf_MethodOptions* ret = google_protobuf_MethodOptions_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__MethodOptions_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__MethodOptions_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize(const google_protobuf_MethodOptions* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__MethodOptions_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__MethodOptions_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_MethodOptions_serialize_ex(const google_protobuf_MethodOptions* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__MethodOptions_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__MethodOptions_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_MethodOptions_clear_deprecated(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 33);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_MethodOptions_deprecated(const google_protobuf_MethodOptions* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 33);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_deprecated(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 33);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_idempotency_level(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 34);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_MethodOptions_idempotency_level(const google_protobuf_MethodOptions* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 34);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_idempotency_level(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 34);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_features(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 35);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_MethodOptions_features(const google_protobuf_MethodOptions* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 35);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_MethodOptions_has_features(const google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 35);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_MethodOptions_clear_uninterpreted_option(google_protobuf_MethodOptions* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption* const* google_protobuf_MethodOptions_uninterpreted_option(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5071,38 +5144,33 @@
}
UPB_INLINE const upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_upb_array(const google_protobuf_MethodOptions* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(const google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_MethodOptions_uninterpreted_option_mutable_upb_array(google_protobuf_MethodOptions* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_MethodOptions_has_uninterpreted_option(const google_protobuf_MethodOptions* msg) {
- size_t size;
- google_protobuf_MethodOptions_uninterpreted_option(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_MethodOptions_set_deprecated(google_protobuf_MethodOptions *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 33);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_idempotency_level(google_protobuf_MethodOptions *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 34);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_MethodOptions_set_features(google_protobuf_MethodOptions *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 35);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_MethodOptions_mutable_features(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_MethodOptions_features(msg);
@@ -5114,9 +5182,9 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_mutable_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5125,17 +5193,21 @@
}
UPB_INLINE google_protobuf_UninterpretedOption** google_protobuf_MethodOptions_resize_uninterpreted_option(google_protobuf_MethodOptions* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption* google_protobuf_MethodOptions_add_uninterpreted_option(google_protobuf_MethodOptions* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__MethodOptions_msg_init(), 999);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption* sub = (struct google_protobuf_UninterpretedOption*)_upb_Message_New(google__protobuf__UninterpretedOption_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -5147,7 +5219,8 @@
UPB_INLINE google_protobuf_UninterpretedOption* google_protobuf_UninterpretedOption_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__UninterpretedOption_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__UninterpretedOption_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5157,32 +5230,32 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption* ret = google_protobuf_UninterpretedOption_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__UninterpretedOption_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__UninterpretedOption_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize(const google_protobuf_UninterpretedOption* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__UninterpretedOption_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__UninterpretedOption_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_serialize_ex(const google_protobuf_UninterpretedOption* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__UninterpretedOption_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__UninterpretedOption_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_name(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_UninterpretedOption_NamePart* const* google_protobuf_UninterpretedOption_name(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_UninterpretedOption_NamePart* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5191,122 +5264,123 @@
}
UPB_INLINE const upb_Array* _google_protobuf_UninterpretedOption_name_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(const google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_UninterpretedOption_name_mutable_upb_array(google_protobuf_UninterpretedOption* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_UninterpretedOption_has_name(const google_protobuf_UninterpretedOption* msg) {
- size_t size;
- google_protobuf_UninterpretedOption_name(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_identifier_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_identifier_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_identifier_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_positive_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE uint64_t google_protobuf_UninterpretedOption_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
uint64_t default_val = (uint64_t)0ull;
uint64_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_positive_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_negative_int_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int64_t google_protobuf_UninterpretedOption_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
int64_t default_val = (int64_t)0ll;
int64_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_negative_int_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_double_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE double google_protobuf_UninterpretedOption_double_value(const google_protobuf_UninterpretedOption* msg) {
double default_val = 0;
double ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_double_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_string_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 7);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_string_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 7);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_string_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 7);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_clear_aggregate_value(google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 8);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 8);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_has_aggregate_value(const google_protobuf_UninterpretedOption* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 8);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_mutable_name(google_protobuf_UninterpretedOption* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_UninterpretedOption_NamePart**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5315,42 +5389,46 @@
}
UPB_INLINE google_protobuf_UninterpretedOption_NamePart** google_protobuf_UninterpretedOption_resize_name(google_protobuf_UninterpretedOption* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_UninterpretedOption_NamePart**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_add_name(google_protobuf_UninterpretedOption* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_UninterpretedOption_NamePart* sub = (struct google_protobuf_UninterpretedOption_NamePart*)_upb_Message_New(google__protobuf__UninterpretedOption__NamePart_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_identifier_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_positive_int_value(google_protobuf_UninterpretedOption *msg, uint64_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_negative_int_value(google_protobuf_UninterpretedOption *msg, int64_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_double_value(google_protobuf_UninterpretedOption *msg, double value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_string_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 7);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_set_aggregate_value(google_protobuf_UninterpretedOption *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption_msg_init(), 8);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.UninterpretedOption.NamePart */
@@ -5361,7 +5439,8 @@
UPB_INLINE google_protobuf_UninterpretedOption_NamePart* google_protobuf_UninterpretedOption_NamePart_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__UninterpretedOption__NamePart_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__UninterpretedOption__NamePart_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5371,61 +5450,63 @@
int options, upb_Arena* arena) {
google_protobuf_UninterpretedOption_NamePart* ret = google_protobuf_UninterpretedOption_NamePart_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__UninterpretedOption__NamePart_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__UninterpretedOption__NamePart_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize(const google_protobuf_UninterpretedOption_NamePart* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__UninterpretedOption__NamePart_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__UninterpretedOption__NamePart_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_UninterpretedOption_NamePart_serialize_ex(const google_protobuf_UninterpretedOption_NamePart* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__UninterpretedOption__NamePart_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__UninterpretedOption__NamePart_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_name_part(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_UninterpretedOption_NamePart_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_name_part(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_clear_is_extension(google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
bool default_val = false;
bool ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_UninterpretedOption_NamePart_has_is_extension(const google_protobuf_UninterpretedOption_NamePart* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_name_part(google_protobuf_UninterpretedOption_NamePart *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_UninterpretedOption_NamePart_set_is_extension(google_protobuf_UninterpretedOption_NamePart *msg, bool value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__UninterpretedOption__NamePart_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSet */
@@ -5436,7 +5517,8 @@
UPB_INLINE google_protobuf_FeatureSet* google_protobuf_FeatureSet_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FeatureSet_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FeatureSet_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5446,137 +5528,143 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSet* ret = google_protobuf_FeatureSet_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FeatureSet_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FeatureSet_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize(const google_protobuf_FeatureSet* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FeatureSet_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FeatureSet_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSet_serialize_ex(const google_protobuf_FeatureSet* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FeatureSet_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FeatureSet_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSet_clear_field_presence(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_field_presence(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_field_presence(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_enum_type(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_enum_type(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_enum_type(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_repeated_field_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_repeated_field_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_utf8_validation(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_utf8_validation(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_utf8_validation(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_message_encoding(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_message_encoding(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_message_encoding(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_clear_json_format(google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSet_json_format(const google_protobuf_FeatureSet* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 6);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSet_has_json_format(const google_protobuf_FeatureSet* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 6);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSet_set_field_presence(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_enum_type(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_repeated_field_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_utf8_validation(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_message_encoding(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSet_set_json_format(google_protobuf_FeatureSet *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSet_msg_init(), 6);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults */
@@ -5587,7 +5675,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults* google_protobuf_FeatureSetDefaults_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FeatureSetDefaults_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FeatureSetDefaults_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5597,32 +5686,32 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults* ret = google_protobuf_FeatureSetDefaults_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FeatureSetDefaults_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FeatureSetDefaults_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize(const google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FeatureSetDefaults_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FeatureSetDefaults_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_serialize_ex(const google_protobuf_FeatureSetDefaults* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FeatureSetDefaults_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FeatureSetDefaults_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_defaults(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const* google_protobuf_FeatureSetDefaults_defaults(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5631,62 +5720,59 @@
}
UPB_INLINE const upb_Array* _google_protobuf_FeatureSetDefaults_defaults_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(const google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_FeatureSetDefaults_defaults_mutable_upb_array(google_protobuf_FeatureSetDefaults* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_defaults(const google_protobuf_FeatureSetDefaults* msg) {
- size_t size;
- google_protobuf_FeatureSetDefaults_defaults(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_minimum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_minimum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_clear_maximum_edition(google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_has_maximum_edition(const google_protobuf_FeatureSetDefaults* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_mutable_defaults(google_protobuf_FeatureSetDefaults* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5695,26 +5781,30 @@
}
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault** google_protobuf_FeatureSetDefaults_resize_defaults(google_protobuf_FeatureSetDefaults* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_add_defaults(google_protobuf_FeatureSetDefaults* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* sub = (struct google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault*)_upb_Message_New(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_minimum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_set_maximum_edition(google_protobuf_FeatureSetDefaults *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault */
@@ -5725,7 +5815,8 @@
UPB_INLINE google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5735,57 +5826,59 @@
int options, upb_Arena* arena) {
google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* ret = google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_serialize_ex(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const google_protobuf_FeatureSet* default_val = NULL;
const google_protobuf_FeatureSet* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_features(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_clear_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_has_edition(const google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, google_protobuf_FeatureSet* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_FeatureSet* google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_mutable_features(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault* msg, upb_Arena* arena) {
struct google_protobuf_FeatureSet* sub = (struct google_protobuf_FeatureSet*)google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_features(msg);
@@ -5797,7 +5890,7 @@
}
UPB_INLINE void google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_set_edition(google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__FeatureSetDefaults__FeatureSetEditionDefault_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.SourceCodeInfo */
@@ -5808,7 +5901,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo* google_protobuf_SourceCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__SourceCodeInfo_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__SourceCodeInfo_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5818,32 +5912,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo* ret = google_protobuf_SourceCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__SourceCodeInfo_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__SourceCodeInfo_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize(const google_protobuf_SourceCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__SourceCodeInfo_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__SourceCodeInfo_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_serialize_ex(const google_protobuf_SourceCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__SourceCodeInfo_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__SourceCodeInfo_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_clear_location(google_protobuf_SourceCodeInfo* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_SourceCodeInfo_Location* const* google_protobuf_SourceCodeInfo_location(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_SourceCodeInfo_Location* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5852,32 +5946,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_location_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(const google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_location_mutable_upb_array(google_protobuf_SourceCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_has_location(const google_protobuf_SourceCodeInfo* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_location(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_mutable_location(google_protobuf_SourceCodeInfo* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_SourceCodeInfo_Location**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -5886,17 +5975,21 @@
}
UPB_INLINE google_protobuf_SourceCodeInfo_Location** google_protobuf_SourceCodeInfo_resize_location(google_protobuf_SourceCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_SourceCodeInfo_Location**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_add_location(google_protobuf_SourceCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_SourceCodeInfo_Location* sub = (struct google_protobuf_SourceCodeInfo_Location*)_upb_Message_New(google__protobuf__SourceCodeInfo__Location_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -5908,7 +6001,8 @@
UPB_INLINE google_protobuf_SourceCodeInfo_Location* google_protobuf_SourceCodeInfo_Location_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__SourceCodeInfo__Location_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__SourceCodeInfo__Location_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -5918,32 +6012,32 @@
int options, upb_Arena* arena) {
google_protobuf_SourceCodeInfo_Location* ret = google_protobuf_SourceCodeInfo_Location_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__SourceCodeInfo__Location_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__SourceCodeInfo__Location_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize(const google_protobuf_SourceCodeInfo_Location* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__SourceCodeInfo__Location_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__SourceCodeInfo__Location_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_SourceCodeInfo_Location_serialize_ex(const google_protobuf_SourceCodeInfo_Location* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__SourceCodeInfo__Location_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__SourceCodeInfo__Location_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_path(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_path(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5952,35 +6046,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_path_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_path_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_path(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_span(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_SourceCodeInfo_Location_span(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -5989,65 +6078,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_span_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_span_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_span(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_span(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_trailing_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_SourceCodeInfo_Location_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_trailing_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_clear_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_SourceCodeInfo_Location_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6056,32 +6142,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(const google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_SourceCodeInfo_Location_leading_detached_comments_mutable_upb_array(google_protobuf_SourceCodeInfo_Location* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_has_leading_detached_comments(const google_protobuf_SourceCodeInfo_Location* msg) {
- size_t size;
- google_protobuf_SourceCodeInfo_Location_leading_detached_comments(msg, &size);
- return size != 0;
-}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_path(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6090,22 +6171,26 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_path(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_path(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_mutable_span(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6114,30 +6199,34 @@
}
UPB_INLINE int32_t* google_protobuf_SourceCodeInfo_Location_resize_span(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_span(google_protobuf_SourceCodeInfo_Location* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 2);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_leading_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_SourceCodeInfo_Location_set_trailing_comments(google_protobuf_SourceCodeInfo_Location *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_mutable_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6146,15 +6235,19 @@
}
UPB_INLINE upb_StringView* google_protobuf_SourceCodeInfo_Location_resize_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_SourceCodeInfo_Location_add_leading_detached_comments(google_protobuf_SourceCodeInfo_Location* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__SourceCodeInfo__Location_msg_init(), 6);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
@@ -6166,7 +6259,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo* google_protobuf_GeneratedCodeInfo_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__GeneratedCodeInfo_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__GeneratedCodeInfo_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6176,32 +6270,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo* ret = google_protobuf_GeneratedCodeInfo_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__GeneratedCodeInfo_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__GeneratedCodeInfo_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize(const google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__GeneratedCodeInfo_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__GeneratedCodeInfo_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_serialize_ex(const google_protobuf_GeneratedCodeInfo* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__GeneratedCodeInfo_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__GeneratedCodeInfo_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_clear_annotation(google_protobuf_GeneratedCodeInfo* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_GeneratedCodeInfo_Annotation* const* google_protobuf_GeneratedCodeInfo_annotation(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_GeneratedCodeInfo_Annotation* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6210,32 +6304,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(const google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_annotation_mutable_upb_array(google_protobuf_GeneratedCodeInfo* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_has_annotation(const google_protobuf_GeneratedCodeInfo* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_annotation(msg, &size);
- return size != 0;
-}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_mutable_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_GeneratedCodeInfo_Annotation**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6244,17 +6333,21 @@
}
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation** google_protobuf_GeneratedCodeInfo_resize_annotation(google_protobuf_GeneratedCodeInfo* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_GeneratedCodeInfo_Annotation**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_add_annotation(google_protobuf_GeneratedCodeInfo* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_GeneratedCodeInfo_Annotation* sub = (struct google_protobuf_GeneratedCodeInfo_Annotation*)_upb_Message_New(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -6266,7 +6359,8 @@
UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation* google_protobuf_GeneratedCodeInfo_Annotation_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -6276,32 +6370,32 @@
int options, upb_Arena* arena) {
google_protobuf_GeneratedCodeInfo_Annotation* ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize(const google_protobuf_GeneratedCodeInfo_Annotation* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_GeneratedCodeInfo_Annotation_serialize_ex(const google_protobuf_GeneratedCodeInfo_Annotation* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_path(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t const* google_protobuf_GeneratedCodeInfo_Annotation_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -6310,92 +6404,91 @@
}
UPB_INLINE const upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(const google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_GeneratedCodeInfo_Annotation_path_mutable_upb_array(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_path(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
- size_t size;
- google_protobuf_GeneratedCodeInfo_Annotation_path(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_source_file(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_GeneratedCodeInfo_Annotation_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_source_file(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_begin(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_begin(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_end(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_end(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_clear_semantic(google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 5);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_GeneratedCodeInfo_Annotation_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
int32_t default_val = 0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 5);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_has_semantic(const google_protobuf_GeneratedCodeInfo_Annotation* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 5);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_mutable_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (int32_t*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -6404,37 +6497,41 @@
}
UPB_INLINE int32_t* google_protobuf_GeneratedCodeInfo_Annotation_resize_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- return (int32_t*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_GeneratedCodeInfo_Annotation_add_path(google_protobuf_GeneratedCodeInfo_Annotation* msg, int32_t val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_source_file(google_protobuf_GeneratedCodeInfo_Annotation *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_begin(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_end(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_GeneratedCodeInfo_Annotation_set_semantic(google_protobuf_GeneratedCodeInfo_Annotation *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__GeneratedCodeInfo__Annotation_msg_init(), 5);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* Max size 32 is google.protobuf.FileOptions */
/* Max size 64 is google.protobuf.FileOptions */
-#define _UPB_MAXOPT_SIZE UPB_SIZE(112, 200)
+#define _UPB_MAXOPT_SIZE UPB_SIZE(104, 192)
#ifdef __cplusplus
} /* extern "C" */
diff --git a/upb/test/BUILD b/upb/test/BUILD
index 93661f4..493a51e 100644
--- a/upb/test/BUILD
+++ b/upb/test/BUILD
@@ -164,10 +164,10 @@
visibility = ["//upb:__subpackages__"],
deps = [
"//upb:base",
+ "//upb:mem",
"//upb:message",
"//upb:mini_descriptor",
"//upb:mini_table",
- "//upb:mini_table_internal",
"//upb:port",
],
)
@@ -179,8 +179,9 @@
deps = [
":proto3_test_upb_proto",
":proto3_test_upb_proto_reflection",
- "@com_google_googletest//:gtest_main",
"//upb:reflection",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -191,10 +192,11 @@
deps = [
":editions_test_upb_c_proto",
":editions_test_upb_proto_reflection",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:reflection",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -207,10 +209,12 @@
":test_cpp_upb_proto_reflection",
":timestamp_upb_proto",
":timestamp_upb_proto_reflection",
- "@com_google_googletest//:gtest_main",
+ "//upb:base",
"//upb:json",
"//upb:port",
"//upb:reflection",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -224,11 +228,12 @@
":test_messages_proto2_upb_proto",
":test_messages_proto3_upb_proto",
":test_upb_proto",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:mem",
"//upb:message",
"//upb:port",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -242,9 +247,9 @@
":proto3_test_upb_proto",
":test_messages_proto2_upb_minitable",
":test_upb_proto",
- "@com_google_googletest//:gtest_main",
"//upb:mini_table",
- "//upb:port",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -296,6 +301,30 @@
srcs = ["test_import_empty_srcs.cc"],
deps = [
":test_import_empty_srcs_upb_minitable_proto",
+ "@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*.cc",
+ "**/*.h",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+
+filegroup(
+ name = "test_utils",
+ srcs = glob(
+ [
+ "**/*.proto",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+# end:github_only
diff --git a/upb/test/fuzz_util.cc b/upb/test/fuzz_util.cc
index 714fcac..e4612ae 100644
--- a/upb/test/fuzz_util.cc
+++ b/upb/test/fuzz_util.cc
@@ -7,11 +7,20 @@
#include "upb/test/fuzz_util.h"
+#include <stddef.h>
+
+#include <vector>
+
+#include "upb/base/descriptor_constants.h"
#include "upb/base/status.hpp"
-#include "upb/message/message.h"
+#include "upb/mem/arena.h"
#include "upb/mini_descriptor/decode.h"
+#include "upb/mini_table/enum.h"
#include "upb/mini_table/extension.h"
#include "upb/mini_table/extension_registry.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
// Must be last
#include "upb/port/def.inc"
@@ -87,16 +96,17 @@
}
bool Builder::LinkExtension(upb_MiniTableExtension* ext) {
- upb_MiniTableField* field = &ext->field;
+ upb_MiniTableField* field =
+ (upb_MiniTableField*)upb_MiniTableExtension_AsField(ext);
if (upb_MiniTableField_CType(field) == kUpb_CType_Message) {
auto mt = NextMiniTable();
if (!mt) field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_Int32;
- ext->sub.submsg = mt;
+ ext->UPB_PRIVATE(sub) = upb_MiniTableSub_FromMessage(mt);
}
if (upb_MiniTableField_IsClosedEnum(field)) {
auto et = NextEnumTable();
if (!et) field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_Int32;
- ext->sub.subenum = et;
+ ext->UPB_PRIVATE(sub) = upb_MiniTableSub_FromEnum(et);
}
return true;
}
@@ -120,7 +130,8 @@
status.ptr());
if (!ptr) break;
if (!LinkExtension(ext)) continue;
- if (upb_ExtensionRegistry_Lookup(*exts, ext->extendee, ext->field.number))
+ if (upb_ExtensionRegistry_Lookup(*exts, ext->UPB_PRIVATE(extendee),
+ upb_MiniTableExtension_Number(ext)))
continue;
upb_ExtensionRegistry_AddArray(
*exts, const_cast<const upb_MiniTableExtension**>(&ext), 1);
@@ -132,9 +143,9 @@
for (auto* t : mini_tables_) {
upb_MiniTable* table = const_cast<upb_MiniTable*>(t);
// For each field that requires a sub-table, assign one as appropriate.
- for (size_t i = 0; i < table->field_count; i++) {
+ for (size_t i = 0; i < table->UPB_PRIVATE(field_count); i++) {
upb_MiniTableField* field =
- const_cast<upb_MiniTableField*>(&table->fields[i]);
+ const_cast<upb_MiniTableField*>(&table->UPB_PRIVATE(fields)[i]);
if (link_ == input_->links.size()) link_ = 0;
if (upb_MiniTableField_CType(field) == kUpb_CType_Message &&
!upb_MiniTable_SetSubMessage(table, field, NextMiniTable())) {
diff --git a/upb/test/fuzz_util.h b/upb/test/fuzz_util.h
index 72bf31e..8e585d8 100644
--- a/upb/test/fuzz_util.h
+++ b/upb/test/fuzz_util.h
@@ -11,8 +11,9 @@
#include <string>
#include <vector>
+#include "upb/mem/arena.h"
#include "upb/mini_table/extension_registry.h"
-// #include "upb/mini_table/types.h"
+#include "upb/mini_table/message.h"
namespace upb {
namespace fuzz {
diff --git a/upb/test/test_cpp.cc b/upb/test/test_cpp.cc
index a2d1c4c..6f91715 100644
--- a/upb/test/test_cpp.cc
+++ b/upb/test/test_cpp.cc
@@ -17,6 +17,7 @@
#include "google/protobuf/timestamp.upb.h"
#include "google/protobuf/timestamp.upbdefs.h"
#include <gtest/gtest.h>
+#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/reflection/def.h"
@@ -57,7 +58,8 @@
upb::Arena arena;
upb::MessageDefPtr md(upb_test_TestMessage_getmsgdef(defpool.ptr()));
upb_test_TestMessage* msg = upb_test_TestMessage_new(arena.ptr());
- size_t size = upb_JsonEncode(msg, md.ptr(), nullptr, 0, nullptr, 0, nullptr);
+ size_t size = upb_JsonEncode(UPB_UPCAST(msg), md.ptr(), nullptr, 0, nullptr,
+ 0, nullptr);
EXPECT_EQ(2, size); // "{}"
}
@@ -95,10 +97,10 @@
google_protobuf_Timestamp_set_seconds(timestamp_upb, timestamp);
char json[128];
- size_t size = upb_JsonEncode(timestamp_upb, md.ptr(), nullptr, 0, json,
- sizeof(json), nullptr);
- bool result = upb_JsonDecode(json, size, timestamp_upb_decoded, md.ptr(),
- nullptr, 0, arena.ptr(), nullptr);
+ size_t size = upb_JsonEncode(UPB_UPCAST(timestamp_upb), md.ptr(), nullptr,
+ 0, json, sizeof(json), nullptr);
+ bool result = upb_JsonDecode(json, size, UPB_UPCAST(timestamp_upb_decoded),
+ md.ptr(), nullptr, 0, arena.ptr(), nullptr);
const int64_t timestamp_decoded =
google_protobuf_Timestamp_seconds(timestamp_upb_decoded);
diff --git a/upb/test/test_mini_table_oneof.cc b/upb/test/test_mini_table_oneof.cc
index 850d571..5d31fe3 100644
--- a/upb/test/test_mini_table_oneof.cc
+++ b/upb/test/test_mini_table_oneof.cc
@@ -11,9 +11,6 @@
#include "upb/mini_table/message.h"
#include "upb/test/proto3_test.upb.h"
-// Must be last.
-#include "upb/port/def.inc"
-
TEST(MiniTableOneofTest, OneOfIteratorProto2) {
constexpr int oneof_first_field_number = 111;
constexpr int oneof_test_field_number = 116;
@@ -26,7 +23,7 @@
const upb_MiniTableField* ptr = upb_MiniTable_GetOneof(google_protobuf_table, field);
int field_num = oneof_first_field_number;
do {
- EXPECT_EQ(ptr->number, field_num++);
+ EXPECT_EQ(upb_MiniTableField_Number(ptr), field_num++);
} while (upb_MiniTable_NextOneofField(google_protobuf_table, &ptr));
}
diff --git a/upb/text/BUILD b/upb/text/BUILD
index 575dda3..5d24185 100644
--- a/upb/text/BUILD
+++ b/upb/text/BUILD
@@ -19,14 +19,13 @@
visibility = ["//visibility:public"],
deps = [
"//upb:eps_copy_input_stream",
- "//upb:lex",
"//upb:message",
- "//upb:message_internal",
"//upb:port",
"//upb:reflection",
"//upb:wire",
"//upb:wire_reader",
- "//upb:wire_types",
+ "//upb/lex",
+ "//upb/message:internal",
],
)
@@ -40,8 +39,8 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
)
# end:github_only
diff --git a/upb/upb_so.c b/upb/upb_so.c
index a7bb3e7..a8769ab 100644
--- a/upb/upb_so.c
+++ b/upb/upb_so.c
@@ -10,7 +10,10 @@
// IWYU pragma: begin_exports
#include "upb/message/accessors_split64.h"
#include "upb/message/array_split64.h"
+#include "upb/message/compare.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
#include "upb/mini_descriptor/decode.h"
+#include "upb/wire/decode.h"
+#include "upb/wire/encode.h"
// IWYU pragma: end_exports
diff --git a/upb/util/BUILD b/upb/util/BUILD
index 8efb0b1..5d0ce9f 100644
--- a/upb/util/BUILD
+++ b/upb/util/BUILD
@@ -20,7 +20,7 @@
deps = [
"//upb:port",
"//upb:reflection",
- "//upb:reflection_internal",
+ "//upb/reflection:internal",
],
)
@@ -53,7 +53,7 @@
"//upb:base",
"//upb:descriptor_upb_proto",
"//upb:mem",
- "//upb:reflection_internal",
+ "//upb/reflection:internal",
"@com_google_googletest//:gtest",
],
)
@@ -67,12 +67,13 @@
":def_to_proto_test_upb_proto",
":def_to_proto_test_upb_proto_reflection",
"//:protobuf",
- "@com_google_googletest//:gtest_main",
"//upb:descriptor_upb_proto_reflection",
"//upb:mem",
"//upb:reflection",
"//upb/test:parse_text_proto",
"@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -83,7 +84,7 @@
# tags = ["clang_only"],
# deps = [
# ":def_to_proto_test_lib",
-# "@com_google_googletest//:gtest_main",
+# "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main",
# "//testing/fuzzing:fuzztest",
# ],
# )
@@ -98,6 +99,7 @@
visibility = ["//visibility:public"],
deps = [
"//upb:base",
+ "//upb:mem",
"//upb:message",
"//upb:port",
"//upb:reflection",
@@ -129,13 +131,14 @@
":required_fields",
":required_fields_test_upb_proto",
":required_fields_test_upb_proto_reflection",
- "@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:json",
"//upb:mem",
"//upb:reflection",
- "//upb:reflection_internal",
+ "//upb/reflection:internal",
"@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -149,9 +152,9 @@
deps = [
"//upb:base",
"//upb:eps_copy_input_stream",
+ "//upb:mem",
"//upb:port",
"//upb:wire_reader",
- "//upb:wire_types",
],
)
@@ -160,10 +163,12 @@
srcs = ["compare_test.cc"],
deps = [
":compare",
- "@com_google_googletest//:gtest_main",
- "//upb:wire_internal",
- "//upb:wire_types",
+ "//upb:port",
+ "//upb:wire_reader",
+ "//upb/base:internal",
"@com_google_absl//absl/strings",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -181,3 +186,25 @@
visibility = ["//python/dist:__pkg__"],
)
# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+
+filegroup(
+ name = "test_utils",
+ srcs = glob(
+ [
+ "**/*test.proto",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
+)
+# end:github_only
diff --git a/upb/util/compare.c b/upb/util/compare.c
index 2a774d0..9d29075 100644
--- a/upb/util/compare.c
+++ b/upb/util/compare.c
@@ -10,6 +10,7 @@
#include <stdlib.h>
#include "upb/base/string_view.h"
+#include "upb/mem/alloc.h"
#include "upb/wire/eps_copy_input_stream.h"
#include "upb/wire/reader.h"
#include "upb/wire/types.h"
@@ -108,9 +109,11 @@
static void upb_UnknownFields_Sort(upb_UnknownField_Context* ctx,
upb_UnknownFields* fields) {
if (ctx->tmp_size < fields->size) {
+ const int oldsize = ctx->tmp_size * sizeof(*ctx->tmp);
ctx->tmp_size = UPB_MAX(8, ctx->tmp_size);
while (ctx->tmp_size < fields->size) ctx->tmp_size *= 2;
- ctx->tmp = realloc(ctx->tmp, ctx->tmp_size * sizeof(*ctx->tmp));
+ const int newsize = ctx->tmp_size * sizeof(*ctx->tmp);
+ ctx->tmp = upb_grealloc(ctx->tmp, oldsize, newsize);
}
upb_UnknownFields_SortRecursive(fields->fields, 0, fields->size, ctx->tmp);
}
@@ -261,7 +264,7 @@
}
upb_Arena_Free(ctx->arena);
- free(ctx->tmp);
+ upb_gfree(ctx->tmp);
return ret;
}
diff --git a/upb/util/compare_test.cc b/upb/util/compare_test.cc
index f9b34da..1a1a293 100644
--- a/upb/util/compare_test.cc
+++ b/upb/util/compare_test.cc
@@ -15,9 +15,12 @@
#include <vector>
#include <gtest/gtest.h>
-#include "upb/wire/internal/swap.h"
+#include "upb/base/internal/endian.h"
#include "upb/wire/types.h"
+// Must be last.
+#include "upb/port/def.inc"
+
struct UnknownField;
using UnknownFields = std::vector<UnknownField>;
@@ -81,11 +84,11 @@
ret.append(val->val);
} else if (const auto* val = std::get_if<Fixed64>(&field.value)) {
EncodeVarint(field.field_number << 3 | kUpb_WireType_64Bit, &ret);
- uint64_t swapped = _upb_BigEndian_Swap64(val->val);
+ uint64_t swapped = upb_BigEndian64(val->val);
ret.append(reinterpret_cast<const char*>(&swapped), sizeof(swapped));
} else if (const auto* val = std::get_if<Fixed32>(&field.value)) {
EncodeVarint(field.field_number << 3 | kUpb_WireType_32Bit, &ret);
- uint32_t swapped = _upb_BigEndian_Swap32(val->val);
+ uint32_t swapped = upb_BigEndian32(val->val);
ret.append(reinterpret_cast<const char*>(&swapped), sizeof(swapped));
} else if (const auto* val = std::get_if<Group>(&field.value)) {
EncodeVarint(field.field_number << 3 | kUpb_WireType_StartGroup, &ret);
diff --git a/upb/util/def_to_proto_test.cc b/upb/util/def_to_proto_test.cc
index cad9abf..523efd2 100644
--- a/upb/util/def_to_proto_test.cc
+++ b/upb/util/def_to_proto_test.cc
@@ -75,9 +75,9 @@
AddMessageDescriptor(msgdef, &pool);
EXPECT_TRUE(desc != nullptr);
std::unique_ptr<google::protobuf::Message> m1(
- ToProto(proto, msgdef.ptr(), desc, &factory));
+ ToProto(UPB_UPCAST(proto), msgdef.ptr(), desc, &factory));
std::unique_ptr<google::protobuf::Message> m2(
- ToProto(arg, msgdef.ptr(), desc, &factory));
+ ToProto((upb_Message*)arg, msgdef.ptr(), desc, &factory));
std::string differences;
google::protobuf::util::MessageDifferencer differencer;
differencer.ReportDifferencesToString(&differences);
diff --git a/upb/util/def_to_proto_test.h b/upb/util/def_to_proto_test.h
index fdd102a..f8e017c 100644
--- a/upb/util/def_to_proto_test.h
+++ b/upb/util/def_to_proto_test.h
@@ -46,9 +46,9 @@
}
class NullErrorCollector : public google::protobuf::DescriptorPool::ErrorCollector {
- void AddError(const std::string& filename, const std::string& element_name,
- const google::protobuf::Message* descriptor, ErrorLocation location,
- const std::string& message) override {}
+ void RecordError(absl::string_view filename, absl::string_view element_name,
+ const google::protobuf::Message* descriptor, ErrorLocation location,
+ absl::string_view message) override {}
void RecordWarning(absl::string_view filename, absl::string_view element_name,
const google::protobuf::Message* descriptor, ErrorLocation location,
absl::string_view message) override {}
diff --git a/upb/util/required_fields.c b/upb/util/required_fields.c
index b93adc0..c372386 100644
--- a/upb/util/required_fields.c
+++ b/upb/util/required_fields.c
@@ -17,6 +17,7 @@
#include <string.h>
#include "upb/base/descriptor_constants.h"
+#include "upb/mem/alloc.h"
#include "upb/message/array.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
@@ -168,10 +169,12 @@
upb_FieldPathVector* vec,
size_t elems) {
if (vec->cap - vec->size < elems) {
+ const int oldsize = vec->cap * sizeof(*vec->path);
size_t need = vec->size + elems;
vec->cap = UPB_MAX(4, vec->cap);
while (vec->cap < need) vec->cap *= 2;
- vec->path = realloc(vec->path, vec->cap * sizeof(*vec->path));
+ const int newsize = vec->cap * sizeof(*vec->path);
+ vec->path = upb_grealloc(vec->path, oldsize, newsize);
if (!vec->path) {
UPB_LONGJMP(ctx->err, 1);
}
@@ -289,7 +292,7 @@
upb_FieldPathVector_Init(&ctx.stack);
upb_FieldPathVector_Init(&ctx.out_fields);
upb_util_FindUnsetRequiredInternal(&ctx, msg, m);
- free(ctx.stack.path);
+ upb_gfree(ctx.stack.path);
if (ctx.has_unset_required && fields) {
upb_FieldPathVector_Reserve(&ctx, &ctx.out_fields, 1);
diff --git a/upb/util/required_fields_test.cc b/upb/util/required_fields_test.cc
index 396c3aa..7698cfb 100644
--- a/upb/util/required_fields_test.cc
+++ b/upb/util/required_fields_test.cc
@@ -12,6 +12,7 @@
#include <gtest/gtest.h>
#include "absl/strings/string_view.h"
#include "upb/base/status.hpp"
+#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/mem/arena.h"
#include "upb/mem/arena.hpp"
@@ -53,13 +54,14 @@
auto* test_msg = T::NewMessage(arena.ptr());
upb::MessageDefPtr m = T::GetMessageDef(defpool.ptr());
upb::Status status;
- EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), test_msg, m.ptr(),
- defpool.ptr(), 0, arena.ptr(), status.ptr()))
+ EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(test_msg),
+ m.ptr(), defpool.ptr(), 0, arena.ptr(),
+ status.ptr()))
<< status.error_message();
upb_FieldPathEntry* entries = nullptr;
- EXPECT_EQ(
- !missing.empty(),
- upb_util_HasUnsetRequired(test_msg, m.ptr(), defpool.ptr(), &entries));
+ EXPECT_EQ(!missing.empty(),
+ upb_util_HasUnsetRequired(UPB_UPCAST(test_msg), m.ptr(),
+ defpool.ptr(), &entries));
if (entries) {
EXPECT_EQ(missing, PathsToText(entries));
free(entries);
@@ -67,8 +69,9 @@
// Verify that we can pass a NULL pointer to entries when we don't care
// about them.
- EXPECT_EQ(!missing.empty(), upb_util_HasUnsetRequired(
- test_msg, m.ptr(), defpool.ptr(), nullptr));
+ EXPECT_EQ(!missing.empty(),
+ upb_util_HasUnsetRequired(UPB_UPCAST(test_msg), m.ptr(),
+ defpool.ptr(), nullptr));
}
};
diff --git a/upb/wire/BUILD b/upb/wire/BUILD
index 6115b86..f655d64 100644
--- a/upb/wire/BUILD
+++ b/upb/wire/BUILD
@@ -10,82 +10,55 @@
cc_library(
name = "wire",
srcs = [
- ],
- hdrs = [
- "decode.h",
- "encode.h",
- ],
- copts = UPB_DEFAULT_COPTS,
- visibility = ["//visibility:public"],
- deps = [
- ":internal",
- ":types",
- "//upb:mem",
- "//upb:message",
- "//upb:mini_table",
- "//upb:port",
- ],
-)
-
-cc_library(
- name = "internal",
- srcs = [
"decode.c",
- "decode.h",
- "decode_fast.c",
"encode.c",
- "encode.h",
+ "internal/constants.h",
+ "internal/decode_fast.c",
+ "internal/decoder.h",
],
hdrs = [
- "decode_fast.h",
- "internal/constants.h",
- "internal/decode.h",
- "internal/swap.h",
+ "decode.h",
+ "encode.h",
+ "internal/decode_fast.h",
],
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],
deps = [
":eps_copy_input_stream",
":reader",
- ":types",
- "//upb:base",
- "//upb:hash",
- "//upb:mem",
- "//upb:mem_internal",
- "//upb:message",
- "//upb:message_accessors_internal",
- "//upb:message_internal",
- "//upb:message_internal_types",
- "//upb:message_tagged_ptr",
- "//upb:mini_table",
- "//upb:mini_table_internal",
- "//upb:port",
"//third_party/utf8_range",
+ "//upb:base",
+ "//upb:mem",
+ "//upb:message",
+ "//upb:mini_table",
+ "//upb:port",
+ "//upb/base:internal",
+ "//upb/hash",
+ "//upb/mem:internal",
+ "//upb/message:internal",
+ "//upb/mini_table:internal",
],
)
cc_library(
name = "reader",
srcs = [
- "internal/swap.h",
+ "internal/reader.h",
"reader.c",
],
- hdrs = ["reader.h"],
+ hdrs = [
+ "reader.h",
+ "types.h",
+ ],
visibility = ["//visibility:public"],
deps = [
":eps_copy_input_stream",
- ":types",
"//upb:port",
+ "//upb/base:internal",
],
)
cc_library(
- name = "types",
- hdrs = ["types.h"],
- visibility = ["//visibility:public"],
-)
-
-cc_library(
name = "eps_copy_input_stream",
srcs = ["eps_copy_input_stream.c"],
hdrs = ["eps_copy_input_stream.h"],
@@ -101,8 +74,9 @@
srcs = ["eps_copy_input_stream_test.cc"],
deps = [
":eps_copy_input_stream",
- "@com_google_googletest//:gtest_main",
"//upb:mem",
+ "@com_google_googletest//:gtest",
+ "@com_google_googletest//:gtest_main",
],
)
@@ -116,8 +90,20 @@
],
),
visibility = [
- "//upb/cmake:__pkg__",
"//python/dist:__pkg__",
- ]
+ "//upb/cmake:__pkg__",
+ ],
+)
+# end:github_only
+
+# begin:github_only
+filegroup(
+ name = "test_srcs",
+ srcs = glob(
+ [
+ "**/*test.cc",
+ ],
+ ),
+ visibility = ["//pkg:__pkg__"],
)
# end:github_only
diff --git a/upb/wire/decode.c b/upb/wire/decode.c
index c528c91..c827039 100644
--- a/upb/wire/decode.c
+++ b/upb/wire/decode.c
@@ -14,10 +14,10 @@
#include <string.h>
#include "upb/base/descriptor_constants.h"
+#include "upb/base/internal/endian.h"
#include "upb/base/string_view.h"
#include "upb/hash/common.h"
#include "upb/mem/arena.h"
-#include "upb/mem/internal/arena.h"
#include "upb/message/array.h"
#include "upb/message/internal/accessors.h"
#include "upb/message/internal/array.h"
@@ -25,6 +25,7 @@
#include "upb/message/internal/map.h"
#include "upb/message/internal/map_entry.h"
#include "upb/message/internal/message.h"
+#include "upb/message/internal/tagged_ptr.h"
#include "upb/message/map.h"
#include "upb/message/message.h"
#include "upb/message/tagged_ptr.h"
@@ -32,17 +33,16 @@
#include "upb/mini_table/extension.h"
#include "upb/mini_table/extension_registry.h"
#include "upb/mini_table/field.h"
-#include "upb/mini_table/internal/enum.h"
#include "upb/mini_table/internal/field.h"
#include "upb/mini_table/internal/message.h"
+#include "upb/mini_table/internal/size_log2.h"
#include "upb/mini_table/message.h"
#include "upb/mini_table/sub.h"
#include "upb/port/atomic.h"
#include "upb/wire/encode.h"
#include "upb/wire/eps_copy_input_stream.h"
#include "upb/wire/internal/constants.h"
-#include "upb/wire/internal/decode.h"
-#include "upb/wire/internal/swap.h"
+#include "upb/wire/internal/decoder.h"
#include "upb/wire/reader.h"
// Must be last.
@@ -87,6 +87,27 @@
uint32_t size;
} wireval;
+// Ideally these two functions should take the owning MiniTable pointer as a
+// first argument, then we could just put them in mini_table/message.h as nice
+// clean getters. But we don't have that so instead we gotta write these
+// Frankenfunctions that take an array of subtables.
+// TODO: Move these to mini_table/ anyway since there are other places
+// that could use them.
+
+// Returns the MiniTable corresponding to a given MiniTableField
+// from an array of MiniTableSubs.
+static const upb_MiniTable* _upb_MiniTableSubs_MessageByField(
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ return upb_MiniTableSub_Message(subs[field->UPB_PRIVATE(submsg_index)]);
+}
+
+// Returns the MiniTableEnum corresponding to a given MiniTableField
+// from an array of MiniTableSub.
+static const upb_MiniTableEnum* _upb_MiniTableSubs_EnumByField(
+ const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
+ return upb_MiniTableSub_Enum(subs[field->UPB_PRIVATE(submsg_index)]);
+}
+
static const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
upb_Message* msg,
const upb_MiniTable* layout);
@@ -112,8 +133,10 @@
}
static bool _upb_Decoder_Reserve(upb_Decoder* d, upb_Array* arr, size_t elem) {
- bool need_realloc = arr->capacity - arr->size < elem;
- if (need_realloc && !_upb_array_realloc(arr, arr->size + elem, &d->arena)) {
+ bool need_realloc =
+ arr->UPB_PRIVATE(capacity) - arr->UPB_PRIVATE(size) < elem;
+ if (need_realloc && !UPB_PRIVATE(_upb_Array_Realloc)(
+ arr, arr->UPB_PRIVATE(size) + elem, &d->arena)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
return need_realloc;
@@ -189,7 +212,7 @@
}
static void _upb_Decoder_MungeInt32(wireval* val) {
- if (!_upb_IsLittleEndian()) {
+ if (!upb_IsLittleEndian()) {
/* The next stage will memcpy(dst, &val, 4) */
val->uint32_val = val->uint64_val;
}
@@ -222,22 +245,23 @@
const upb_MiniTableSub* subs,
const upb_MiniTableField* field,
upb_TaggedMessagePtr* target) {
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
UPB_ASSERT(subl);
upb_Message* msg = _upb_Message_New(subl, &d->arena);
if (!msg) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
- // Extensions should not be unlinked. A message extension should not be
+ // Extensions should not be unlinked. A message extension should not be
// registered until its sub-message type is available to be linked.
- bool is_empty = subl == &_kUpb_MiniTable_Empty;
- bool is_extension = field->mode & kUpb_LabelFlags_IsExtension;
+ bool is_empty = UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl);
+ bool is_extension = field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension;
UPB_ASSERT(!(is_empty && is_extension));
if (is_empty && !(d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_UnlinkedSubMessage);
}
- upb_TaggedMessagePtr tagged = _upb_TaggedMessagePtr_Pack(msg, is_empty);
+ upb_TaggedMessagePtr tagged =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(msg, is_empty);
memcpy(target, &tagged, sizeof(tagged));
return msg;
}
@@ -246,16 +270,18 @@
upb_Decoder* d, const upb_MiniTableSub* subs,
const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
upb_TaggedMessagePtr tagged = *target;
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
UPB_ASSERT(subl);
- if (!upb_TaggedMessagePtr_IsEmpty(tagged) || subl == &_kUpb_MiniTable_Empty) {
- return _upb_TaggedMessagePtr_GetMessage(tagged);
+ if (!upb_TaggedMessagePtr_IsEmpty(tagged) ||
+ UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl)) {
+ return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
}
// We found an empty message from a previous parse that was performed before
// this field was linked. But it is linked now, so we want to allocate a new
// message of the correct type and promote data into it before continuing.
- upb_Message* existing = _upb_TaggedMessagePtr_GetEmptyMessage(tagged);
+ upb_Message* existing =
+ UPB_PRIVATE(_upb_TaggedMessagePtr_GetEmptyMessage)(tagged);
upb_Message* promoted = _upb_Decoder_NewSubMessage(d, subs, field, target);
size_t size;
const char* unknown = upb_Message_GetUnknown(existing, &size);
@@ -297,7 +323,7 @@
upb_Decoder* d, const char* ptr, upb_Message* submsg,
const upb_MiniTableSub* subs, const upb_MiniTableField* field, int size) {
int saved_delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
UPB_ASSERT(subl);
ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, DECODE_NOGROUP);
upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_delta);
@@ -328,9 +354,10 @@
static const char* _upb_Decoder_DecodeKnownGroup(
upb_Decoder* d, const char* ptr, upb_Message* submsg,
const upb_MiniTableSub* subs, const upb_MiniTableField* field) {
- const upb_MiniTable* subl = subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
UPB_ASSERT(subl);
- return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl, field->number);
+ return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl,
+ field->UPB_PRIVATE(number));
}
static char* upb_Decoder_EncodeVarint32(uint32_t val, char* ptr) {
@@ -350,39 +377,30 @@
end = upb_Decoder_EncodeVarint32(val1, end);
end = upb_Decoder_EncodeVarint32(val2, end);
- if (!_upb_Message_AddUnknown(msg, buf, end - buf, &d->arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, end - buf, &d->arena)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
}
-UPB_NOINLINE
-static bool _upb_Decoder_CheckEnumSlow(upb_Decoder* d, const char* ptr,
- upb_Message* msg,
- const upb_MiniTableEnum* e,
- const upb_MiniTableField* field,
- uint32_t v) {
- if (_upb_MiniTable_CheckEnumValueSlow(e, v)) return true;
-
- // Unrecognized enum goes into unknown fields.
- // For packed fields the tag could be arbitrarily far in the past, so we
- // just re-encode the tag and value here.
- uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Varint;
- upb_Message* unknown_msg =
- field->mode & kUpb_LabelFlags_IsExtension ? d->unknown_msg : msg;
- _upb_Decoder_AddUnknownVarints(d, unknown_msg, tag, v);
- return false;
-}
-
UPB_FORCEINLINE
static bool _upb_Decoder_CheckEnum(upb_Decoder* d, const char* ptr,
upb_Message* msg, const upb_MiniTableEnum* e,
const upb_MiniTableField* field,
wireval* val) {
- uint32_t v = val->uint32_val;
+ const uint32_t v = val->uint32_val;
- _kUpb_FastEnumCheck_Status status = _upb_MiniTable_CheckEnumValueFast(e, v);
- if (UPB_LIKELY(status == _kUpb_FastEnumCheck_ValueIsInEnum)) return true;
- return _upb_Decoder_CheckEnumSlow(d, ptr, msg, e, field, v);
+ if (UPB_LIKELY(upb_MiniTableEnum_CheckValue(e, v))) return true;
+
+ // Unrecognized enum goes into unknown fields.
+ // For packed fields the tag could be arbitrarily far in the past,
+ // so we just re-encode the tag and value here.
+ const uint32_t tag =
+ ((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Varint;
+ upb_Message* unknown_msg =
+ field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension ? d->unknown_msg
+ : msg;
+ _upb_Decoder_AddUnknownVarints(d, unknown_msg, tag, v);
+ return false;
}
UPB_NOINLINE
@@ -392,10 +410,10 @@
const upb_MiniTableSub* subs,
const upb_MiniTableField* field,
wireval* val) {
- const upb_MiniTableEnum* e = subs[field->UPB_PRIVATE(submsg_index)].subenum;
+ const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
if (!_upb_Decoder_CheckEnum(d, ptr, msg, e, field, val)) return ptr;
- void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
- arr->size++;
+ void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
+ arr->UPB_PRIVATE(size)++;
memcpy(mem, val, 4);
return ptr;
}
@@ -411,11 +429,12 @@
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
}
_upb_Decoder_Reserve(d, arr, count);
- void* mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
- arr->size += count;
+ void* mem =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
+ arr->UPB_PRIVATE(size) += count;
// Note: if/when the decoder supports multi-buffer input, we will need to
// handle buffer seams here.
- if (_upb_IsLittleEndian()) {
+ if (upb_IsLittleEndian()) {
ptr = upb_EpsCopyInputStream_Copy(&d->input, ptr, mem, val->size);
} else {
int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
@@ -442,15 +461,17 @@
const upb_MiniTableField* field, int lg2) {
int scale = 1 << lg2;
int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
+ char* out =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
while (!_upb_Decoder_IsDone(d, &ptr)) {
wireval elem;
ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
_upb_Decoder_Munge(field->UPB_PRIVATE(descriptortype), &elem);
if (_upb_Decoder_Reserve(d, arr, 1)) {
- out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << lg2, void);
+ out =
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << lg2, void);
}
- arr->size++;
+ arr->UPB_PRIVATE(size)++;
memcpy(out, &elem, scale);
out += scale;
}
@@ -463,9 +484,9 @@
upb_Decoder* d, const char* ptr, upb_Message* msg, upb_Array* arr,
const upb_MiniTableSub* subs, const upb_MiniTableField* field,
wireval* val) {
- const upb_MiniTableEnum* e = subs[field->UPB_PRIVATE(submsg_index)].subenum;
+ const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
- char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
+ char* out = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
while (!_upb_Decoder_IsDone(d, &ptr)) {
wireval elem;
ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
@@ -474,9 +495,9 @@
continue;
}
if (_upb_Decoder_Reserve(d, arr, 1)) {
- out = UPB_PTR_AT(_upb_array_ptr(arr), arr->size * 4, void);
+ out = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) * 4, void);
}
- arr->size++;
+ arr->UPB_PRIVATE(size)++;
memcpy(out, &elem, 4);
out += 4;
}
@@ -486,31 +507,9 @@
upb_Array* _upb_Decoder_CreateArray(upb_Decoder* d,
const upb_MiniTableField* field) {
- /* Maps descriptor type -> elem_size_lg2. */
- static const uint8_t kElemSizeLg2[] = {
- [0] = -1, // invalid descriptor type
- [kUpb_FieldType_Double] = 3,
- [kUpb_FieldType_Float] = 2,
- [kUpb_FieldType_Int64] = 3,
- [kUpb_FieldType_UInt64] = 3,
- [kUpb_FieldType_Int32] = 2,
- [kUpb_FieldType_Fixed64] = 3,
- [kUpb_FieldType_Fixed32] = 2,
- [kUpb_FieldType_Bool] = 0,
- [kUpb_FieldType_String] = UPB_SIZE(3, 4),
- [kUpb_FieldType_Group] = UPB_SIZE(2, 3),
- [kUpb_FieldType_Message] = UPB_SIZE(2, 3),
- [kUpb_FieldType_Bytes] = UPB_SIZE(3, 4),
- [kUpb_FieldType_UInt32] = 2,
- [kUpb_FieldType_Enum] = 2,
- [kUpb_FieldType_SFixed32] = 2,
- [kUpb_FieldType_SFixed64] = 3,
- [kUpb_FieldType_SInt32] = 2,
- [kUpb_FieldType_SInt64] = 3,
- };
-
- size_t lg2 = kElemSizeLg2[field->UPB_PRIVATE(descriptortype)];
- upb_Array* ret = _upb_Array_New(&d->arena, 4, lg2);
+ const upb_FieldType field_type = field->UPB_PRIVATE(descriptortype);
+ const size_t lg2 = UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
+ upb_Array* ret = UPB_PRIVATE(_upb_Array_New)(&d->arena, 4, lg2);
if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
return ret;
}
@@ -520,7 +519,7 @@
const upb_MiniTableSub* subs,
const upb_MiniTableField* field,
wireval* val, int op) {
- upb_Array** arrp = UPB_PTR_AT(msg, field->offset, void);
+ upb_Array** arrp = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
upb_Array* arr = *arrp;
void* mem;
@@ -536,8 +535,8 @@
case kUpb_DecodeOp_Scalar4Byte:
case kUpb_DecodeOp_Scalar8Byte:
/* Append scalar value. */
- mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->size << op, void);
- arr->size++;
+ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->UPB_PRIVATE(size) << op, void);
+ arr->UPB_PRIVATE(size)++;
memcpy(mem, val, 1 << op);
return ptr;
case kUpb_DecodeOp_String:
@@ -545,16 +544,18 @@
/* Fallthrough. */
case kUpb_DecodeOp_Bytes: {
/* Append bytes. */
- upb_StringView* str = (upb_StringView*)_upb_array_ptr(arr) + arr->size;
- arr->size++;
+ upb_StringView* str =
+ (upb_StringView*)_upb_array_ptr(arr) + arr->UPB_PRIVATE(size);
+ arr->UPB_PRIVATE(size)++;
return _upb_Decoder_ReadString(d, ptr, val->size, str);
}
case kUpb_DecodeOp_SubMessage: {
/* Append submessage / group. */
upb_TaggedMessagePtr* target = UPB_PTR_AT(
- _upb_array_ptr(arr), arr->size * sizeof(void*), upb_TaggedMessagePtr);
+ _upb_array_ptr(arr), arr->UPB_PRIVATE(size) * sizeof(void*),
+ upb_TaggedMessagePtr);
upb_Message* submsg = _upb_Decoder_NewSubMessage(d, subs, field, target);
- arr->size++;
+ arr->UPB_PRIVATE(size)++;
if (UPB_UNLIKELY(field->UPB_PRIVATE(descriptortype) ==
kUpb_FieldType_Group)) {
return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
@@ -605,12 +606,12 @@
[kUpb_FieldType_SInt64] = 8,
};
- const upb_MiniTableField* key_field = &entry->fields[0];
- const upb_MiniTableField* val_field = &entry->fields[1];
+ const upb_MiniTableField* key_field = &entry->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* val_field = &entry->UPB_PRIVATE(fields)[1];
char key_size = kSizeInMap[key_field->UPB_PRIVATE(descriptortype)];
char val_size = kSizeInMap[val_field->UPB_PRIVATE(descriptortype)];
- UPB_ASSERT(key_field->offset == offsetof(upb_MapEntryData, k));
- UPB_ASSERT(val_field->offset == offsetof(upb_MapEntryData, v));
+ UPB_ASSERT(key_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntryData, k));
+ UPB_ASSERT(val_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntryData, v));
upb_Map* ret = _upb_Map_New(&d->arena, key_size, val_size);
if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
return ret;
@@ -621,16 +622,16 @@
const upb_MiniTableSub* subs,
const upb_MiniTableField* field,
wireval* val) {
- upb_Map** map_p = UPB_PTR_AT(msg, field->offset, upb_Map*);
+ upb_Map** map_p = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), upb_Map*);
upb_Map* map = *map_p;
upb_MapEntry ent;
UPB_ASSERT(upb_MiniTableField_Type(field) == kUpb_FieldType_Message);
- const upb_MiniTable* entry = subs[field->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* entry = _upb_MiniTableSubs_MessageByField(subs, field);
UPB_ASSERT(entry);
- UPB_ASSERT(entry->field_count == 2);
- UPB_ASSERT(!upb_IsRepeatedOrMap(&entry->fields[0]));
- UPB_ASSERT(!upb_IsRepeatedOrMap(&entry->fields[1]));
+ UPB_ASSERT(entry->UPB_PRIVATE(field_count) == 2);
+ UPB_ASSERT(upb_MiniTableField_IsScalar(&entry->UPB_PRIVATE(fields)[0]));
+ UPB_ASSERT(upb_MiniTableField_IsScalar(&entry->UPB_PRIVATE(fields)[1]));
if (!map) {
map = _upb_Decoder_CreateMap(d, entry);
@@ -640,30 +641,34 @@
// Parse map entry.
memset(&ent, 0, sizeof(ent));
- if (entry->fields[1].UPB_PRIVATE(descriptortype) == kUpb_FieldType_Message ||
- entry->fields[1].UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
+ if (entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Message ||
+ entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
+ kUpb_FieldType_Group) {
// Create proactively to handle the case where it doesn't appear.
upb_TaggedMessagePtr msg;
- _upb_Decoder_NewSubMessage(d, entry->subs, &entry->fields[1], &msg);
+ _upb_Decoder_NewSubMessage(d, entry->UPB_PRIVATE(subs),
+ &entry->UPB_PRIVATE(fields)[1], &msg);
ent.data.v.val = upb_value_uintptr(msg);
}
- ptr =
- _upb_Decoder_DecodeSubMessage(d, ptr, &ent.data, subs, field, val->size);
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, (upb_Message*)&ent.data, subs,
+ field, val->size);
// check if ent had any unknown fields
size_t size;
- upb_Message_GetUnknown(&ent.data, &size);
+ upb_Message_GetUnknown((upb_Message*)&ent.data, &size);
if (size != 0) {
char* buf;
size_t size;
- uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Delimited;
+ uint32_t tag =
+ ((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Delimited;
upb_EncodeStatus status =
- upb_Encode(&ent.data, entry, 0, &d->arena, &buf, &size);
+ upb_Encode((upb_Message*)&ent.data, entry, 0, &d->arena, &buf, &size);
if (status != kUpb_EncodeStatus_Ok) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
_upb_Decoder_AddUnknownVarints(d, msg, tag, size);
- if (!_upb_Message_AddUnknown(msg, buf, size, &d->arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, size, &d->arena)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
} else {
@@ -680,29 +685,30 @@
upb_Decoder* d, const char* ptr, upb_Message* msg,
const upb_MiniTableSub* subs, const upb_MiniTableField* field, wireval* val,
int op) {
- void* mem = UPB_PTR_AT(msg, field->offset, void);
+ void* mem = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
int type = field->UPB_PRIVATE(descriptortype);
if (UPB_UNLIKELY(op == kUpb_DecodeOp_Enum) &&
!_upb_Decoder_CheckEnum(d, ptr, msg,
- subs[field->UPB_PRIVATE(submsg_index)].subenum,
+ _upb_MiniTableSubs_EnumByField(subs, field),
field, val)) {
return ptr;
}
- /* Set presence if necessary. */
- if (field->presence > 0) {
- _upb_sethas_field(msg, field);
- } else if (field->presence < 0) {
- /* Oneof case */
- uint32_t* oneof_case = _upb_oneofcase_field(msg, field);
- if (op == kUpb_DecodeOp_SubMessage && *oneof_case != field->number) {
+ // Set presence if necessary.
+ if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(field)) {
+ UPB_PRIVATE(_upb_Message_SetHasbit)(msg, field);
+ } else if (UPB_PRIVATE(_upb_MiniTableField_IsInOneof)(field)) {
+ // Oneof case
+ uint32_t* oneof_case = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, field);
+ if (op == kUpb_DecodeOp_SubMessage &&
+ *oneof_case != field->UPB_PRIVATE(number)) {
memset(mem, 0, sizeof(void*));
}
- *oneof_case = field->number;
+ *oneof_case = field->UPB_PRIVATE(number);
}
- /* Store into message. */
+ // Store into message.
switch (op) {
case kUpb_DecodeOp_SubMessage: {
upb_TaggedMessagePtr* submsgp = mem;
@@ -745,15 +751,15 @@
UPB_NOINLINE
const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
const upb_Message* msg,
- const upb_MiniTable* l) {
- UPB_ASSERT(l->required_count);
+ const upb_MiniTable* m) {
+ UPB_ASSERT(m->UPB_PRIVATE(required_count));
if (UPB_LIKELY((d->options & kUpb_DecodeOption_CheckRequired) == 0)) {
return ptr;
}
uint64_t msg_head;
memcpy(&msg_head, msg, 8);
- msg_head = _upb_BigEndian_Swap64(msg_head);
- if (upb_MiniTable_requiredmask(l) & ~msg_head) {
+ msg_head = upb_BigEndian64(msg_head);
+ if (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~msg_head) {
d->missing_required = true;
}
return ptr;
@@ -762,11 +768,11 @@
UPB_FORCEINLINE
static bool _upb_Decoder_TryFastDispatch(upb_Decoder* d, const char** ptr,
upb_Message* msg,
- const upb_MiniTable* layout) {
+ const upb_MiniTable* m) {
#if UPB_FASTTABLE
- if (layout && layout->table_mask != (unsigned char)-1) {
+ if (m && m->UPB_PRIVATE(table_mask) != (unsigned char)-1) {
uint16_t tag = _upb_FastDecoder_LoadTag(*ptr);
- intptr_t table = decode_totable(layout);
+ intptr_t table = decode_totable(m);
*ptr = _upb_FastDecoder_TagDispatch(d, *ptr, msg, table, 0, tag);
return true;
}
@@ -809,15 +815,17 @@
static void upb_Decoder_AddKnownMessageSetItem(
upb_Decoder* d, upb_Message* msg, const upb_MiniTableExtension* item_mt,
const char* data, uint32_t size) {
- upb_Message_Extension* ext =
+ upb_Extension* ext =
_upb_Message_GetOrCreateExtension(msg, item_mt, &d->arena);
if (UPB_UNLIKELY(!ext)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
upb_Message* submsg = _upb_Decoder_NewSubMessage(
- d, &ext->ext->sub, &ext->ext->field, (upb_TaggedMessagePtr*)&ext->data);
- upb_DecodeStatus status = upb_Decode(data, size, submsg, item_mt->sub.submsg,
- d->extreg, d->options, &d->arena);
+ d, &ext->ext->UPB_PRIVATE(sub), upb_MiniTableExtension_AsField(ext->ext),
+ (upb_TaggedMessagePtr*)&ext->data);
+ upb_DecodeStatus status = upb_Decode(
+ data, size, submsg, upb_MiniTableExtension_GetSubMessage(item_mt),
+ d->extreg, d->options, &d->arena);
if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
}
@@ -838,9 +846,11 @@
ptr = upb_Decoder_EncodeVarint32(kEndItemTag, ptr);
char* end = ptr;
- if (!_upb_Message_AddUnknown(msg, buf, split - buf, &d->arena) ||
- !_upb_Message_AddUnknown(msg, message_data, message_size, &d->arena) ||
- !_upb_Message_AddUnknown(msg, split, end - split, &d->arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, buf, split - buf, &d->arena) ||
+ !UPB_PRIVATE(_upb_Message_AddUnknown)(msg, message_data, message_size,
+ &d->arena) ||
+ !UPB_PRIVATE(_upb_Message_AddUnknown)(msg, split, end - split,
+ &d->arena)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
}
@@ -920,34 +930,34 @@
if (t == NULL) return &none;
size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
- if (idx < t->dense_below) {
+ if (idx < t->UPB_PRIVATE(dense_below)) {
/* Fastest case: index into dense fields. */
goto found;
}
- if (t->dense_below < t->field_count) {
+ if (t->UPB_PRIVATE(dense_below) < t->UPB_PRIVATE(field_count)) {
/* Linear search non-dense fields. Resume scanning from last_field_index
* since fields are usually in order. */
size_t last = *last_field_index;
- for (idx = last; idx < t->field_count; idx++) {
- if (t->fields[idx].number == field_number) {
+ for (idx = last; idx < t->UPB_PRIVATE(field_count); idx++) {
+ if (t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number) {
goto found;
}
}
- for (idx = t->dense_below; idx < last; idx++) {
- if (t->fields[idx].number == field_number) {
+ for (idx = t->UPB_PRIVATE(dense_below); idx < last; idx++) {
+ if (t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number) {
goto found;
}
}
}
if (d->extreg) {
- switch (t->ext) {
+ switch (t->UPB_PRIVATE(ext)) {
case kUpb_ExtMode_Extendable: {
const upb_MiniTableExtension* ext =
upb_ExtensionRegistry_Lookup(d->extreg, t, field_number);
- if (ext) return &ext->field;
+ if (ext) return upb_MiniTableExtension_AsField(ext);
break;
}
case kUpb_ExtMode_IsMessageSet:
@@ -963,9 +973,9 @@
return &none; /* Unknown field. */
found:
- UPB_ASSERT(t->fields[idx].number == field_number);
+ UPB_ASSERT(t->UPB_PRIVATE(fields)[idx].UPB_PRIVATE(number) == field_number);
*last_field_index = idx;
- return &t->fields[idx];
+ return &t->UPB_PRIVATE(fields)[idx];
}
int _upb_Decoder_GetVarintOp(const upb_MiniTableField* field) {
@@ -1000,10 +1010,11 @@
const upb_MiniTableField* field,
int* op) {
// If sub-message is not linked, treat as unknown.
- if (field->mode & kUpb_LabelFlags_IsExtension) return;
- const upb_MiniTableSub* sub = &mt->subs[field->UPB_PRIVATE(submsg_index)];
+ if (field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension) return;
+ const upb_MiniTable* mt_sub =
+ _upb_MiniTableSubs_MessageByField(mt->UPB_PRIVATE(subs), field);
if ((d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked) ||
- sub->submsg != &_kUpb_MiniTable_Empty) {
+ !UPB_PRIVATE(_upb_MiniTable_IsEmpty)(mt_sub)) {
return;
}
#ifndef NDEBUG
@@ -1014,7 +1025,7 @@
do {
UPB_ASSERT(upb_MiniTableField_CType(oneof) == kUpb_CType_Message);
const upb_MiniTableSub* oneof_sub =
- &mt->subs[oneof->UPB_PRIVATE(submsg_index)];
+ &mt->UPB_PRIVATE(subs)[oneof->UPB_PRIVATE(submsg_index)];
UPB_ASSERT(!oneof_sub);
} while (upb_MiniTable_NextOneofField(mt, &oneof));
}
@@ -1073,7 +1084,7 @@
};
int ndx = field->UPB_PRIVATE(descriptortype);
- if (upb_FieldMode_Get(field) == kUpb_FieldMode_Array) ndx += kRepeatedBase;
+ if (upb_MiniTableField_IsArray(field)) ndx += kRepeatedBase;
int op = kDelimitedOps[ndx];
if (op == kUpb_DecodeOp_SubMessage) {
@@ -1120,7 +1131,7 @@
*op = _upb_Decoder_GetDelimitedOp(d, mt, field);
return ptr;
case kUpb_WireType_StartGroup:
- val->uint32_val = field->number;
+ val->uint32_val = field->UPB_PRIVATE(number);
if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Group) {
*op = kUpb_DecodeOp_SubMessage;
_upb_Decoder_CheckUnlinked(d, mt, field, op);
@@ -1142,20 +1153,20 @@
upb_Decoder* d, const char* ptr, upb_Message* msg,
const upb_MiniTable* layout, const upb_MiniTableField* field, int op,
wireval* val) {
- const upb_MiniTableSub* subs = layout->subs;
- uint8_t mode = field->mode;
+ const upb_MiniTableSub* subs = layout->UPB_PRIVATE(subs);
+ uint8_t mode = field->UPB_PRIVATE(mode);
if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
const upb_MiniTableExtension* ext_layout =
(const upb_MiniTableExtension*)field;
- upb_Message_Extension* ext =
+ upb_Extension* ext =
_upb_Message_GetOrCreateExtension(msg, ext_layout, &d->arena);
if (UPB_UNLIKELY(!ext)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
d->unknown_msg = msg;
- msg = &ext->data;
- subs = &ext->ext->sub;
+ msg = (upb_Message*)&ext->data;
+ subs = &ext->ext->UPB_PRIVATE(sub);
}
switch (mode & kUpb_FieldMode_Mask) {
@@ -1224,7 +1235,8 @@
start = d->unknown;
d->unknown = NULL;
}
- if (!_upb_Message_AddUnknown(msg, start, ptr - start, &d->arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, start, ptr - start,
+ &d->arena)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
} else if (wire_type == kUpb_WireType_StartGroup) {
@@ -1296,7 +1308,7 @@
}
}
- return UPB_UNLIKELY(layout && layout->required_count)
+ return UPB_UNLIKELY(layout && layout->UPB_PRIVATE(required_count))
? _upb_Decoder_CheckRequired(d, ptr, msg, layout)
: ptr;
}
@@ -1339,14 +1351,12 @@
UPB_ASSERT(decoder->status != kUpb_DecodeStatus_Ok);
}
- _upb_MemBlock* blocks =
- upb_Atomic_Load(&decoder->arena.blocks, memory_order_relaxed);
- arena->head = decoder->arena.head;
- upb_Atomic_Store(&arena->blocks, blocks, memory_order_relaxed);
+ UPB_PRIVATE(_upb_Arena_SwapOut)(arena, &decoder->arena);
+
return decoder->status;
}
-upb_DecodeStatus upb_Decode(const char* buf, size_t size, void* msg,
+upb_DecodeStatus upb_Decode(const char* buf, size_t size, upb_Message* msg,
const upb_MiniTable* l,
const upb_ExtensionRegistry* extreg, int options,
upb_Arena* arena) {
@@ -1369,10 +1379,7 @@
// done. The temporary arena only needs to be able to handle allocation,
// not fuse or free, so it does not need many of the members to be initialized
// (particularly parent_or_count).
- _upb_MemBlock* blocks = upb_Atomic_Load(&arena->blocks, memory_order_relaxed);
- decoder.arena.head = arena->head;
- decoder.arena.block_alloc = arena->block_alloc;
- upb_Atomic_Init(&decoder.arena.blocks, blocks);
+ UPB_PRIVATE(_upb_Arena_SwapIn)(&decoder.arena, arena);
return upb_Decoder_Decode(&decoder, buf, msg, l, arena);
}
diff --git a/upb/wire/encode.c b/upb/wire/encode.c
index 774c6ff..12a6d32 100644
--- a/upb/wire/encode.c
+++ b/upb/wire/encode.c
@@ -15,6 +15,7 @@
#include <string.h>
#include "upb/base/descriptor_constants.h"
+#include "upb/base/internal/endian.h"
#include "upb/base/string_view.h"
#include "upb/hash/common.h"
#include "upb/hash/str_table.h"
@@ -26,15 +27,17 @@
#include "upb/message/internal/map.h"
#include "upb/message/internal/map_entry.h"
#include "upb/message/internal/map_sorter.h"
+#include "upb/message/internal/tagged_ptr.h"
+#include "upb/message/map.h"
#include "upb/message/message.h"
#include "upb/message/tagged_ptr.h"
+#include "upb/mini_table/extension.h"
#include "upb/mini_table/field.h"
#include "upb/mini_table/internal/field.h"
#include "upb/mini_table/internal/message.h"
#include "upb/mini_table/message.h"
#include "upb/mini_table/sub.h"
#include "upb/wire/internal/constants.h"
-#include "upb/wire/internal/swap.h"
#include "upb/wire/types.h"
// Must be last.
@@ -127,12 +130,12 @@
}
static void encode_fixed64(upb_encstate* e, uint64_t val) {
- val = _upb_BigEndian_Swap64(val);
+ val = upb_BigEndian64(val);
encode_bytes(e, &val, sizeof(uint64_t));
}
static void encode_fixed32(upb_encstate* e, uint32_t val) {
- val = _upb_BigEndian_Swap32(val);
+ val = upb_BigEndian32(val);
encode_bytes(e, &val, sizeof(uint32_t));
}
@@ -179,22 +182,22 @@
static void encode_fixedarray(upb_encstate* e, const upb_Array* arr,
size_t elem_size, uint32_t tag) {
- size_t bytes = arr->size * elem_size;
+ size_t bytes = arr->UPB_PRIVATE(size) * elem_size;
const char* data = _upb_array_constptr(arr);
const char* ptr = data + bytes - elem_size;
- if (tag || !_upb_IsLittleEndian()) {
+ if (tag || !upb_IsLittleEndian()) {
while (true) {
if (elem_size == 4) {
uint32_t val;
memcpy(&val, ptr, sizeof(val));
- val = _upb_BigEndian_Swap32(val);
+ val = upb_BigEndian32(val);
encode_bytes(e, &val, elem_size);
} else {
UPB_ASSERT(elem_size == 8);
uint64_t val;
memcpy(&val, ptr, sizeof(val));
- val = _upb_BigEndian_Swap64(val);
+ val = upb_BigEndian64(val);
encode_bytes(e, &val, elem_size);
}
@@ -214,9 +217,10 @@
upb_TaggedMessagePtr tagged,
const upb_MiniTable* m, size_t* size) {
if (upb_TaggedMessagePtr_IsEmpty(tagged)) {
- m = &_kUpb_MiniTable_Empty;
+ m = UPB_PRIVATE(_upb_MiniTable_Empty)();
}
- encode_message(e, _upb_TaggedMessagePtr_GetMessage(tagged), m, size);
+ encode_message(e, UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged), m,
+ size);
}
static void encode_scalar(upb_encstate* e, const void* _field_mem,
@@ -269,12 +273,13 @@
case kUpb_FieldType_Group: {
size_t size;
upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
if (submsg == 0) {
return;
}
if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
- encode_tag(e, f->number, kUpb_WireType_EndGroup);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_EndGroup);
encode_TaggedMessagePtr(e, submsg, subm, &size);
wire_type = kUpb_WireType_StartGroup;
e->depth++;
@@ -283,7 +288,8 @@
case kUpb_FieldType_Message: {
size_t size;
upb_TaggedMessagePtr submsg = *(upb_TaggedMessagePtr*)field_mem;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
if (submsg == 0) {
return;
}
@@ -299,34 +305,35 @@
}
#undef CASE
- encode_tag(e, f->number, wire_type);
+ encode_tag(e, f->UPB_PRIVATE(number), wire_type);
}
static void encode_array(upb_encstate* e, const upb_Message* msg,
const upb_MiniTableSub* subs,
const upb_MiniTableField* f) {
- const upb_Array* arr = *UPB_PTR_AT(msg, f->offset, upb_Array*);
- bool packed = f->mode & kUpb_LabelFlags_IsPacked;
+ const upb_Array* arr = *UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), upb_Array*);
+ bool packed = upb_MiniTableField_IsPacked(f);
size_t pre_len = e->limit - e->ptr;
- if (arr == NULL || arr->size == 0) {
+ if (arr == NULL || arr->UPB_PRIVATE(size) == 0) {
return;
}
-#define VARINT_CASE(ctype, encode) \
- { \
- const ctype* start = _upb_array_constptr(arr); \
- const ctype* ptr = start + arr->size; \
- uint32_t tag = packed ? 0 : (f->number << 3) | kUpb_WireType_Varint; \
- do { \
- ptr--; \
- encode_varint(e, encode); \
- if (tag) encode_varint(e, tag); \
- } while (ptr != start); \
- } \
+#define VARINT_CASE(ctype, encode) \
+ { \
+ const ctype* start = _upb_array_constptr(arr); \
+ const ctype* ptr = start + arr->UPB_PRIVATE(size); \
+ uint32_t tag = \
+ packed ? 0 : (f->UPB_PRIVATE(number) << 3) | kUpb_WireType_Varint; \
+ do { \
+ ptr--; \
+ encode_varint(e, encode); \
+ if (tag) encode_varint(e, tag); \
+ } while (ptr != start); \
+ } \
break;
-#define TAG(wire_type) (packed ? 0 : (f->number << 3 | wire_type))
+#define TAG(wire_type) (packed ? 0 : (f->UPB_PRIVATE(number) << 3 | wire_type))
switch (f->UPB_PRIVATE(descriptortype)) {
case kUpb_FieldType_Double:
@@ -360,41 +367,43 @@
case kUpb_FieldType_String:
case kUpb_FieldType_Bytes: {
const upb_StringView* start = _upb_array_constptr(arr);
- const upb_StringView* ptr = start + arr->size;
+ const upb_StringView* ptr = start + arr->UPB_PRIVATE(size);
do {
ptr--;
encode_bytes(e, ptr->data, ptr->size);
encode_varint(e, ptr->size);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
} while (ptr != start);
return;
}
case kUpb_FieldType_Group: {
const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
- const upb_TaggedMessagePtr* ptr = start + arr->size;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_TaggedMessagePtr* ptr = start + arr->UPB_PRIVATE(size);
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
do {
size_t size;
ptr--;
- encode_tag(e, f->number, kUpb_WireType_EndGroup);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_EndGroup);
encode_TaggedMessagePtr(e, *ptr, subm, &size);
- encode_tag(e, f->number, kUpb_WireType_StartGroup);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_StartGroup);
} while (ptr != start);
e->depth++;
return;
}
case kUpb_FieldType_Message: {
const upb_TaggedMessagePtr* start = _upb_array_constptr(arr);
- const upb_TaggedMessagePtr* ptr = start + arr->size;
- const upb_MiniTable* subm = subs[f->UPB_PRIVATE(submsg_index)].submsg;
+ const upb_TaggedMessagePtr* ptr = start + arr->UPB_PRIVATE(size);
+ const upb_MiniTable* subm =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
if (--e->depth == 0) encode_err(e, kUpb_EncodeStatus_MaxDepthExceeded);
do {
size_t size;
ptr--;
encode_TaggedMessagePtr(e, *ptr, subm, &size);
encode_varint(e, size);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
} while (ptr != start);
e->depth++;
return;
@@ -404,19 +413,19 @@
if (packed) {
encode_varint(e, e->limit - e->ptr - pre_len);
- encode_tag(e, f->number, kUpb_WireType_Delimited);
+ encode_tag(e, f->UPB_PRIVATE(number), kUpb_WireType_Delimited);
}
}
static void encode_mapentry(upb_encstate* e, uint32_t number,
const upb_MiniTable* layout,
const upb_MapEntry* ent) {
- const upb_MiniTableField* key_field = &layout->fields[0];
- const upb_MiniTableField* val_field = &layout->fields[1];
+ const upb_MiniTableField* key_field = &layout->UPB_PRIVATE(fields)[0];
+ const upb_MiniTableField* val_field = &layout->UPB_PRIVATE(fields)[1];
size_t pre_len = e->limit - e->ptr;
size_t size;
- encode_scalar(e, &ent->data.v, layout->subs, val_field);
- encode_scalar(e, &ent->data.k, layout->subs, key_field);
+ encode_scalar(e, &ent->data.v, layout->UPB_PRIVATE(subs), val_field);
+ encode_scalar(e, &ent->data.k, layout->UPB_PRIVATE(subs), key_field);
size = (e->limit - e->ptr) - pre_len;
encode_varint(e, size);
encode_tag(e, number, kUpb_WireType_Delimited);
@@ -425,20 +434,21 @@
static void encode_map(upb_encstate* e, const upb_Message* msg,
const upb_MiniTableSub* subs,
const upb_MiniTableField* f) {
- const upb_Map* map = *UPB_PTR_AT(msg, f->offset, const upb_Map*);
- const upb_MiniTable* layout = subs[f->UPB_PRIVATE(submsg_index)].submsg;
- UPB_ASSERT(layout->field_count == 2);
+ const upb_Map* map = *UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), const upb_Map*);
+ const upb_MiniTable* layout =
+ upb_MiniTableSub_Message(subs[f->UPB_PRIVATE(submsg_index)]);
+ UPB_ASSERT(layout->UPB_PRIVATE(field_count) == 2);
if (map == NULL) return;
if (e->options & kUpb_EncodeOption_Deterministic) {
_upb_sortedmap sorted;
- _upb_mapsorter_pushmap(&e->sorter,
- layout->fields[0].UPB_PRIVATE(descriptortype), map,
- &sorted);
+ _upb_mapsorter_pushmap(
+ &e->sorter, layout->UPB_PRIVATE(fields)[0].UPB_PRIVATE(descriptortype),
+ map, &sorted);
upb_MapEntry ent;
while (_upb_sortedmap_next(&e->sorter, map, &sorted, &ent)) {
- encode_mapentry(e, f->number, layout, &ent);
+ encode_mapentry(e, f->UPB_PRIVATE(number), layout, &ent);
}
_upb_mapsorter_popmap(&e->sorter, &sorted);
} else {
@@ -449,7 +459,7 @@
upb_MapEntry ent;
_upb_map_fromkey(key, &ent.data.k, map->key_size);
_upb_map_fromvalue(val, &ent.data.v, map->val_size);
- encode_mapentry(e, f->number, layout, &ent);
+ encode_mapentry(e, f->UPB_PRIVATE(number), layout, &ent);
}
}
}
@@ -458,9 +468,9 @@
const upb_MiniTableSub* subs,
const upb_MiniTableField* f) {
if (f->presence == 0) {
- /* Proto3 presence or map/array. */
- const void* mem = UPB_PTR_AT(msg, f->offset, void);
- switch (_upb_MiniTableField_GetRep(f)) {
+ // Proto3 presence or map/array.
+ const void* mem = UPB_PTR_AT(msg, f->UPB_PRIVATE(offset), void);
+ switch (UPB_PRIVATE(_upb_MiniTableField_GetRep)(f)) {
case kUpb_FieldRep_1Byte: {
char ch;
memcpy(&ch, mem, 1);
@@ -483,19 +493,20 @@
default:
UPB_UNREACHABLE();
}
- } else if (f->presence > 0) {
- /* Proto2 presence: hasbit. */
- return _upb_hasbit_field(msg, f);
+ } else if (UPB_PRIVATE(_upb_MiniTableField_HasHasbit)(f)) {
+ // Proto2 presence: hasbit.
+ return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, f);
} else {
- /* Field is in a oneof. */
- return _upb_getoneofcase_field(msg, f) == f->number;
+ // Field is in a oneof.
+ return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, f) ==
+ f->UPB_PRIVATE(number);
}
}
static void encode_field(upb_encstate* e, const upb_Message* msg,
const upb_MiniTableSub* subs,
const upb_MiniTableField* field) {
- switch (upb_FieldMode_Get(field)) {
+ switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(field)) {
case kUpb_FieldMode_Array:
encode_array(e, msg, subs, field);
break;
@@ -503,31 +514,33 @@
encode_map(e, msg, subs, field);
break;
case kUpb_FieldMode_Scalar:
- encode_scalar(e, UPB_PTR_AT(msg, field->offset, void), subs, field);
+ encode_scalar(e, UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void), subs,
+ field);
break;
default:
UPB_UNREACHABLE();
}
}
-static void encode_msgset_item(upb_encstate* e,
- const upb_Message_Extension* ext) {
+static void encode_msgset_item(upb_encstate* e, const upb_Extension* ext) {
size_t size;
encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_EndGroup);
- encode_message(e, ext->data.ptr, ext->ext->sub.submsg, &size);
+ encode_message(e, ext->data.ptr,
+ upb_MiniTableExtension_GetSubMessage(ext->ext), &size);
encode_varint(e, size);
encode_tag(e, kUpb_MsgSet_Message, kUpb_WireType_Delimited);
- encode_varint(e, ext->ext->field.number);
+ encode_varint(e, upb_MiniTableExtension_Number(ext->ext));
encode_tag(e, kUpb_MsgSet_TypeId, kUpb_WireType_Varint);
encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_StartGroup);
}
-static void encode_ext(upb_encstate* e, const upb_Message_Extension* ext,
+static void encode_ext(upb_encstate* e, const upb_Extension* ext,
bool is_message_set) {
if (UPB_UNLIKELY(is_message_set)) {
encode_msgset_item(e, ext);
} else {
- encode_field(e, &ext->data, &ext->ext->sub, &ext->ext->field);
+ encode_field(e, (upb_Message*)&ext->data, &ext->ext->UPB_PRIVATE(sub),
+ &ext->ext->UPB_PRIVATE(field));
}
}
@@ -535,11 +548,12 @@
const upb_MiniTable* m, size_t* size) {
size_t pre_len = e->limit - e->ptr;
- if ((e->options & kUpb_EncodeOption_CheckRequired) && m->required_count) {
+ if ((e->options & kUpb_EncodeOption_CheckRequired) &&
+ m->UPB_PRIVATE(required_count)) {
uint64_t msg_head;
memcpy(&msg_head, msg, 8);
- msg_head = _upb_BigEndian_Swap64(msg_head);
- if (upb_MiniTable_requiredmask(m) & ~msg_head) {
+ msg_head = upb_BigEndian64(msg_head);
+ if (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~msg_head) {
encode_err(e, kUpb_EncodeStatus_MissingRequired);
}
}
@@ -553,36 +567,38 @@
}
}
- if (m->ext != kUpb_ExtMode_NonExtendable) {
+ if (m->UPB_PRIVATE(ext) != kUpb_ExtMode_NonExtendable) {
/* Encode all extensions together. Unlike C++, we do not attempt to keep
* these in field number order relative to normal fields or even to each
* other. */
size_t ext_count;
- const upb_Message_Extension* ext = _upb_Message_Getexts(msg, &ext_count);
+ const upb_Extension* ext =
+ UPB_PRIVATE(_upb_Message_Getexts)(msg, &ext_count);
if (ext_count) {
if (e->options & kUpb_EncodeOption_Deterministic) {
_upb_sortedmap sorted;
_upb_mapsorter_pushexts(&e->sorter, ext, ext_count, &sorted);
while (_upb_sortedmap_nextext(&e->sorter, &sorted, &ext)) {
- encode_ext(e, ext, m->ext == kUpb_ExtMode_IsMessageSet);
+ encode_ext(e, ext, m->UPB_PRIVATE(ext) == kUpb_ExtMode_IsMessageSet);
}
_upb_mapsorter_popmap(&e->sorter, &sorted);
} else {
- const upb_Message_Extension* end = ext + ext_count;
+ const upb_Extension* end = ext + ext_count;
for (; ext != end; ext++) {
- encode_ext(e, ext, m->ext == kUpb_ExtMode_IsMessageSet);
+ encode_ext(e, ext, m->UPB_PRIVATE(ext) == kUpb_ExtMode_IsMessageSet);
}
}
}
}
- if (m->field_count) {
- const upb_MiniTableField* f = &m->fields[m->field_count];
- const upb_MiniTableField* first = &m->fields[0];
+ if (m->UPB_PRIVATE(field_count)) {
+ const upb_MiniTableField* f =
+ &m->UPB_PRIVATE(fields)[m->UPB_PRIVATE(field_count)];
+ const upb_MiniTableField* first = &m->UPB_PRIVATE(fields)[0];
while (f != first) {
f--;
- if (encode_shouldencode(e, msg, m->subs, f)) {
- encode_field(e, msg, m->subs, f);
+ if (encode_shouldencode(e, msg, m->UPB_PRIVATE(subs), f)) {
+ encode_field(e, msg, m->UPB_PRIVATE(subs), f);
}
}
}
@@ -591,7 +607,7 @@
}
static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
- const void* const msg,
+ const upb_Message* const msg,
const upb_MiniTable* const l,
char** const buf,
size_t* const size) {
@@ -619,7 +635,7 @@
return encoder->status;
}
-upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
+upb_EncodeStatus upb_Encode(const upb_Message* msg, const upb_MiniTable* l,
int options, upb_Arena* arena, char** buf,
size_t* size) {
upb_encstate e;
diff --git a/upb/wire/encode.h b/upb/wire/encode.h
index 6fb5553..fed261d 100644
--- a/upb/wire/encode.h
+++ b/upb/wire/encode.h
@@ -14,6 +14,7 @@
#include <stdint.h>
#include "upb/mem/arena.h"
+#include "upb/message/message.h"
#include "upb/mini_table/message.h"
// Must be last.
@@ -63,9 +64,9 @@
return upb_EncodeOptions_MaxDepth(max_depth) | (encode_options & 0xffff);
}
-UPB_API upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
- int options, upb_Arena* arena, char** buf,
- size_t* size);
+UPB_API upb_EncodeStatus upb_Encode(const upb_Message* msg,
+ const upb_MiniTable* l, int options,
+ upb_Arena* arena, char** buf, size_t* size);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/upb/wire/eps_copy_input_stream_test.cc b/upb/wire/eps_copy_input_stream_test.cc
index 7a3caa2..c28d145 100644
--- a/upb/wire/eps_copy_input_stream_test.cc
+++ b/upb/wire/eps_copy_input_stream_test.cc
@@ -34,7 +34,7 @@
//
// class FakeStream {
// public:
-// FakeStream(const std::string& data) : data_(data), offset_(0) {
+// explicit FakeStream(const std::string& data) : data_(data), offset_(0) {
// limits_.push_back(data.size());
// }
//
diff --git a/upb/wire/decode_fast.c b/upb/wire/internal/decode_fast.c
similarity index 94%
rename from upb/wire/decode_fast.c
rename to upb/wire/internal/decode_fast.c
index 8e2860a..9837003 100644
--- a/upb/wire/decode_fast.c
+++ b/upb/wire/internal/decode_fast.c
@@ -15,12 +15,12 @@
// field type (eg. oneof boolean field with a 1 byte tag) and then dispatch
// to the specialized function as quickly as possible.
-#include "upb/wire/decode_fast.h"
+#include "upb/wire/internal/decode_fast.h"
#include "upb/message/array.h"
#include "upb/message/internal/array.h"
-#include "upb/message/internal/types.h"
-#include "upb/wire/internal/decode.h"
+#include "upb/mini_table/sub.h"
+#include "upb/wire/internal/decoder.h"
// Must be last.
#include "upb/port/def.inc"
@@ -63,9 +63,9 @@
switch (upb_EpsCopyInputStream_IsDoneStatus(&d->input, ptr, &overrun)) {
case kUpb_IsDoneStatus_Done:
*(uint32_t*)msg |= hasbits; // Sync hasbits.
- const upb_MiniTable* l = decode_totablep(table);
- return UPB_UNLIKELY(l->required_count)
- ? _upb_Decoder_CheckRequired(d, ptr, msg, l)
+ const upb_MiniTable* m = decode_totablep(table);
+ return UPB_UNLIKELY(m->UPB_PRIVATE(required_count))
+ ? _upb_Decoder_CheckRequired(d, ptr, msg, m)
: ptr;
case kUpb_IsDoneStatus_NotDone:
break;
@@ -165,17 +165,17 @@
static void* fastdecode_resizearr(upb_Decoder* d, void* dst,
fastdecode_arr* farr, int valbytes) {
if (UPB_UNLIKELY(dst == farr->end)) {
- size_t old_size = farr->arr->capacity;
- size_t old_bytes = old_size * valbytes;
- size_t new_size = old_size * 2;
- size_t new_bytes = new_size * valbytes;
+ size_t old_capacity = farr->arr->UPB_PRIVATE(capacity);
+ size_t old_bytes = old_capacity * valbytes;
+ size_t new_capacity = old_capacity * 2;
+ size_t new_bytes = new_capacity * valbytes;
char* old_ptr = _upb_array_ptr(farr->arr);
char* new_ptr = upb_Arena_Realloc(&d->arena, old_ptr, old_bytes, new_bytes);
uint8_t elem_size_lg2 = __builtin_ctz(valbytes);
- farr->arr->capacity = new_size;
- farr->arr->data = _upb_array_tagptr(new_ptr, elem_size_lg2);
- dst = (void*)(new_ptr + (old_size * valbytes));
- farr->end = (void*)(new_ptr + (new_size * valbytes));
+ UPB_PRIVATE(_upb_Array_SetTaggedPtr)(farr->arr, new_ptr, elem_size_lg2);
+ farr->arr->UPB_PRIVATE(capacity) = new_capacity;
+ dst = (void*)(new_ptr + (old_capacity * valbytes));
+ farr->end = (void*)(new_ptr + (new_capacity * valbytes));
}
return dst;
}
@@ -192,7 +192,7 @@
UPB_FORCEINLINE
static void fastdecode_commitarr(void* dst, fastdecode_arr* farr,
int valbytes) {
- farr->arr->size =
+ farr->arr->UPB_PRIVATE(size) =
(size_t)((char*)dst - (char*)_upb_array_ptr(farr->arr)) / valbytes;
}
@@ -255,15 +255,15 @@
*(uint32_t*)msg |= *hasbits;
*hasbits = 0;
if (UPB_LIKELY(!*arr_p)) {
- farr->arr = _upb_Array_New(&d->arena, 8, elem_size_lg2);
+ farr->arr = UPB_PRIVATE(_upb_Array_New)(&d->arena, 8, elem_size_lg2);
*arr_p = farr->arr;
} else {
farr->arr = *arr_p;
}
begin = _upb_array_ptr(farr->arr);
- farr->end = begin + (farr->arr->capacity * valbytes);
+ farr->end = begin + (farr->arr->UPB_PRIVATE(capacity) * valbytes);
*data = _upb_FastDecoder_LoadTag(ptr);
- return begin + (farr->arr->size * valbytes);
+ return begin + (farr->arr->UPB_PRIVATE(size) * valbytes);
}
default:
UPB_UNREACHABLE();
@@ -540,7 +540,8 @@
int elems = size / valbytes; \
\
if (UPB_LIKELY(!arr)) { \
- *arr_p = arr = _upb_Array_New(&d->arena, elems, elem_size_lg2); \
+ *arr_p = arr = \
+ UPB_PRIVATE(_upb_Array_New)(&d->arena, elems, elem_size_lg2); \
if (!arr) { \
_upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed); \
} \
@@ -550,7 +551,7 @@
\
char* dst = _upb_array_ptr(arr); \
memcpy(dst, ptr, size); \
- arr->size = elems; \
+ arr->UPB_PRIVATE(size) = elems; \
\
ptr += size; \
UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
@@ -658,12 +659,14 @@
UPB_FORCEINLINE
static void fastdecode_docopy(upb_Decoder* d, const char* ptr, uint32_t size,
- int copy, char* data, upb_StringView* dst) {
- d->arena.head.ptr += copy;
- dst->data = data;
+ int copy, char* data, size_t data_offset,
+ upb_StringView* dst) {
+ d->arena.UPB_PRIVATE(ptr) += copy;
+ dst->data = data + data_offset;
UPB_UNPOISON_MEMORY_REGION(data, copy);
memcpy(data, ptr, copy);
- UPB_POISON_MEMORY_REGION(data + size, copy - size);
+ UPB_POISON_MEMORY_REGION(data + data_offset + size,
+ copy - data_offset - size);
}
#define FASTDECODE_COPYSTRING(d, ptr, msg, table, hasbits, data, tagbytes, \
@@ -690,25 +693,24 @@
ptr += tagbytes + 1; \
dst->size = size; \
\
- buf = d->arena.head.ptr; \
- arena_has = _upb_ArenaHas(&d->arena); \
+ buf = d->arena.UPB_PRIVATE(ptr); \
+ arena_has = UPB_PRIVATE(_upb_ArenaHas)(&d->arena); \
common_has = UPB_MIN(arena_has, \
upb_EpsCopyInputStream_BytesAvailable(&d->input, ptr)); \
\
if (UPB_LIKELY(size <= 15 - tagbytes)) { \
if (arena_has < 16) goto longstr; \
- d->arena.head.ptr += 16; \
- memcpy(buf, ptr - tagbytes - 1, 16); \
- dst->data = buf + tagbytes + 1; \
+ fastdecode_docopy(d, ptr - tagbytes - 1, size, 16, buf, tagbytes + 1, \
+ dst); \
} else if (UPB_LIKELY(size <= 32)) { \
if (UPB_UNLIKELY(common_has < 32)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 32, buf, dst); \
+ fastdecode_docopy(d, ptr, size, 32, buf, 0, dst); \
} else if (UPB_LIKELY(size <= 64)) { \
if (UPB_UNLIKELY(common_has < 64)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 64, buf, dst); \
+ fastdecode_docopy(d, ptr, size, 64, buf, 0, dst); \
} else if (UPB_LIKELY(size < 128)) { \
if (UPB_UNLIKELY(common_has < 128)) goto longstr; \
- fastdecode_docopy(d, ptr, size, 128, buf, dst); \
+ fastdecode_docopy(d, ptr, size, 128, buf, 0, dst); \
} else { \
goto longstr; \
} \
@@ -864,15 +866,15 @@
/* message fields *************************************************************/
UPB_INLINE
-upb_Message* decode_newmsg_ceil(upb_Decoder* d, const upb_MiniTable* l,
+upb_Message* decode_newmsg_ceil(upb_Decoder* d, const upb_MiniTable* m,
int msg_ceil_bytes) {
- size_t size = l->size + sizeof(upb_Message_Internal);
+ size_t size = m->UPB_PRIVATE(size) + sizeof(upb_Message_Internal);
char* msg_data;
if (UPB_LIKELY(msg_ceil_bytes > 0 &&
- _upb_ArenaHas(&d->arena) >= msg_ceil_bytes)) {
+ UPB_PRIVATE(_upb_ArenaHas)(&d->arena) >= msg_ceil_bytes)) {
UPB_ASSERT(size <= (size_t)msg_ceil_bytes);
- msg_data = d->arena.head.ptr;
- d->arena.head.ptr += size;
+ msg_data = d->arena.UPB_PRIVATE(ptr);
+ d->arena.UPB_PRIVATE(ptr) += size;
UPB_UNPOISON_MEMORY_REGION(msg_data, msg_ceil_bytes);
memset(msg_data, 0, msg_ceil_bytes);
UPB_POISON_MEMORY_REGION(msg_data + size, msg_ceil_bytes - size);
@@ -912,11 +914,13 @@
upb_Message** dst; \
uint32_t submsg_idx = (data >> 16) & 0xff; \
const upb_MiniTable* tablep = decode_totablep(table); \
- const upb_MiniTable* subtablep = tablep->subs[submsg_idx].submsg; \
+ const upb_MiniTable* subtablep = upb_MiniTableSub_Message( \
+ *UPB_PRIVATE(_upb_MiniTable_GetSubByIndex)(tablep, submsg_idx)); \
fastdecode_submsgdata submsg = {decode_totable(subtablep)}; \
fastdecode_arr farr; \
\
- if (subtablep->table_mask == (uint8_t)-1) { \
+ if (subtablep->UPB_PRIVATE(table_mask) == (uint8_t)-1) { \
+ d->depth++; \
RETURN_GENERIC("submessage doesn't have fast tables."); \
} \
\
diff --git a/upb/wire/decode_fast.h b/upb/wire/internal/decode_fast.h
similarity index 96%
rename from upb/wire/decode_fast.h
rename to upb/wire/internal/decode_fast.h
index 395342a..53270f8 100644
--- a/upb/wire/decode_fast.h
+++ b/upb/wire/internal/decode_fast.h
@@ -39,8 +39,8 @@
// - '1' for one-byte tags (field numbers 1-15)
// - '2' for two-byte tags (field numbers 16-2048)
-#ifndef UPB_WIRE_DECODE_FAST_H_
-#define UPB_WIRE_DECODE_FAST_H_
+#ifndef UPB_WIRE_INTERNAL_DECODE_FAST_H_
+#define UPB_WIRE_INTERNAL_DECODE_FAST_H_
#include "upb/message/message.h"
@@ -110,6 +110,7 @@
TAGBYTES(r)
#undef F
+#undef UTF8
#undef TAGBYTES
/* sub-message fields *********************************************************/
@@ -132,9 +133,9 @@
TAGBYTES(o)
TAGBYTES(r)
-#undef TAGBYTES
-#undef SIZES
#undef F
+#undef SIZES
+#undef TAGBYTES
#undef UPB_PARSE_PARAMS
@@ -144,4 +145,4 @@
#include "upb/port/undef.inc"
-#endif /* UPB_WIRE_DECODE_FAST_H_ */
+#endif /* UPB_WIRE_INTERNAL_DECODE_FAST_H_ */
diff --git a/upb/wire/internal/decode.h b/upb/wire/internal/decoder.h
similarity index 77%
rename from upb/wire/internal/decode.h
rename to upb/wire/internal/decoder.h
index a058ecb..5ca1e1b 100644
--- a/upb/wire/internal/decode.h
+++ b/upb/wire/internal/decoder.h
@@ -10,8 +10,8 @@
* decode.c and decode_fast.c.
*/
-#ifndef UPB_WIRE_INTERNAL_DECODE_H_
-#define UPB_WIRE_INTERNAL_DECODE_H_
+#ifndef UPB_WIRE_INTERNAL_DECODER_H_
+#define UPB_WIRE_INTERNAL_DECODER_H_
#include "upb/mem/internal/arena.h"
#include "upb/message/internal/message.h"
@@ -33,7 +33,10 @@
uint32_t end_group; // field number of END_GROUP tag, else DECODE_NOGROUP.
uint16_t options;
bool missing_required;
- upb_Arena arena;
+ union {
+ upb_Arena arena;
+ void* foo[UPB_ARENA_SIZE_HACK];
+ };
upb_DecodeStatus status;
jmp_buf err;
@@ -56,36 +59,17 @@
UPB_INLINE
bool _upb_Decoder_VerifyUtf8Inline(const char* ptr, int len) {
- const char* end = ptr + len;
-
- // Check 8 bytes at a time for any non-ASCII char.
- while (end - ptr >= 8) {
- uint64_t data;
- memcpy(&data, ptr, 8);
- if (data & 0x8080808080808080) goto non_ascii;
- ptr += 8;
- }
-
- // Check one byte at a time for non-ASCII.
- while (ptr < end) {
- if (*ptr & 0x80) goto non_ascii;
- ptr++;
- }
-
- return true;
-
-non_ascii:
- return utf8_range2((const unsigned char*)ptr, end - ptr) == 0;
+ return utf8_range_IsValid(ptr, len);
}
const char* _upb_Decoder_CheckRequired(upb_Decoder* d, const char* ptr,
const upb_Message* msg,
- const upb_MiniTable* l);
+ const upb_MiniTable* m);
/* x86-64 pointers always have the high 16 bits matching. So we can shift
* left 8 and right 8 without loss of information. */
UPB_INLINE intptr_t decode_totable(const upb_MiniTable* tablep) {
- return ((intptr_t)tablep << 8) | tablep->table_mask;
+ return ((intptr_t)tablep << 8) | tablep->UPB_PRIVATE(table_mask);
}
UPB_INLINE const upb_MiniTable* decode_totablep(intptr_t table) {
@@ -106,8 +90,8 @@
if (!old_end) _upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
if (d->unknown) {
- if (!_upb_Message_AddUnknown(d->unknown_msg, d->unknown,
- old_end - d->unknown, &d->arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(
+ d->unknown_msg, d->unknown, old_end - d->unknown, &d->arena)) {
_upb_FastDecoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
d->unknown = new_start;
@@ -126,9 +110,9 @@
size_t idx = tag & mask;
UPB_ASSUME((idx & 7) == 0);
idx >>= 3;
- data = table_p->fasttable[idx].field_data ^ tag;
- UPB_MUSTTAIL return table_p->fasttable[idx].field_parser(d, ptr, msg, table,
- hasbits, data);
+ data = table_p->UPB_PRIVATE(fasttable)[idx].field_data ^ tag;
+ UPB_MUSTTAIL return table_p->UPB_PRIVATE(fasttable)[idx].field_parser(
+ d, ptr, msg, table, hasbits, data);
}
#endif
@@ -140,4 +124,4 @@
#include "upb/port/undef.inc"
-#endif /* UPB_WIRE_INTERNAL_DECODE_H_ */
+#endif /* UPB_WIRE_INTERNAL_DECODER_H_ */
diff --git a/upb/wire/internal/reader.h b/upb/wire/internal/reader.h
new file mode 100644
index 0000000..2eff56b
--- /dev/null
+++ b/upb/wire/internal/reader.h
@@ -0,0 +1,61 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google LLC. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+#ifndef UPB_WIRE_INTERNAL_READER_H_
+#define UPB_WIRE_INTERNAL_READER_H_
+
+// Must be last.
+#include "upb/port/def.inc"
+
+#define kUpb_WireReader_WireTypeBits 3
+#define kUpb_WireReader_WireTypeMask 7
+
+typedef struct {
+ const char* ptr;
+ uint64_t val;
+} UPB_PRIVATE(_upb_WireReader_LongVarint);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_PRIVATE(_upb_WireReader_LongVarint)
+UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val);
+
+static UPB_FORCEINLINE const char* UPB_PRIVATE(_upb_WireReader_ReadVarint)(
+ const char* ptr, uint64_t* val, int maxlen, uint64_t maxval) {
+ uint64_t byte = (uint8_t)*ptr;
+ if (UPB_LIKELY((byte & 0x80) == 0)) {
+ *val = (uint32_t)byte;
+ return ptr + 1;
+ }
+ const char* start = ptr;
+ UPB_PRIVATE(_upb_WireReader_LongVarint)
+ res = UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(ptr, byte);
+ if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) ||
+ res.val > maxval) {
+ return NULL; // Malformed.
+ }
+ *val = res.val;
+ return res.ptr;
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(uint32_t tag) {
+ return tag >> kUpb_WireReader_WireTypeBits;
+}
+
+UPB_INLINE uint8_t UPB_PRIVATE(_upb_WireReader_GetWireType)(uint32_t tag) {
+ return tag & kUpb_WireReader_WireTypeMask;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
+#endif // UPB_WIRE_INTERNAL_READER_H_
diff --git a/upb/wire/internal/swap.h b/upb/wire/internal/swap.h
deleted file mode 100644
index a203e45..0000000
--- a/upb/wire/internal/swap.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2023 Google LLC. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-#ifndef UPB_WIRE_INTERNAL_SWAP_H_
-#define UPB_WIRE_INTERNAL_SWAP_H_
-
-#include <stdint.h>
-
-// Must be last.
-#include "upb/port/def.inc"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UPB_INLINE bool _upb_IsLittleEndian(void) {
- int x = 1;
- return *(char*)&x == 1;
-}
-
-UPB_INLINE uint32_t _upb_BigEndian_Swap32(uint32_t val) {
- if (_upb_IsLittleEndian()) return val;
-
- return ((val & 0xff) << 24) | ((val & 0xff00) << 8) |
- ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);
-}
-
-UPB_INLINE uint64_t _upb_BigEndian_Swap64(uint64_t val) {
- if (_upb_IsLittleEndian()) return val;
-
- return ((uint64_t)_upb_BigEndian_Swap32((uint32_t)val) << 32) |
- _upb_BigEndian_Swap32((uint32_t)(val >> 32));
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#include "upb/port/undef.inc"
-
-#endif /* UPB_WIRE_INTERNAL_SWAP_H_ */
diff --git a/upb/wire/reader.c b/upb/wire/reader.c
index de6cde4..2af812b 100644
--- a/upb/wire/reader.c
+++ b/upb/wire/reader.c
@@ -7,15 +7,18 @@
#include "upb/wire/reader.h"
+#include <stddef.h>
+#include <stdint.h>
+
#include "upb/wire/eps_copy_input_stream.h"
#include "upb/wire/types.h"
// Must be last.
#include "upb/port/def.inc"
-UPB_NOINLINE _upb_WireReader_ReadLongVarintRet
-_upb_WireReader_ReadLongVarint(const char* ptr, uint64_t val) {
- _upb_WireReader_ReadLongVarintRet ret = {NULL, 0};
+UPB_NOINLINE UPB_PRIVATE(_upb_WireReader_LongVarint)
+ UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val) {
+ UPB_PRIVATE(_upb_WireReader_LongVarint) ret = {NULL, 0};
uint64_t byte;
int i;
for (i = 1; i < 10; i++) {
@@ -30,9 +33,9 @@
return ret;
}
-const char* _upb_WireReader_SkipGroup(const char* ptr, uint32_t tag,
- int depth_limit,
- upb_EpsCopyInputStream* stream) {
+const char* UPB_PRIVATE(_upb_WireReader_SkipGroup)(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream) {
if (--depth_limit == 0) return NULL;
uint32_t end_group_tag = (tag & ~7ULL) | kUpb_WireType_EndGroup;
while (!upb_EpsCopyInputStream_IsDone(stream, &ptr)) {
diff --git a/upb/wire/reader.h b/upb/wire/reader.h
index 2181aa6..9914837 100644
--- a/upb/wire/reader.h
+++ b/upb/wire/reader.h
@@ -8,53 +8,23 @@
#ifndef UPB_WIRE_READER_H_
#define UPB_WIRE_READER_H_
+#include "upb/base/internal/endian.h"
#include "upb/wire/eps_copy_input_stream.h"
-#include "upb/wire/internal/swap.h"
+#include "upb/wire/internal/reader.h"
#include "upb/wire/types.h" // IWYU pragma: export
// Must be last.
#include "upb/port/def.inc"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
// The upb_WireReader interface is suitable for general-purpose parsing of
-// protobuf binary wire format. It is designed to be used along with
+// protobuf binary wire format. It is designed to be used along with
// upb_EpsCopyInputStream for buffering, and all parsing routines in this file
// assume that at least kUpb_EpsCopyInputStream_SlopBytes worth of data is
// available to read without any bounds checks.
-#define kUpb_WireReader_WireTypeMask 7
-#define kUpb_WireReader_WireTypeBits 3
-
-typedef struct {
- const char* ptr;
- uint64_t val;
-} _upb_WireReader_ReadLongVarintRet;
-
-_upb_WireReader_ReadLongVarintRet _upb_WireReader_ReadLongVarint(
- const char* ptr, uint64_t val);
-
-static UPB_FORCEINLINE const char* _upb_WireReader_ReadVarint(const char* ptr,
- uint64_t* val,
- int maxlen,
- uint64_t maxval) {
- uint64_t byte = (uint8_t)*ptr;
- if (UPB_LIKELY((byte & 0x80) == 0)) {
- *val = (uint32_t)byte;
- return ptr + 1;
- }
- const char* start = ptr;
- _upb_WireReader_ReadLongVarintRet res =
- _upb_WireReader_ReadLongVarint(ptr, byte);
- if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) ||
- res.val > maxval) {
- return NULL; // Malformed.
- }
- *val = res.val;
- return res.ptr;
-}
+#ifdef __cplusplus
+extern "C" {
+#endif
// Parses a tag into `tag`, and returns a pointer past the end of the tag, or
// NULL if there was an error in the tag data.
@@ -65,7 +35,7 @@
static UPB_FORCEINLINE const char* upb_WireReader_ReadTag(const char* ptr,
uint32_t* tag) {
uint64_t val;
- ptr = _upb_WireReader_ReadVarint(ptr, &val, 5, UINT32_MAX);
+ ptr = UPB_PRIVATE(_upb_WireReader_ReadVarint)(ptr, &val, 5, UINT32_MAX);
if (!ptr) return NULL;
*tag = val;
return ptr;
@@ -73,17 +43,17 @@
// Given a tag, returns the field number.
UPB_INLINE uint32_t upb_WireReader_GetFieldNumber(uint32_t tag) {
- return tag >> kUpb_WireReader_WireTypeBits;
+ return UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(tag);
}
// Given a tag, returns the wire type.
UPB_INLINE uint8_t upb_WireReader_GetWireType(uint32_t tag) {
- return tag & kUpb_WireReader_WireTypeMask;
+ return UPB_PRIVATE(_upb_WireReader_GetWireType)(tag);
}
UPB_INLINE const char* upb_WireReader_ReadVarint(const char* ptr,
uint64_t* val) {
- return _upb_WireReader_ReadVarint(ptr, val, 10, UINT64_MAX);
+ return UPB_PRIVATE(_upb_WireReader_ReadVarint)(ptr, val, 10, UINT64_MAX);
}
// Skips data for a varint, returning a pointer past the end of the varint, or
@@ -119,7 +89,7 @@
UPB_INLINE const char* upb_WireReader_ReadFixed32(const char* ptr, void* val) {
uint32_t uval;
memcpy(&uval, ptr, 4);
- uval = _upb_BigEndian_Swap32(uval);
+ uval = upb_BigEndian32(uval);
memcpy(val, &uval, 4);
return ptr + 4;
}
@@ -132,14 +102,14 @@
UPB_INLINE const char* upb_WireReader_ReadFixed64(const char* ptr, void* val) {
uint64_t uval;
memcpy(&uval, ptr, 8);
- uval = _upb_BigEndian_Swap64(uval);
+ uval = upb_BigEndian64(uval);
memcpy(val, &uval, 8);
return ptr + 8;
}
-const char* _upb_WireReader_SkipGroup(const char* ptr, uint32_t tag,
- int depth_limit,
- upb_EpsCopyInputStream* stream);
+const char* UPB_PRIVATE(_upb_WireReader_SkipGroup)(
+ const char* ptr, uint32_t tag, int depth_limit,
+ upb_EpsCopyInputStream* stream);
// Skips data for a group, returning a pointer past the end of the group, or
// NULL if there was an error parsing the group. The `tag` argument should be
@@ -152,7 +122,7 @@
// control over this?
UPB_INLINE const char* upb_WireReader_SkipGroup(
const char* ptr, uint32_t tag, upb_EpsCopyInputStream* stream) {
- return _upb_WireReader_SkipGroup(ptr, tag, 100, stream);
+ return UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, tag, 100, stream);
}
UPB_INLINE const char* _upb_WireReader_SkipValue(
@@ -173,7 +143,8 @@
return ptr;
}
case kUpb_WireType_StartGroup:
- return _upb_WireReader_SkipGroup(ptr, tag, depth_limit, stream);
+ return UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, tag, depth_limit,
+ stream);
case kUpb_WireType_EndGroup:
return NULL; // Should be handled before now.
default:
diff --git a/upb_generator/BUILD b/upb_generator/BUILD
index 723d490..8fc3028 100644
--- a/upb_generator/BUILD
+++ b/upb_generator/BUILD
@@ -102,8 +102,8 @@
copts = UPB_DEFAULT_CPPOPTS,
visibility = ["//protos_generator:__pkg__"],
deps = [
+ ":mangle",
"//upb:mini_table",
- "//upb:mini_table_internal",
"//upb:port",
"@com_google_absl//absl/strings",
],
@@ -128,7 +128,6 @@
"//upb:base",
"//upb:mini_descriptor",
"//upb:mini_table",
- "//upb:mini_table_internal",
"//upb:port",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/strings",
@@ -190,6 +189,20 @@
],
)
+cc_library(
+ name = "mangle",
+ srcs = ["mangle.cc"],
+ hdrs = ["mangle.h"],
+ copts = UPB_DEFAULT_CPPOPTS,
+ visibility = [
+ "//rust:__subpackages__",
+ "//upb:friends",
+ ],
+ deps = [
+ "@com_google_absl//absl/strings",
+ ],
+)
+
cc_binary(
name = "libupb_generator.so",
srcs = ["upb_generator_so.c"],
@@ -230,8 +243,8 @@
"//upb:mini_table",
"//upb:port",
"//upb:reflection",
- "//upb:reflection_internal",
"//upb:wire",
+ "//upb/reflection:internal",
],
)
@@ -252,9 +265,8 @@
deps = [
"//upb:base",
"//upb:mem",
- "//upb:mini_table_internal",
"//upb:port",
- "//upb:wire_types",
+ "//upb:wire_reader",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/log:absl_check",
@@ -291,9 +303,9 @@
deps = [
"//upb:base",
"//upb:mem",
- "//upb:mini_table_internal",
+ "//upb:mini_table",
"//upb:port",
- "//upb:wire_types",
+ "//upb:wire_reader",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/log:absl_check",
diff --git a/upb_generator/code_generator_request.c b/upb_generator/code_generator_request.c
index f5c87c0..a3523eb 100644
--- a/upb_generator/code_generator_request.c
+++ b/upb_generator/code_generator_request.c
@@ -11,6 +11,7 @@
#include "google/protobuf/compiler/plugin.upb.h"
#include "upb/mini_descriptor/decode.h"
+#include "upb/mini_table/field.h"
#include "upb/reflection/def.h"
// Must be last.
@@ -171,8 +172,8 @@
uint32_t enum_count = counts & 0xffff;
for (uint32_t i = 0; i < msg_count; i++) {
- const upb_FieldDef* f =
- upb_MessageDef_FindFieldByNumber(m, fields[i]->number);
+ const upb_FieldDef* f = upb_MessageDef_FindFieldByNumber(
+ m, upb_MiniTableField_Number(fields[i]));
if (!f) upbc_Error(s, __func__, "Missing f");
const upb_MessageDef* sub = upb_FieldDef_MessageSubDef(f);
if (!sub) upbc_Error(s, __func__, "Missing sub");
@@ -181,8 +182,8 @@
}
for (uint32_t i = 0; i < enum_count; i++) {
- const upb_FieldDef* f =
- upb_MessageDef_FindFieldByNumber(m, fields[msg_count + i]->number);
+ const upb_FieldDef* f = upb_MessageDef_FindFieldByNumber(
+ m, upb_MiniTableField_Number(fields[msg_count + i]));
if (!f) upbc_Error(s, __func__, "Missing f (2)");
const upb_EnumDef* sub = upb_FieldDef_EnumSubDef(f);
if (!sub) upbc_Error(s, __func__, "Missing sub (2)");
diff --git a/upb_generator/common.cc b/upb_generator/common.cc
index b1bfbc3..3bda1a3 100644
--- a/upb_generator/common.cc
+++ b/upb_generator/common.cc
@@ -19,17 +19,12 @@
#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
#include "upb/mini_table/field.h"
-#include "upb/mini_table/internal/field.h"
#include "upb/reflection/def.hpp"
+#include "upb_generator/mangle.h"
// Must be last
#include "upb/port/def.inc"
-// Generate a mangled C name for a proto object.
-static std::string MangleName(absl::string_view name) {
- return absl::StrReplaceAll(name, {{"_", "_0"}, {".", "__"}});
-}
-
namespace upb {
namespace generator {
@@ -60,10 +55,6 @@
name);
}
-std::string MessageInit(absl::string_view full_name) {
- return MangleName(full_name) + "_msg_init";
-}
-
std::string MessageInitName(upb::MessageDefPtr descriptor) {
return MessageInit(descriptor.full_name());
}
@@ -92,8 +83,9 @@
const upb_MiniTableField* field64,
const upb_MiniTableField* field32) {
return absl::Substitute(
- "{$0, $1, $2, $3, $4, $5}", field64->number,
- ArchDependentSize(field32->offset, field64->offset),
+ "{$0, $1, $2, $3, $4, $5}", upb_MiniTableField_Number(field64),
+ ArchDependentSize(field32->UPB_PRIVATE(offset),
+ field64->UPB_PRIVATE(offset)),
ArchDependentSize(field32->presence, field64->presence),
field64->UPB_PRIVATE(submsg_index) == kUpb_NoSub
? "kUpb_NoSub"
@@ -114,7 +106,7 @@
std::string GetModeInit(const upb_MiniTableField* field32,
const upb_MiniTableField* field64) {
std::string ret;
- uint8_t mode32 = field32->mode;
+ uint8_t mode32 = field32->UPB_PRIVATE(mode);
switch (mode32 & kUpb_FieldMode_Mask) {
case kUpb_FieldMode_Map:
ret = "(int)kUpb_FieldMode_Map";
@@ -148,15 +140,18 @@
std::string GetFieldRep(const upb_MiniTableField* field32,
const upb_MiniTableField* field64) {
- switch (_upb_MiniTableField_GetRep(field32)) {
+ const auto rep32 = UPB_PRIVATE(_upb_MiniTableField_GetRep)(field32);
+ const auto rep64 = UPB_PRIVATE(_upb_MiniTableField_GetRep)(field64);
+
+ switch (rep32) {
case kUpb_FieldRep_1Byte:
return "kUpb_FieldRep_1Byte";
break;
case kUpb_FieldRep_4Byte: {
- if (_upb_MiniTableField_GetRep(field64) == kUpb_FieldRep_4Byte) {
+ if (rep64 == kUpb_FieldRep_4Byte) {
return "kUpb_FieldRep_4Byte";
} else {
- assert(_upb_MiniTableField_GetRep(field64) == kUpb_FieldRep_8Byte);
+ assert(rep64 == kUpb_FieldRep_8Byte);
return "UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte)";
}
break;
diff --git a/upb_generator/file_layout.cc b/upb_generator/file_layout.cc
index e2660e9..ad3d8fd 100644
--- a/upb_generator/file_layout.cc
+++ b/upb_generator/file_layout.cc
@@ -11,7 +11,6 @@
#include <unordered_set>
#include <vector>
-#include "upb/mini_table/internal/extension.h"
#include "upb/reflection/def.hpp"
#include "upb_generator/common.h"
diff --git a/upb_generator/mangle.cc b/upb_generator/mangle.cc
new file mode 100644
index 0000000..c8a69f0
--- /dev/null
+++ b/upb_generator/mangle.cc
@@ -0,0 +1,21 @@
+#include "upb_generator/mangle.h"
+
+#include <string>
+
+#include "absl/strings/str_replace.h"
+#include "absl/strings/string_view.h"
+
+// Generate a mangled C name for a proto object.
+static std::string MangleName(absl::string_view name) {
+ return absl::StrReplaceAll(name, {{"_", "_0"}, {".", "__"}});
+}
+
+namespace upb {
+namespace generator {
+
+std::string MessageInit(absl::string_view full_name) {
+ return MangleName(full_name) + "_msg_init";
+}
+
+} // namespace generator
+} // namespace upb
diff --git a/upb_generator/mangle.h b/upb_generator/mangle.h
new file mode 100644
index 0000000..de8c804
--- /dev/null
+++ b/upb_generator/mangle.h
@@ -0,0 +1,16 @@
+#ifndef THIRD_PARTY_UPB_UPB_GENERATOR_MANGLE_H_
+#define THIRD_PARTY_UPB_UPB_GENERATOR_MANGLE_H_
+
+#include <string>
+
+#include "absl/strings/string_view.h"
+
+namespace upb {
+namespace generator {
+
+std::string MessageInit(absl::string_view full_name);
+
+} // namespace generator
+} // namespace upb
+
+#endif // THIRD_PARTY_UPB_UPB_GENERATOR_MANGLE_H_
diff --git a/upb_generator/plugin.h b/upb_generator/plugin.h
index a4ff00f..31ca530 100644
--- a/upb_generator/plugin.h
+++ b/upb_generator/plugin.h
@@ -170,6 +170,10 @@
UPB_DESC(compiler_CodeGeneratorResponse_FEATURE_SUPPORTS_EDITIONS);
UPB_DESC(compiler_CodeGeneratorResponse_set_supported_features)
(response_, features);
+ UPB_DESC(compiler_CodeGeneratorResponse_set_minimum_edition)
+ (response_, UPB_DESC(EDITION_PROTO2));
+ UPB_DESC(compiler_CodeGeneratorResponse_set_maximum_edition)
+ (response_, UPB_DESC(EDITION_2023));
}
void WriteResponse() {
diff --git a/upb_generator/protoc-gen-upb.cc b/upb_generator/protoc-gen-upb.cc
index ae5f1fe..b5d3e2c 100644
--- a/upb_generator/protoc-gen-upb.cc
+++ b/upb_generator/protoc-gen-upb.cc
@@ -74,7 +74,6 @@
std::string ExtensionIdentBase(upb::FieldDefPtr ext) {
assert(ext.is_extension());
- std::string ext_scope;
if (ext.extension_scope()) {
return MessageName(ext.extension_scope());
} else {
@@ -261,7 +260,7 @@
output(
R"cc(
UPB_INLINE bool $0_has_$1(const struct $2* msg) {
- return _upb_Message_HasExtensionField(msg, &$3);
+ return _upb_Message_HasExtensionField((upb_Message*)msg, &$3);
}
)cc",
ExtensionIdentBase(ext), ext.name(), MessageName(ext.containing_type()),
@@ -270,7 +269,7 @@
output(
R"cc(
UPB_INLINE void $0_clear_$1(struct $2* msg) {
- _upb_Message_ClearExtensionField(msg, &$3);
+ _upb_Message_ClearExtensionField((upb_Message*)msg, &$3);
}
)cc",
ExtensionIdentBase(ext), ext.name(), MessageName(ext.containing_type()),
@@ -283,11 +282,12 @@
R"cc(
UPB_INLINE $0 $1_$2(const struct $3* msg) {
const upb_MiniTableExtension* ext = &$4;
- UPB_ASSUME(!upb_IsRepeatedOrMap(&ext->field));
- UPB_ASSUME(_upb_MiniTableField_GetRep(&ext->field) == $5);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(&ext->UPB_PRIVATE(field)));
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(
+ &ext->UPB_PRIVATE(field)) == $5);
$0 default_val = $6;
$0 ret;
- _upb_Message_GetExtensionField(msg, ext, &default_val, &ret);
+ _upb_Message_GetExtensionField((upb_Message*)msg, ext, &default_val, &ret);
return ret;
}
)cc",
@@ -298,9 +298,10 @@
R"cc(
UPB_INLINE void $1_set_$2(struct $3* msg, $0 val, upb_Arena* arena) {
const upb_MiniTableExtension* ext = &$4;
- UPB_ASSUME(!upb_IsRepeatedOrMap(&ext->field));
- UPB_ASSUME(_upb_MiniTableField_GetRep(&ext->field) == $5);
- bool ok = _upb_Message_SetExtensionField(msg, ext, &val, arena);
+ UPB_ASSUME(upb_MiniTableField_IsScalar(&ext->UPB_PRIVATE(field)));
+ UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(
+ &ext->UPB_PRIVATE(field)) == $5);
+ bool ok = _upb_Message_SetExtensionField((upb_Message*)msg, ext, &val, arena);
UPB_ASSERT(ok);
}
)cc",
@@ -322,7 +323,8 @@
UPB_INLINE $0* $0_parse(const char* buf, size_t size, upb_Arena* arena) {
$0* ret = $0_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, $1, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), $1, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -332,21 +334,21 @@
int options, upb_Arena* arena) {
$0* ret = $0_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, $1, extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), $1, extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* $0_serialize(const $0* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, $1, 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), $1, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* $0_serialize_ex(const $0* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, $1, options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), $1, options, arena, &ptr, len);
return ptr;
}
)cc",
@@ -370,7 +372,8 @@
R"cc(
UPB_INLINE $0_oneofcases $1_$2_case(const $1* msg) {
const upb_MiniTableField field = $3;
- return ($0_oneofcases)upb_Message_WhichOneofFieldNumber(msg, &field);
+ return ($0_oneofcases)upb_Message_WhichOneofFieldNumber(
+ UPB_UPCAST(msg), &field);
}
)cc",
fullname, msg_name, oneof.name(),
@@ -387,23 +390,10 @@
R"cc(
UPB_INLINE bool $0_has_$1(const $0* msg) {
const upb_MiniTableField field = $2;
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
)cc",
msg_name, resolved_name, FieldInitializer(pools, field, options));
- } else if (field.IsMap()) {
- // Do nothing.
- } else if (field.IsSequence()) {
- // TODO: remove.
- output(
- R"cc(
- UPB_INLINE bool $0_has_$1(const $0* msg) {
- size_t size;
- $0_$1(msg, &size);
- return size != 0;
- }
- )cc",
- msg_name, resolved_name);
}
}
@@ -421,7 +411,7 @@
R"cc(
UPB_INLINE void $0_clear_$1($0* msg) {
const upb_MiniTableField field = $2;
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
)cc",
msg_name, resolved_name, FieldInitializer(pools, field, options));
@@ -436,7 +426,7 @@
R"cc(
UPB_INLINE size_t $0_$1_size(const $0* msg) {
const upb_MiniTableField field = $2;
- const upb_Map* map = upb_Message_GetMap(msg, &field);
+ const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field);
return map ? _upb_Map_Size(map) : 0;
}
)cc",
@@ -445,7 +435,7 @@
R"cc(
UPB_INLINE bool $0_$1_get(const $0* msg, $2 key, $3* val) {
const upb_MiniTableField field = $4;
- const upb_Map* map = upb_Message_GetMap(msg, &field);
+ const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return false;
return _upb_Map_Get(map, &key, $5, val, $6);
}
@@ -457,7 +447,7 @@
R"cc(
UPB_INLINE $0 $1_$2_next(const $1* msg, size_t* iter) {
const upb_MiniTableField field = $3;
- const upb_Map* map = upb_Message_GetMap(msg, &field);
+ const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return NULL;
return ($0)_upb_map_next(map, iter);
}
@@ -474,11 +464,11 @@
R"cc(
UPB_INLINE const upb_Map* _$0_$1_$2($0* msg) {
const upb_MiniTableField field = $4;
- return upb_Message_GetMap(msg, &field);
+ return upb_Message_GetMap(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_Map* _$0_$1_$3($0* msg, upb_Arena* a) {
const upb_MiniTableField field = $4;
- return _upb_Message_GetOrCreateMutableMap(msg, &field, $5, $6, a);
+ return _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), &field, $5, $6, a);
}
)cc",
msg_name, resolved_name, kMapGetterPostfix, kMutableMapGetterPostfix,
@@ -513,9 +503,9 @@
R"cc(
UPB_INLINE $0 const* $1_$2(const $1* msg, size_t* size) {
const upb_MiniTableField field = $3;
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return ($0 const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -538,18 +528,18 @@
R"cc(
UPB_INLINE const upb_Array* _$1_$2_$4(const $1* msg, size_t* size) {
const upb_MiniTableField field = $3;
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
- UPB_INLINE upb_Array* _$1_$2_$5(const $1* msg, size_t* size, upb_Arena* arena) {
+ UPB_INLINE upb_Array* _$1_$2_$5($1* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = $3;
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
@@ -574,7 +564,8 @@
$0 default_val = $3;
$0 ret;
const upb_MiniTableField field = $4;
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
)cc",
@@ -608,7 +599,7 @@
R"cc(
UPB_INLINE void $0_$1_clear($0* msg) {
const upb_MiniTableField field = $2;
- upb_Map* map = (upb_Map*)upb_Message_GetMap(msg, &field);
+ upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return;
_upb_Map_Clear(map);
}
@@ -618,7 +609,8 @@
R"cc(
UPB_INLINE bool $0_$1_set($0* msg, $2 key, $3 val, upb_Arena* a) {
const upb_MiniTableField field = $4;
- upb_Map* map = _upb_Message_GetOrCreateMutableMap(msg, &field, $5, $6, a);
+ upb_Map* map = _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg),
+ &field, $5, $6, a);
return _upb_Map_Insert(map, &key, $5, &val, $6, a) !=
kUpb_MapInsertStatus_OutOfMemory;
}
@@ -630,7 +622,7 @@
R"cc(
UPB_INLINE bool $0_$1_delete($0* msg, $2 key) {
const upb_MiniTableField field = $3;
- upb_Map* map = (upb_Map*)upb_Message_GetMap(msg, &field);
+ upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return false;
return _upb_Map_Delete(map, &key, $4, NULL);
}
@@ -641,7 +633,7 @@
R"cc(
UPB_INLINE $0 $1_$2_nextmutable($1* msg, size_t* iter) {
const upb_MiniTableField field = $3;
- upb_Map* map = (upb_Map*)upb_Message_GetMap(msg, &field);
+ upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return NULL;
return ($0)_upb_map_next(map, iter);
}
@@ -659,9 +651,9 @@
R"cc(
UPB_INLINE $0* $1_mutable_$2($1* msg, size_t* size) {
upb_MiniTableField field = $3;
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return ($0*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -675,7 +667,8 @@
R"cc(
UPB_INLINE $0* $1_resize_$2($1* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = $3;
- return ($0*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return ($0*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
)cc",
CType(field), msg_name, resolved_name,
@@ -685,13 +678,16 @@
R"cc(
UPB_INLINE struct $0* $1_add_$2($1* msg, upb_Arena* arena) {
upb_MiniTableField field = $4;
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct $0* sub = (struct $0*)_upb_Message_New($3, arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
)cc",
@@ -703,11 +699,14 @@
R"cc(
UPB_INLINE bool $1_add_$2($1* msg, $0 val, upb_Arena* arena) {
upb_MiniTableField field = $3;
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
)cc",
@@ -741,7 +740,7 @@
output(R"cc(
UPB_INLINE void $0_set_$1($0 *msg, $2 value) {
const upb_MiniTableField field = $3;
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
)cc",
msg_name, field_name, CType(field),
@@ -900,7 +899,8 @@
// Forward-declare types defined in this file.
for (auto message : this_file_messages) {
- output("typedef struct $0 $0;\n", ToCIdent(message.full_name()));
+ output("typedef struct $0 { upb_Message UPB_PRIVATE(base); } $0;\n",
+ ToCIdent(message.full_name()));
}
// Forward-declare types not in this file, but used as submessages.
@@ -941,8 +941,8 @@
size_t max64 = 0;
for (const auto message : this_file_messages) {
if (absl::EndsWith(message.name(), "Options")) {
- size_t size32 = pools.GetMiniTable32(message)->size;
- size_t size64 = pools.GetMiniTable64(message)->size;
+ size_t size32 = pools.GetMiniTable32(message)->UPB_PRIVATE(size);
+ size_t size64 = pools.GetMiniTable64(message)->UPB_PRIVATE(size);
if (size32 > max32) {
max32 = size32;
max32_message = message;
diff --git a/upb_generator/protoc-gen-upb_minitable.cc b/upb_generator/protoc-gen-upb_minitable.cc
index 08dfcdc..6f73d2b 100644
--- a/upb_generator/protoc-gen-upb_minitable.cc
+++ b/upb_generator/protoc-gen-upb_minitable.cc
@@ -5,6 +5,8 @@
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
+#include <string.h>
+
#include <algorithm>
#include <cstddef>
#include <cstdint>
@@ -17,18 +19,19 @@
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
-#include "absl/strings/escaping.h"
#include "absl/strings/str_cat.h"
-#include "absl/strings/str_replace.h"
#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
#include "upb/base/descriptor_constants.h"
+#include "upb/base/status.hpp"
#include "upb/base/string_view.h"
+#include "upb/mini_table/enum.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
#include "upb/reflection/def.hpp"
#include "upb/wire/types.h"
#include "upb_generator/common.h"
#include "upb_generator/file_layout.h"
-#include "upb_generator/names.h"
#include "upb_generator/plugin.h"
// Must be last.
@@ -62,7 +65,7 @@
}
std::string ExtensionIdentBase(upb::FieldDefPtr ext) {
- assert(ext.is_extension());
+ UPB_ASSERT(ext.is_extension());
std::string ext_scope;
if (ext.extension_scope()) {
return MessageName(ext.extension_scope());
@@ -263,23 +266,12 @@
return false; // Not supported yet.
}
- switch (upb_FieldMode_Get(mt_f)) {
- case kUpb_FieldMode_Map:
- return false; // Not supported yet (ever?).
- case kUpb_FieldMode_Array:
- if (mt_f->mode & kUpb_LabelFlags_IsPacked) {
- cardinality = "p";
- } else {
- cardinality = "r";
- }
- break;
- case kUpb_FieldMode_Scalar:
- if (mt_f->presence < 0) {
- cardinality = "o";
- } else {
- cardinality = "s";
- }
- break;
+ if (upb_MiniTableField_IsArray(mt_f)) {
+ cardinality = upb_MiniTableField_IsPacked(mt_f) ? "p" : "r";
+ } else if (upb_MiniTableField_IsScalar(mt_f)) {
+ cardinality = upb_MiniTableField_IsInOneof(mt_f) ? "o" : "s";
+ } else {
+ return false; // Not supported yet (ever?).
}
uint64_t expected_tag = GetEncodedTag(field);
@@ -293,7 +285,8 @@
//
// - |presence| is either hasbit index or field number for oneofs.
- uint64_t data = static_cast<uint64_t>(mt_f->offset) << 48 | expected_tag;
+ uint64_t data =
+ static_cast<uint64_t>(mt_f->UPB_PRIVATE(offset)) << 48 | expected_tag;
if (field.IsSequence()) {
// No hasbit/oneof-related fields.
@@ -325,7 +318,7 @@
// cross-file sub-message parsing if we are comfortable requiring that
// users compile all messages at the same time.
const upb_MiniTable* sub_mt = pools.GetMiniTable64(field.message_type());
- size = sub_mt->size + 8;
+ size = sub_mt->UPB_PRIVATE(size) + 8;
}
std::vector<size_t> breaks = {64, 128, 192, 256};
for (auto brk : breaks) {
@@ -392,16 +385,18 @@
std::string GetSub(upb::FieldDefPtr field) {
if (auto message_def = field.message_type()) {
- return absl::Substitute("{.submsg = &$0}", MessageInitName(message_def));
+ return absl::Substitute("{.UPB_PRIVATE(submsg) = &$0}",
+ MessageInitName(message_def));
}
if (auto enum_def = field.enum_subdef()) {
if (enum_def.is_closed()) {
- return absl::Substitute("{.subenum = &$0}", EnumInit(enum_def));
+ return absl::Substitute("{.UPB_PRIVATE(subenum) = &$0}",
+ EnumInit(enum_def));
}
}
- return std::string("{.submsg = NULL}");
+ return std::string("{.UPB_PRIVATE(submsg) = NULL}");
}
// Writes a single message into a .upb.c source file.
@@ -415,12 +410,13 @@
const upb_MiniTable* mt_64 = pools.GetMiniTable64(message);
std::map<int, std::string> subs;
- for (int i = 0; i < mt_64->field_count; i++) {
- const upb_MiniTableField* f = &mt_64->fields[i];
+ for (int i = 0; i < mt_64->UPB_PRIVATE(field_count); i++) {
+ const upb_MiniTableField* f = &mt_64->UPB_PRIVATE(fields)[i];
uint32_t index = f->UPB_PRIVATE(submsg_index);
if (index != kUpb_NoSub) {
+ const int f_number = upb_MiniTableField_Number(f);
auto pair =
- subs.emplace(index, GetSub(message.FindFieldByNumber(f->number)));
+ subs.emplace(index, GetSub(message.FindFieldByNumber(f_number)));
ABSL_CHECK(pair.second);
}
}
@@ -440,25 +436,27 @@
output("};\n\n");
}
- if (mt_64->field_count > 0) {
+ if (mt_64->UPB_PRIVATE(field_count) > 0) {
std::string fields_array_name = msg_name + "__fields";
fields_array_ref = "&" + fields_array_name + "[0]";
output("static const upb_MiniTableField $0[$1] = {\n", fields_array_name,
- mt_64->field_count);
- for (int i = 0; i < mt_64->field_count; i++) {
- WriteMessageField(message.FindFieldByNumber(mt_64->fields[i].number),
- &mt_64->fields[i], &mt_32->fields[i], output);
+ mt_64->UPB_PRIVATE(field_count));
+ for (int i = 0; i < mt_64->UPB_PRIVATE(field_count); i++) {
+ WriteMessageField(message.FindFieldByNumber(
+ mt_64->UPB_PRIVATE(fields)[i].UPB_PRIVATE(number)),
+ &mt_64->UPB_PRIVATE(fields)[i],
+ &mt_32->UPB_PRIVATE(fields)[i], output);
}
output("};\n\n");
}
std::vector<TableEntry> table;
- uint8_t table_mask = -1;
+ uint8_t table_mask = ~0;
table = FastDecodeTable(message, pools);
if (table.size() > 1) {
- assert((table.size() & (table.size() - 1)) == 0);
+ UPB_ASSERT((table.size() & (table.size() - 1)) == 0);
table_mask = (table.size() - 1) << 3;
}
@@ -476,8 +474,10 @@
output(" $0,\n", submsgs_array_ref);
output(" $0,\n", fields_array_ref);
output(" $0, $1, $2, $3, UPB_FASTTABLE_MASK($4), $5,\n",
- ArchDependentSize(mt_32->size, mt_64->size), mt_64->field_count,
- msgext, mt_64->dense_below, table_mask, mt_64->required_count);
+ ArchDependentSize(mt_32->UPB_PRIVATE(size), mt_64->UPB_PRIVATE(size)),
+ mt_64->UPB_PRIVATE(field_count), msgext,
+ mt_64->UPB_PRIVATE(dense_below), table_mask,
+ mt_64->UPB_PRIVATE(required_count));
if (!table.empty()) {
output(" UPB_FASTTABLE_INIT({\n");
for (const auto& ent : table) {
@@ -492,10 +492,11 @@
void WriteEnum(upb::EnumDefPtr e, Output& output) {
std::string values_init = "{\n";
const upb_MiniTableEnum* mt = e.mini_table();
- uint32_t value_count = (mt->mask_limit / 32) + mt->value_count;
+ uint32_t value_count =
+ (mt->UPB_PRIVATE(mask_limit) / 32) + mt->UPB_PRIVATE(value_count);
for (uint32_t i = 0; i < value_count; i++) {
- absl::StrAppend(&values_init, " 0x", absl::Hex(mt->data[i]),
- ",\n");
+ absl::StrAppend(&values_init, " 0x",
+ absl::Hex(mt->UPB_PRIVATE(data)[i]), ",\n");
}
values_init += " }";
@@ -507,7 +508,8 @@
$3,
};
)cc",
- EnumInit(e), mt->mask_limit, mt->value_count, values_init);
+ EnumInit(e), mt->UPB_PRIVATE(mask_limit), mt->UPB_PRIVATE(value_count),
+ values_init);
output("\n");
}
diff --git a/upb_generator/stage0/google/protobuf/compiler/plugin.upb.c b/upb_generator/stage0/google/protobuf/compiler/plugin.upb.c
index b8f792a..c1de6bd 100644
--- a/upb_generator/stage0/google/protobuf/compiler/plugin.upb.c
+++ b/upb_generator/stage0/google/protobuf/compiler/plugin.upb.c
@@ -34,7 +34,7 @@
const upb_MiniTable* google__protobuf__compiler__CodeGeneratorResponse_msg_init() {
static upb_MiniTable* mini_table = NULL;
- static const char* mini_descriptor = "$1,lG";
+ static const char* mini_descriptor = "$1,((jG";
if (mini_table) return mini_table;
mini_table =
upb_MiniTable_Build(mini_descriptor, strlen(mini_descriptor),
diff --git a/upb_generator/stage0/google/protobuf/compiler/plugin.upb.h b/upb_generator/stage0/google/protobuf/compiler/plugin.upb.h
index 1c5e100..fedc529 100644
--- a/upb_generator/stage0/google/protobuf/compiler/plugin.upb.h
+++ b/upb_generator/stage0/google/protobuf/compiler/plugin.upb.h
@@ -25,10 +25,10 @@
extern const upb_MiniTable* google__protobuf__GeneratedCodeInfo_msg_init();
extern const upb_MiniTableEnum* google_protobuf_compiler_CodeGeneratorResponse_Feature_enum_init();
-typedef struct google_protobuf_compiler_Version google_protobuf_compiler_Version;
-typedef struct google_protobuf_compiler_CodeGeneratorRequest google_protobuf_compiler_CodeGeneratorRequest;
-typedef struct google_protobuf_compiler_CodeGeneratorResponse google_protobuf_compiler_CodeGeneratorResponse;
-typedef struct google_protobuf_compiler_CodeGeneratorResponse_File google_protobuf_compiler_CodeGeneratorResponse_File;
+typedef struct google_protobuf_compiler_Version { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_Version;
+typedef struct google_protobuf_compiler_CodeGeneratorRequest { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_CodeGeneratorRequest;
+typedef struct google_protobuf_compiler_CodeGeneratorResponse { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_CodeGeneratorResponse;
+typedef struct google_protobuf_compiler_CodeGeneratorResponse_File { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_CodeGeneratorResponse_File;
struct google_protobuf_FileDescriptorProto;
struct google_protobuf_GeneratedCodeInfo;
@@ -48,7 +48,8 @@
UPB_INLINE google_protobuf_compiler_Version* google_protobuf_compiler_Version_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_Version* ret = google_protobuf_compiler_Version_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__Version_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__Version_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -58,99 +59,103 @@
int options, upb_Arena* arena) {
google_protobuf_compiler_Version* ret = google_protobuf_compiler_Version_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__Version_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__Version_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_Version_serialize(const google_protobuf_compiler_Version* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__Version_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__Version_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_Version_serialize_ex(const google_protobuf_compiler_Version* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__Version_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__Version_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_Version_clear_major(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_Version_major(const google_protobuf_compiler_Version* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_major(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_clear_minor(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_Version_minor(const google_protobuf_compiler_Version* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_minor(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_clear_patch(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_Version_patch(const google_protobuf_compiler_Version* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_patch(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_clear_suffix(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_Version_suffix(const google_protobuf_compiler_Version* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_suffix(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_set_major(google_protobuf_compiler_Version *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_Version_set_minor(google_protobuf_compiler_Version *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_Version_set_patch(google_protobuf_compiler_Version *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_Version_set_suffix(google_protobuf_compiler_Version *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.compiler.CodeGeneratorRequest */
@@ -161,7 +166,8 @@
UPB_INLINE google_protobuf_compiler_CodeGeneratorRequest* google_protobuf_compiler_CodeGeneratorRequest_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorRequest* ret = google_protobuf_compiler_CodeGeneratorRequest_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -171,32 +177,32 @@
int options, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorRequest* ret = google_protobuf_compiler_CodeGeneratorRequest_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorRequest_serialize(const google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorRequest_serialize_ex(const google_protobuf_compiler_CodeGeneratorRequest* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_compiler_CodeGeneratorRequest_file_to_generate(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -205,65 +211,62 @@
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_generate_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_generate_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_generate_mutable_upb_array(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_file_to_generate(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
- size_t size;
- google_protobuf_compiler_CodeGeneratorRequest_file_to_generate(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_parameter(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorRequest_parameter(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_parameter(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_compiler_version(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_compiler_Version* google_protobuf_compiler_CodeGeneratorRequest_compiler_version(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
const google_protobuf_compiler_Version* default_val = NULL;
const google_protobuf_compiler_Version* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_compiler_version(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const struct google_protobuf_FileDescriptorProto* const* google_protobuf_compiler_CodeGeneratorRequest_proto_file(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const struct google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -272,35 +275,30 @@
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_mutable_upb_array(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_proto_file(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
- size_t size;
- google_protobuf_compiler_CodeGeneratorRequest_proto_file(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const struct google_protobuf_FileDescriptorProto* const* google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const struct google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -309,32 +307,27 @@
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors_mutable_upb_array(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_source_file_descriptors(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
- size_t size;
- google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors(msg, &size);
- return size != 0;
-}
UPB_INLINE upb_StringView* google_protobuf_compiler_CodeGeneratorRequest_mutable_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -343,24 +336,28 @@
}
UPB_INLINE upb_StringView* google_protobuf_compiler_CodeGeneratorRequest_resize_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_add_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
- _upb_Array_Set(arr, arr->size - 1, &val, sizeof(val));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val));
return true;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_set_parameter(google_protobuf_compiler_CodeGeneratorRequest *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_set_compiler_version(google_protobuf_compiler_CodeGeneratorRequest *msg, google_protobuf_compiler_Version* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_compiler_Version* google_protobuf_compiler_CodeGeneratorRequest_mutable_compiler_version(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena) {
struct google_protobuf_compiler_Version* sub = (struct google_protobuf_compiler_Version*)google_protobuf_compiler_CodeGeneratorRequest_compiler_version(msg);
@@ -372,9 +369,9 @@
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_mutable_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (struct google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -383,24 +380,28 @@
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_resize_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_compiler_CodeGeneratorRequest_add_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FileDescriptorProto* sub = (struct google_protobuf_FileDescriptorProto*)_upb_Message_New(google__protobuf__FileDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_mutable_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (struct google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -409,17 +410,21 @@
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_resize_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_compiler_CodeGeneratorRequest_add_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_FileDescriptorProto* sub = (struct google_protobuf_FileDescriptorProto*)_upb_Message_New(google__protobuf__FileDescriptorProto_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -431,7 +436,8 @@
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse* google_protobuf_compiler_CodeGeneratorResponse_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse* ret = google_protobuf_compiler_CodeGeneratorResponse_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -441,62 +447,96 @@
int options, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse* ret = google_protobuf_compiler_CodeGeneratorResponse_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_serialize(const google_protobuf_compiler_CodeGeneratorResponse* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_serialize_ex(const google_protobuf_compiler_CodeGeneratorResponse* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_error(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_error(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_error(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_supported_features(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE uint64_t google_protobuf_compiler_CodeGeneratorResponse_supported_features(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
uint64_t default_val = (uint64_t)0ull;
uint64_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_supported_features(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
+}
+UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_minimum_edition(google_protobuf_compiler_CodeGeneratorResponse* msg) {
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
+}
+UPB_INLINE int32_t google_protobuf_compiler_CodeGeneratorResponse_minimum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
+ int32_t default_val = (int32_t)0;
+ int32_t ret;
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
+ return ret;
+}
+UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_minimum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
+}
+UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_maximum_edition(google_protobuf_compiler_CodeGeneratorResponse* msg) {
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
+}
+UPB_INLINE int32_t google_protobuf_compiler_CodeGeneratorResponse_maximum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
+ int32_t default_val = (int32_t)0;
+ int32_t ret;
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
+ return ret;
+}
+UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_maximum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_file(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_compiler_CodeGeneratorResponse_File* const* google_protobuf_compiler_CodeGeneratorResponse_file(const google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_compiler_CodeGeneratorResponse_File* const*)_upb_array_constptr(arr);
} else {
if (size) *size = 0;
@@ -505,40 +545,43 @@
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_upb_array(const google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- const upb_Array* arr = upb_Message_GetArray(msg, &field);
+ const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size, upb_Arena* arena) {
+UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_mutable_upb_array(google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(
- (upb_Message*)msg, &field, arena);
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
+ &field, arena);
if (size) {
- *size = arr ? arr->size : 0;
+ *size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
-UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_file(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
- size_t size;
- google_protobuf_compiler_CodeGeneratorResponse_file(msg, &size);
- return size != 0;
-}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_error(google_protobuf_compiler_CodeGeneratorResponse *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_supported_features(google_protobuf_compiler_CodeGeneratorResponse *msg, uint64_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
+}
+UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_minimum_edition(google_protobuf_compiler_CodeGeneratorResponse *msg, int32_t value) {
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
+}
+UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_maximum_edition(google_protobuf_compiler_CodeGeneratorResponse *msg, int32_t value) {
+ const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File** google_protobuf_compiler_CodeGeneratorResponse_mutable_file(google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
+ upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
- if (size) *size = arr->size;
+ if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_compiler_CodeGeneratorResponse_File**)_upb_array_ptr(arr);
} else {
if (size) *size = 0;
@@ -547,17 +590,21 @@
}
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File** google_protobuf_compiler_CodeGeneratorResponse_resize_file(google_protobuf_compiler_CodeGeneratorResponse* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- return (google_protobuf_compiler_CodeGeneratorResponse_File**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
+ return (google_protobuf_compiler_CodeGeneratorResponse_File**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
+ &field, size, arena);
}
UPB_INLINE struct google_protobuf_compiler_CodeGeneratorResponse_File* google_protobuf_compiler_CodeGeneratorResponse_add_file(google_protobuf_compiler_CodeGeneratorResponse* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
- upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
- if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
+ upb_Array* arr = upb_Message_GetOrCreateMutableArray(
+ UPB_UPCAST(msg), &field, arena);
+ if (!arr || !_upb_Array_ResizeUninitialized(
+ arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
}
struct google_protobuf_compiler_CodeGeneratorResponse_File* sub = (struct google_protobuf_compiler_CodeGeneratorResponse_File*)_upb_Message_New(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), arena);
if (!arr || !sub) return NULL;
- _upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
+ UPB_PRIVATE(_upb_Array_Set)
+ (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub));
return sub;
}
@@ -569,7 +616,8 @@
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File* google_protobuf_compiler_CodeGeneratorResponse_File_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse_File* ret = google_protobuf_compiler_CodeGeneratorResponse_File_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@@ -579,99 +627,103 @@
int options, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse_File* ret = google_protobuf_compiler_CodeGeneratorResponse_File_new(arena);
if (!ret) return NULL;
- if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), extreg, options, arena) !=
- kUpb_DecodeStatus_Ok) {
+ if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), extreg, options,
+ arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_File_serialize(const google_protobuf_compiler_CodeGeneratorResponse_File* msg, upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 0, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_File_serialize_ex(const google_protobuf_compiler_CodeGeneratorResponse_File* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
- (void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), options, arena, &ptr, len);
+ (void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_name(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_File_name(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_name(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_insertion_point(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_File_insertion_point(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_insertion_point(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_content(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_File_content(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_content(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_generated_code_info(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
- _upb_Message_ClearNonExtensionField(msg, &field);
+ _upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const struct google_protobuf_GeneratedCodeInfo* google_protobuf_compiler_CodeGeneratorResponse_File_generated_code_info(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const struct google_protobuf_GeneratedCodeInfo* default_val = NULL;
const struct google_protobuf_GeneratedCodeInfo* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
- _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
+ _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
+ &default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_generated_code_info(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
- return _upb_Message_HasNonExtensionField(msg, &field);
+ return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_name(google_protobuf_compiler_CodeGeneratorResponse_File *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_insertion_point(google_protobuf_compiler_CodeGeneratorResponse_File *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_content(google_protobuf_compiler_CodeGeneratorResponse_File *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_generated_code_info(google_protobuf_compiler_CodeGeneratorResponse_File *msg, struct google_protobuf_GeneratedCodeInfo* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
- _upb_Message_SetNonExtensionField(msg, &field, &value);
+ _upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_GeneratedCodeInfo* google_protobuf_compiler_CodeGeneratorResponse_File_mutable_generated_code_info(google_protobuf_compiler_CodeGeneratorResponse_File* msg, upb_Arena* arena) {
struct google_protobuf_GeneratedCodeInfo* sub = (struct google_protobuf_GeneratedCodeInfo*)google_protobuf_compiler_CodeGeneratorResponse_File_generated_code_info(msg);
diff --git a/upb_generator/upbdev.c b/upb_generator/upbdev.c
index 3de46e5..1a48621 100644
--- a/upb_generator/upbdev.c
+++ b/upb_generator/upbdev.c
@@ -19,6 +19,7 @@
#include "google/protobuf/compiler/plugin.upb.h"
#include "google/protobuf/compiler/plugin.upbdefs.h"
#include "upb/base/status.h"
+#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/mem/arena.h"
@@ -34,7 +35,8 @@
upb_DefPool* s = upb_DefPool_New();
const upb_MessageDef* m = google_protobuf_compiler_CodeGeneratorResponse_getmsgdef(s);
- (void)upb_JsonDecode(data, size, response, m, s, 0, arena, status);
+ (void)upb_JsonDecode(data, size, UPB_UPCAST(response), m, s, 0, arena,
+ status);
if (!upb_Status_IsOk(status)) return NULL;
upb_DefPool_Free(s);
@@ -50,12 +52,14 @@
const upb_MessageDef* m = upb_CodeGeneratorRequest_getmsgdef(s);
const int options = upb_JsonEncode_FormatEnumsAsIntegers;
- out.size = upb_JsonEncode(request, m, s, options, NULL, 0, status);
+ out.size =
+ upb_JsonEncode(UPB_UPCAST(request), m, s, options, NULL, 0, status);
if (!upb_Status_IsOk(status)) goto done;
char* data = (char*)upb_Arena_Malloc(arena, out.size + 1);
- (void)upb_JsonEncode(request, m, s, options, data, out.size + 1, status);
+ (void)upb_JsonEncode(UPB_UPCAST(request), m, s, options, data, out.size + 1,
+ status);
if (!upb_Status_IsOk(status)) goto done;
out.data = (const char*)data;
@@ -108,6 +112,6 @@
}
}
-upb_Arena* upbdev_Arena_New() { return upb_Arena_New(); }
+upb_Arena* upbdev_Arena_New(void) { return upb_Arena_New(); }
void upbdev_Status_Clear(upb_Status* status) { upb_Status_Clear(status); }
diff --git a/version.json b/version.json
index 735b320..0570013 100644
--- a/version.json
+++ b/version.json
@@ -4,14 +4,14 @@
"lts": false,
"date": "2023-11-01",
"languages": {
- "cpp": "4.26-dev",
+ "cpp": "5.26-dev",
"csharp": "3.26-dev",
- "java": "3.26-dev",
+ "java": "4.26-dev",
"javascript": "3.26-dev",
"objectivec": "3.26-dev",
- "php": "3.26-dev",
- "python": "4.26-dev",
- "ruby": "3.26-dev"
+ "php": "4.26-dev",
+ "python": "5.26-dev",
+ "ruby": "4.26-dev"
}
}
}